Hi,
ich suche jetzt schon eine ganze Weile nach einer Möglichkeit, die gewählten Werte eines Selectfeldes im Backend als "selected" zu markieren. Kann mir bitte jemand erklären wie ich das hinbekomme?
Grüsse
Sio
Hi,
ich suche jetzt schon eine ganze Weile nach einer Möglichkeit, die gewählten Werte eines Selectfeldes im Backend als "selected" zu markieren. Kann mir bitte jemand erklären wie ich das hinbekomme?
Grüsse
Sio
Meinst du in einem DCA? Normalerweise übernimmt contao das für dich. Was hast du den an Code?
Sent from my GT-I9100 using Tapatalk
Meine Erweiterungen: League Manager | Forum
Ja in der DCA, ich habe folgenden Eintrag in "fields"
und als SQL habe ich eine Tabelle:Code:'montag_1' => array( 'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_1'], 'exclude' => true, 'search' => true, 'inputType' => 'select', 'options_callback' => array('tl_sendeplan', 'getAllDJ'), 'eval' => array('includeBlankOption'=>true) )
Das options_callback liest alle Mitglieder einer gewählten Gruppe aus.Code:CREATE TABLE `tl_sendeplan` ( `id` int(10) unsigned NOT NULL auto_increment, `pid` int(10) unsigned NOT NULL default '0', `tstamp` int(10) unsigned NOT NULL default '0', `headline` varchar(255) NOT NULL default '', `alias` varbinary(128) NOT NULL default '', `author` int(10) unsigned NOT NULL default '0', `date` int(10) unsigned NOT NULL default '0', `time` int(10) unsigned NOT NULL default '0', `subheadline` varchar(255) NOT NULL default '', `groups` varchar(255) NOT NULL default '', `week_start` varchar(255) NOT NULL default '', `week_end` varchar(255) NOT NULL default '', `Montag_1` varchar(255) NOT NULL default '' PRIMARY KEY (`id`), KEY `pid` (`pid`), KEY `alias` (`alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Normalerweise nutze ich int(10) für solche Felder und verwende die id des Objektes. Was gibt dein callback denn zurück?
Sent from my GT-I9100 using Tapatalk
Meine Erweiterungen: League Manager | Forum
Also ich rufe ja die Methode getAllDJ auf mit Folgendem Inhalt
Und zwar kann man weiter oben aussuchen welche Gruppen hier aufgelistet werden sollen. Das Fallback liefert dann ein Array: ("1"=>"Name1","3"=>Name2","4"=>"Name3") ...PHP-Code:
public function getAllDJ(DataContainer $dc){
$Sendeplan = $this->Database->prepare("SELECT * FROM tl_sendeplan WHERE id = ?")->execute($dc->activeRecord->id);
$Sendeplan = $Sendeplan->row();
$User = $this->Database->prepare("SELECT * FROM tl_member")->execute();
$goups = deserialize($Sendeplan['groups']);
$user = array();
while($User->next()){
$row = $User->row();
$usergroups = deserialize($row['groups']);
if(!empty($goups))
$diff = array_diff($goups,$usergroups);
else $diff = array();
if(empty($diff)){
$user[$row['id']] = $row['firstname'].' '.$row['lastname'];
};
}
return $user;
}
die ID wir dann auch in der Tabelle gespeichert.
Sieht soweit richtig aus. Ich würde mal probieren, ob es hilft das Feld in der DB als int(10) zu definieren.
Meine Erweiterungen: League Manager | Forum
Habe ich schon gemacht, alle nötigen Felder haben jetzt die richtigen Einstellungen. Ich hab die Selectbox "author" hinzugefügt, bei ihr wird selected="selected" richtig gesetzt. Aber bei meinen Select-Boxen leider nicht, auch wenn ich die Boxen testweise zu Checkboxen mache wird das Häkchen nicht gesetzt. Muss ich in der DCA etwas in die Filter/Palettes schreiben oder vorher irgendeine onload_callback aufrufen dafür?
Ich hab ja schon einige Module angeschaut, kann aber nichts finden das den Checkboxen sagt was aktiv sein muss. Der Wert default => $eineID; funktioniert auch nicht, ich habe mit eval dann noch "includeBlankOption" => true; eingegeben. Jetzt hat immer die BlankOption selected="selected".
Ich hab auch schon länger nach einer Anleitung gesucht, die sich mit solchen Fällen beschäftigt aber habe nichts gefunden.
Grüsse
Sio
Also das Feld Athor funktioniert bei mir wunderbar, die Werte werden auch so wie ich es eingebe in die Datenbank gespeichert. Vielleicht hilft es wenn ich eben den Ablauf beschreibe:
1.) In der Navigation links "Sendeplan" auswählen
2.) Neuen Eintrag erstellen -> Title = Test
3.) Eintrag öffnen Gruppe wählen
4.) Optionen in den Select-Menüs wählen und speichern
- Author zeigt jetzt die richtige Auswahl an
- Die eigenen Selects zeigen den leeren Eintrag als "selected" an.
Ich habe Testweise mal ein paar print_r in die Datei ModulSelect und Widged geschrieben, der Debug-Text zeigt mir dass er für Author einen Wert mitbekommt welcher ausgewählt ist. Für meine Selects gibt es allerdings keinen ausgewählten Wert.
Meine Selects haben in der Datenbank nun alle `SPALTENNAME` int(10) unsigned NOT NULL default '0'
An der Datenbank kann es aber nicht liegen, da die Werte richtig gespeichert werden, also bleibt für mich nur ein logischer Schluss dass ich irgendwo meine Selects zusätzlich veröffentlichen muss. Ich denke so wie die DCA Paletts, ohne die werden auch keine Inputfelder im Backend angezeigt.
Bitte nicht über den Sinn der Erweiterung oder den Sinn der Strucktur hinterfragen, darum kümmer ich mich wenn ich weiß wie ich die selects hinbekomme.
Meine Contao-Version ist 2.9.5 und hier ist meine DCA:
Dazu meine config.phpPHP-Code:
<?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');
$GLOBALS['TL_DCA']['tl_sendeplan'] = array(
// Config
'config' => array(
'dataContainer' => 'Table',
'enableVersioning' => true
),
// List
'list' => array(
'sorting' => array(
'panelLayout' => 'filter;sort,search,limit'
),
'label' => array
(
'fields' => array('headline'),
'format' => '%s'
),
'global_operations' => array(
'all' => array(
'label' => &$GLOBALS['TL_LANG']['MSC']['all'],
'href' => 'act=select',
'class' => 'header_edit_all',
'attributes' => 'onclick="Backend.getScrollOffset();" accesskey="e"'
)
),
'operations' => array(
'edit' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['edit'],
'href' => 'act=edit',
'icon' => 'edit.gif'
),
'copy' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['copy'],
'href' => 'act=paste&mode=copy',
'icon' => 'copy.gif'
),
'cut' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['cut'],
'href' => 'act=paste&mode=cut',
'icon' => 'cut.gif'
),
'delete' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['delete'],
'href' => 'act=delete',
'icon' => 'delete.gif',
'attributes' => 'onclick="if (!confirm(\'' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\')) return false; Backend.getScrollOffset();"'
),
'show' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['show'],
'href' => 'act=show',
'icon' => 'show.gif'
)
)
),
// Palettes
'palettes' => array(
#'__selector__' => array('addImage', 'addEnclosure', 'source'),
'default' => '{title_legend},headline,alias,author;{sendeplan_legend},groups,montag_1,montag_2,montag_3;'
),
// Fields
'fields' => array(
'headline' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['headline'],
'exclude' => true,
'search' => true,
'sorting' => true,
'flag' => 1,
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'maxlength'=>255)
),
'alias' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['alias'],
'exclude' => true,
'search' => true,
'inputType' => 'text',
'eval' => array('rgxp'=>'alnum', 'unique'=>true, 'spaceToUnderscore'=>true, 'maxlength'=>128, 'tl_class'=>'w50'),
'save_callback' => array(
array('tl_sendeplan', 'generateAlias')
)
),
'author' => array
(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['author'],
'default' => "3",
'exclude' => true,
'inputType' => 'select',
'foreignKey' => 'tl_user.name',
'eval' => array('doNotCopy'=>true, 'mandatory'=>true, 'includeBlankOption'=>true, 'tl_class'=>'w50')
),
'groups' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['groups'],
'exclude' => true,
'search' => true,
'inputType' => 'checkboxWizard',
'foreignKey' => 'tl_member_group.name',
'eval' => array('multiple'=>true, 'feEditable'=>true, 'submitOnChange'=>true)
),
'montag_1' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_1'],
'default' => 3,
'exclude' => true,
'search' => true,
'inputType' => 'select',
'options_callback' => array('tl_sendeplan', 'getAllDJ'),
'eval' => array('doNotCopy'=>true,'includeBlankOption'=>true)
),
'montag_2' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_2'],
'exclude' => true,
'search' => true,
'inputType' => 'select',
'options_callback' => array('tl_sendeplan', 'getAllDJ'),
'eval' => array('includeBlankOption'=>true)
),
'montag_3' => array(
'label' => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_3'],
'exclude' => true,
'search' => true,
'inputType' => 'select',
'options_callback' => array('tl_sendeplan', 'getAllDJ'),
'eval' => array('includeBlankOption'=>true)
)
)
);
class tl_sendeplan extends Backend{
public function __construct(){
parent::__construct();
}
public function getAllDJ(DataContainer $dc){
$Sendeplan = $this->Database->prepare("SELECT * FROM tl_sendeplan WHERE id = ?")->execute($dc->activeRecord->id);
$Sendeplan = $Sendeplan->row();
$User = $this->Database->prepare("SELECT * FROM tl_member")->execute();
$goups = deserialize($Sendeplan['groups']);
$user = array();
while($User->next()){
$row = $User->row();
$usergroups = deserialize($row['groups']);
if(is_array($goups))
$diff = array_diff($goups,$usergroups);
else $diff = array();
if(empty($diff)){
$user[$row['id']] = $row['firstname'].' '.$row['lastname'];
};
}
return $user;
}
public function generateAlias($varValue, DataContainer $dc){
$autoAlias = false;
// Generate alias if there is none
if (!strlen($varValue))
{
$autoAlias = true;
$varValue = standardize($dc->activeRecord->headline);
}
$objAlias = $this->Database->prepare("SELECT id FROM tl_sendeplan WHERE alias=?")
->execute($varValue);
// Check whether the news alias exists
if ($objAlias->numRows > 1 && !$autoAlias)
{
throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $varValue));
}
// Add ID to alias
if ($objAlias->numRows && $autoAlias)
{
$varValue .= '-' . $dc->id;
}
return $varValue;
}
}
?>
und die SQLPHP-Code:
<?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');
/**
* Back end modules
*/
array_insert($GLOBALS['BE_MOD']['content'],4,array(
'sendeplan' => array('tables'=>array('tl_sendeplan'))
));
/**
* Front end modules
*/
array_insert($GLOBALS['FE_MOD'],2,array(
'sendeplan' => array(
'sendeplanDJ' => 'ModuleSendeplanDJ',
'sendeplan' => 'ModuleSendeplan'
)
));
?>
GrüsseCode:CREATE TABLE `tl_sendeplan` ( `id` int(10) unsigned NOT NULL auto_increment, `tstamp` int(10) unsigned NOT NULL default '0', `headline` varchar(255) NOT NULL default '', `alias` varbinary(128) NOT NULL default '', `author` int(10) unsigned NOT NULL default '0', `date` int(10) unsigned NOT NULL default '0', `time` int(10) unsigned NOT NULL default '0', `subheadline` varchar(255) NOT NULL default '', `groups` varchar(255) NOT NULL default '', `week_start` varchar(255) NOT NULL default '', `week_end` varchar(255) NOT NULL default '', `Montag_1` int(10) unsigned NOT NULL default '0', `Montag_2` int(10) NOT NULL default '0', `Montag_3` int(10) NOT NULL default '0', `Dienstag_1` int(10) NOT NULL default '0', `Dienstag_2` int(10) NOT NULL default '0', `Dienstag_3` int(10) NOT NULL default '0', `Mittwoch_1` int(10) NOT NULL default '0', `Mittwoch_2` int(10) NOT NULL default '0', `Mittwoch_3` int(10) NOT NULL default '0', `Donnerstag_1` int(10) NOT NULL default '0', `Donnerstag_2` int(10) NOT NULL default '0', `Donnerstag_3` int(10) NOT NULL default '0', `Freitag_1` int(10) NOT NULL default '0', `Freitag_2` int(10) NOT NULL default '0', `Freitag_3` int(10) NOT NULL default '0', `Samstag_1` int(10) NOT NULL default '0', `Samstag_2` int(10) NOT NULL default '0', `Samstag_3` int(10) NOT NULL default '0', `Sonntag_1` int(10) NOT NULL default '0', `Sonntag_2` int(10) NOT NULL default '0', `Sonntag_3` int(10) NOT NULL default '0' PRIMARY KEY (`id`), KEY `alias` (`alias`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Sio
Ahm tut mir voll leid das ich hier 3 mal hinter einander poste, aber ich finde keinen "Edit"-Button.
Ich hab die Extension nun mit dem Creator erstellt und nun funktionieren alle Selects. Da ich generell aber auch gerne ohne Creator entwickeln können würde(weil Baum) werde ich die Extension irgendwann mal analysieren und mit meiner Version vergleichen. Wenn ich was entsprechendes gefunden habe, schreibe ich ein Tutorial drüber ^^
(btw. tolle Extension dieser Creator)
Grüsse und Danke
Sio
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen