Ergebnis 1 bis 9 von 9

Thema: Validierung Select-Menü deaktivieren

  1. #1
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard 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

  2. #2
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

  3. #3
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Und wie löst du das jetzt? Du wirst doch wahrscheinlich keine Core-Datei überschreiben.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  4. #4
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Selbstverständlich ...

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Kommt die Lösung noch, oder wars das jetzt?
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #6
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Du kannst doch das Select auch dynamisch befüllen lassen.
    Du willst ein Select im Fomulargenerator (Frontend) dynamisch befüllen lassen?
    PHP-Code:
    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();
                    
                   
    $array //Was auch immer aus  $arrResult mitgeben möchtest;

            
           // Formular mit ID 7 für das Select-Elements mit der ID 336  
           
    if ($formId == || $objWidget->id == '336') { 
                
               
    $arrOptions = array();
               
                  
                
    //Foreach - Select befüllen
                    
    foreach($array as $value){
                                    
                                
    $arrOptions[] = array(
                                    
    'value' => $value[key],
                                    
    'label' => $value[key],
                                );         
                    }
                
                
    $objWidget->__set('options'serialize($arrOptions)); 
            } 
             
            return 
    $objWidget
        }  


    ungetestet.

    Liebe Grüße
    Matthias
    Geändert von Messa (19.07.2016 um 16:31 Uhr)
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  7. #7
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hey, super, vielen Dank, nach sowas hab ich gesucht.

    Ich versuch´s umzusetzen.


    Vg
    Michel

  8. #8
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    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 == || $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
    PHP-Code:
    print_r(); 
    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
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Messa (20.07.2016 um 10:05 Uhr)
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  9. #9
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard 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

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •