Ergebnis 1 bis 2 von 2

Thema: Voneinander abhängige Select-Felder, Problem bei Validierung

  1. #1
    Contao-Nutzer
    Registriert seit
    23.06.2012.
    Beiträge
    72

    Standard Voneinander abhängige Select-Felder, Problem bei Validierung

    Hallo,

    ich hoffe, ich schaffs einigermassen, mein Problem zu beschreiben...

    In meiner Erweiterung habe ich ein Formular, dass ich so erstelle wie es in der Comments-Erweiterung gemacht wird, d.h. ich definiere meine Felder in einem Array arrFields und rufe dann eine Methode "initializeWidgets()" auf, die aus den Feldern Widgets macht und dabei auch die validate()-Funktion aufruft.

    Nun möchte ich in dem Formular zwei Select-Felder benutzen, wobei die Liste der möglichen Optionen des zweiten von der derzeitigen Auswahl im ersten abhängt. Das dynamische Befüllen der Options-Liste funktioniert auch soweit problemlos.

    Wenn ich nun aber im zweiten Select-Feld einen Wert auswähle, vor dem Abschicken des Formulars aber auch das erste Select-Feld ändere, bekomme ich nach dem Abschicken eine Fehlermeldung. Denn nun werden die Options-Listen wieder dynamisch erstellt, wobei die Liste des zweiten Select-Felds ja neu aufgebaut wird und nun den Wert, der hierfür übergeben wurde, nicht mehr enthält. Wenn dann die validate()-Methode aufgerufen wird, bekomme ich entsprechend einen Fehler.

    Nun frage ich mich, wie ich das am besten löse.

    Über die Erweiterung "conditional_select" habe ich ein bischen gelesen und bin mir unsicher, ob sie geeignet ist, zumal ich dazu keine Doku finde, insbesondere nicht über die Verwendung in eigenen Erweiterungen.

    Ich wollte dann ein "load_callback" zufügen, aber der wird gar nicht aufgerufen, ich vermute mal, weil ich meine Formular-Felder nicht in einem DCA definiere sondern im PHP-Quellcode, und mein dort definierter Callback nicht in dem globalen Array eingetragen wird... an der Stelle fällt mir ein, könnte ich den Callback für das Formularfeld evtl. in einem DCA konfigurieren, auch wenn die Felder selbst dort nicht stehen?

    Die validate()-Methode für das Feld einfach nicht aufzurufen bringt übrigens nichts, weil damit dann das Select-Feld auch nicht mehr auf den ausgewählten Wert voreingestellt wird... was ich bräuchte wäre im Grunde, dass bei validate() das Select-Widgets die übergebene Option einstellt, sofern sie gültig ist, wenn sie aber ungültig ist, einen Default-Wert einstellt (bzw. das Widget "resettet").

    Hm... ich befürchte es ist nicht verständlich was ich meine aber ich hab keine Ahnung wie ich es besser ausdrücken soll.

    Tschüss,
    fluppi

  2. #2
    Contao-Nutzer
    Registriert seit
    23.06.2012.
    Beiträge
    72

    Standard

    Hallo,

    juhu es klappt jetzt :-)

    Die Lösung war relativ simpel. Ich checke einfach am Anfang, ob der übergebene Wert für meinen Parameter 'model' in der Liste der möglichen Options vorkommt und setze diesen, falls nicht, direkt über die Input-Klasse, auf den Default-Wert:

    PHP-Code:
    if (!in_array($this->Input->post('model'), $modelOptions))
    {
        
    $this->Input->setPost('model','');

    Danach werden dann die Widgets erzeugt (prepareForWidgets) und ggf., falls das Formular abgeschickt wurde, validiert (validate), und an dieser Stelle kommt es nun nicht mehr zu einem Fehler.

    Tschö,
    Fluppi

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
  •