Validierung Select-Menü deaktivieren
Hallo Forum,
sry, wenn ich nochmal fragen muss, ich hatte das vor geraumer Zeit schonmal und hab´s wieder vergessen:
Die Werte, die ein Select-Menü in einer Form erlaubt, müssen vorher im BE eingetragen sein. Das ist bei mir etwas schlecht, die möglichen Werte
müssen dynamisch sein, deswegen führt das immer zu einem Fehler: Value not valid.
Ich such das im Core, wo diese Abfrage stattfindet, find´s aber nicht, bzw. finde ich sowas:
PHP-Code:
/**
* Check for a valid option (see #4383)
*/
public function validate()
{
$varValue = $this->getPost($this->strName);
if (!empty($varValue) && !$this->isValidOption($varValue))
{
//$this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['invalid'], (is_array($varValue) ? implode(', ', $varValue) : $varValue)));
}
parent::validate();
}
Ich dachte, wenn ich das auskommentiere sollte es erledigt sein, aber das greift irgendwie nicht.
Hat hier jemand ne Idee?
Danke und VG
Michel
Liste der Anhänge anzeigen (Anzahl: 1)
Hier noch der Artikel im Handbuch.
https://docs.contao.org/books/api/ex...FormField.html
Ich habe den Code ca. wie oben in meinem Post in Verwendung.
1. Modul Ordner erstellen
2. selectfield.php Datei erstellen.
3. Code rein ;)
PHP-Code:
<?php
class selectfield extends Controller
{
public function myLoadFormField(Widget $objWidget, $strForm, $arrForm)
{
// Daten aus DB
$this->import('Database');
$result = $this->Database->prepare("SELECT * FROM tl_XXXXXXX WHERE id=?")->execute();
$arrResult = $result->fetchAllAssoc();
//Was auch immer aus $arrResult mitgeben möchtest
//Ein Feld aus $arrResult zum Beispiel - Array sollte auch ein array sein damit foreach Unten funktioniert
$array = $arrResult ;
//Formular mit ID 7 für das Select-Elements mit der ID 336
if ($formId == 7 || $objWidget->id == '336') {
$arrOptions = array();
foreach($array as $value){
$arrOptions[] = array(
'value' => $value[key],
'label' => $value[key],
);
}
$objWidget->__set('options', serialize($arrOptions));
}
return $objWidget;
}
}
4. Im Modul Ordner noch ein config Ordner erstellen
5. Hier rein kommt die config.php
PHP-Code:
<?php
$GLOBALS['TL_HOOKS']['loadFormField'][] = array('selectfield', 'myLoadFormField');
6. Autoload-Creator ausführen
7. Fertig :)
Falls dir unklar ist was genau alles in an Variablen vorhanden ist print_r hilft da immer gut weiter :D
http://php.net/manual/de/function.print-r.php
PS: Habe ich ja noch etwas vergessen.
Das Select muss auch im Formular vorhanden sein.
Ich habe dazu einfach ein leeres gemacht. (Siehe Anhang)
Dann musst du oben im Code nur noch die passende ID eintragen und auch die passen ID des Formulars.
Sonst hat es auf alle Formulare und alle Select's Auswirkungen.
Lg Matthias
Code getestet Contao 3.5.15
Hi, hier nochmal mein funktionierender Code, dem Select-Field werden 2 Werte hinzugefügt, die auch 'valid' sind:
PHP-Code:
public function fillSelect(Widget $objWidget, $strForm, $arrForm)
{
if ($arrForm['id']==34 && $objWidget->id==1491)
{
// Daten aus DB holen
$result = $this->Database->prepare("SELECT options FROM tl_form_field WHERE id= ?")->execute($objWidget->id);
$arrOptions = unserialize($result->options);
$arrNewOptions=array( "2016"=>"2016",
"2017"=>"2017");
while($value = each($arrNewOptions))
{
$arrOptions[] = array(
'value' => $value['value'],
'label' => $value['key'],
);
}
$objWidget->__set('options', serialize($arrOptions));
}
return $objWidget;
}
VG
Michel