Ergebnis 1 bis 10 von 10

Thema: Formularfelder per {{file::}} werden ignoriert

  1. #1
    Contao-Nutzer Avatar von Exzentrik
    Registriert seit
    23.05.2012.
    Beiträge
    39

    Frage Formularfelder per {{file::}} werden ignoriert

    Hi,

    ich habe ein Formular, über das Tickets für verschiedene Events reserviert werden können.
    Aktuell wird das Formular noch manuell alle paar tage aktualisiert, ich würde das aber gerne automatisieren.

    Also habe ich nun ein HTML-Formularfeld eingefügt, in dem per inserttag eine PHP geladen wird.
    Diese PHP wählt einfach nur alle zukünftigen Events die im Kalender veröffentlicht sind, und erstellt für jedes davon eine kleine Checkbox, die man anwählen kann.
    Auf diese Weise sind die Events im Formular immer aktuell und ich muss mich nicht ständig dran setzen.

    Alle Felder befinden sich innerhalb des FORM-tags.
    Aber die Werte, der angewählten Checkboxen, werden nicht übertragen.
    Ich habe dann die checkboxen durch Radio-Buttons ersetzt... die werden ebenfalls nicht übertragen.
    Dann habe ich über dem HTML-Feld mit der PHP-Datei ein Textfeld im Formulargenerator eingefügt und dessen Inhalt wird übertragen.

    Beim Absenden des Formulares werden alle Inputs, die über die PHP eingebunden werden, einfach ignoriert und ich verstehe nicht ganz wieso.

    Aufbau:

    FORM START
    - Textfeld <-- Wird übertragen
    - HTML-Feld mit {{file::felder.php}} <-- Wird nicht übertragen
    - Absendebutton

    Kann mir da bitte jemand auf die sprünge helfen?

    *EDIT*

    Ich habe den Inhalt der eingebundenen PHP-Datei mal aus purer Verzweiflung in ein Template kopiert, und das dann im Formulargenerator eingebunden.
    Auch hier werden die Input-Felder beim Absenden ignoriert.

    Für das Markup habe ich vorher ein Checkbox-Feld mit dem Formulargenerator erstellt und das dann rüberkopiert.
    Es sollte also absolut identisch sein. Ich hätte ehrlich gesagt erwartet, dass beim Submit einfach alle input-Values innerhalb des FORM-Tags übermittelt werden... aber irgendwas macht Contao wohl, von dem ich nichts weiß.

    *EDIT2*

    OK... wenn ich die "Form"-Klasse richtig verstehe verarbeitet Contao nur die Formularfelder in einer Schleife, die es vorher in der Datenbank gefunden hat.
    Jegliche Form von Dynamisch hinzugefügten Formularfeldern sind damit leider ausgeschlossen.
    Also entweder das Formular komplett selber und ohne Formulargenerator machen, oder im Generator versteckte Felder setzen, und deren Value bei click per Javascript umschreiben.

    ... Das ist natürlich bitter...

    Die Variante mit JavaScript wäre nicht wirklich Barrierefrei und alles außerhalb des Generators erstellen wäre super anstrengend, wenn ich das Formular per Mail verschicken will.
    Falls jemand eine dritte Variante kennt, wäre ich da sehr dankbar!
    Geändert von Exzentrik (31.03.2017 um 06:22 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.261
    Partner-ID
    10107

    Standard

    Du musst die Widgets über den compileFormFields Hook hinzufügen.
    Geändert von Spooky (01.04.2017 um 09:18 Uhr)

  3. #3
    Contao-Nutzer Avatar von Exzentrik
    Registriert seit
    23.05.2012.
    Beiträge
    39

    Standard

    Vielen Dank! Das hat mir schonmal sehr weitergeholfen.
    Allerdings würde ich gerne direkt die nächste Frage stellen:

    compileFormFields muss als return-Value ein Array zurückgeben, in dem das modifizierte Feld enthalten ist.
    Ich möchte ja jetzt die Optionen eines Select-Feldes anpassen. Gebe ich das dann einfach im dca-Format an?

    Wo könnte ich denn nachschauen, wie dieses Array aufgebaut sein müsste?

    Oder ist es so einfach wie $objFields->options = 'Option1, Option2, ...';

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.261
    Partner-ID
    10107

    Standard

    Zitat Zitat von Exzentrik Beitrag anzeigen
    compileFormFields muss als return-Value ein Array zurückgeben, in dem das modifizierte Feld enthalten ist.
    Nein, du musst in diesem Hook das modifizierte Array zurückgeben. In diesem Array sind die definierten Formular Feld Elemente aus dem Formular Generator (als \FormFieldModel Objekte). Wenn du eigene Felder dynamisch hinzufügen möchtest, kannst du das Array um eigene \FormFieldModel Objekte erweitern.



    Zitat Zitat von Exzentrik Beitrag anzeigen
    Ich möchte ja jetzt die Optionen eines Select-Feldes anpassen.
    Wenn du damit meinst, dass du eigentlich einfach nur ein bestehendes Formular Feld (welches du im Formulargenerator erzeugt hast) mit den Optionen erweitern möchtest, dann kannst du den loadFormField Hook verwenden. Darin überprüfst du einfach, ob es sich um das richtige Formular Feld handelt und setzt ganz einfach die options.
    Geändert von Spooky (01.04.2017 um 09:18 Uhr)

  5. #5
    Contao-Nutzer Avatar von Exzentrik
    Registriert seit
    23.05.2012.
    Beiträge
    39

    Standard

    Ich werd zum Tier... Das geht!

    Vielen,vielen Dank!
    Auf die Idee mit dem loadFormFields wäre ich wohl erst in 3-4 Tagen gekommen

  6. #6
    Contao-Nutzer Avatar von Exzentrik
    Registriert seit
    23.05.2012.
    Beiträge
    39

    Standard

    Hmm... ich hoffe, ich gehe hier noch niemandem auf die Nerven
    Aber ich fürchte, ich stelle mich gerade unglaublich doof an...

    Ich habe das jetzt mit LoadFormField soweit hinbekommen, dass das Selectfeld mit Werten aus der DB befüllt wird.
    Funktioniert alles soweit super. Wenn ich das Formular absende wird es auch verarbeitet.

    Das Problem entsteht, wenn ich die Optionen des angepassten Select-Feldes Gruppieren möchte.
    Dann spuckt er folgende Fehlermeldung aus:

    "Gastraumticket" ist der Wert der gesendet wurde.

    Code:
    Warning: Illegal string offset 'value' in system/modules/core/library/Contao/Widget.php on line 1328
    
    #0 system/modules/core/library/Contao/Widget.php(1328): __error(2, 'Illegal string ...', '/var/www/htdo...', 1328, Array)
    #1 system/modules/core/forms/FormSelectMenu.php(134): Contao\Widget->isValidOption('Gastraumticket')
    #2 system/modules/core/forms/Form.php(198): Contao\FormSelectMenu->validate()
    #3 system/modules/core/classes/Hybrid.php(239): Contao\Form->compile()
    #4 system/modules/core/forms/Form.php(84): Contao\Hybrid->generate()
    #5 system/modules/core/library/Contao/Controller.php(484): Contao\Form->generate()
    #6 system/modules/core/modules/ModuleArticle.php(213): Contao\Controller::getContentElement(Object(Contao\ContentModel), 'main')
    #7 system/modules/core/modules/Module.php(287): Contao\ModuleArticle->compile()
    #8 system/modules/core/modules/ModuleArticle.php(67): Contao\Module->generate()
    #9 system/modules/core/library/Contao/Controller.php(417): Contao\ModuleArticle->generate(false)
    #10 system/modules/core/library/Contao/Controller.php(277): Contao\Controller::getArticle(Object(Contao\ArticleModel), false, false, 'main')
    #11 system/modules/core/pages/PageRegular.php(133): Contao\Controller::getFrontendModule('0', 'main')
    #12 system/modules/core/controllers/FrontendIndex.php(285): Contao\PageRegular->generate(Object(Contao\PageModel), true)
    #13 index.php(20): Contao\FrontendIndex->run()
    #14 {main}
    So erstelle ich die einzelnen Optionen:

    PHP-Code:
    $options[] = array(
                        
    'type'        => 'option',
                        
    'value'        => 'Gastraumticket',
                        
    'label'        => 'Gastraumticket'.$result->priceFull,
                    ); 
    von diesen Array erstelle ich einfach eines pro Select-Option. Funktioniert Wunderbar.
    Die Gruppierung hatte ich dann so probiert:

    PHP-Code:
                    $options[] = array(
                        
    'group' => $groupCount,
                        
    'type'  => 'group_start',
                        
    'label' => specialchars(date('d.m.Y',$result->startDate).' - '.$result->title),
                    );
                    
                    
    $options[] = array(
                        
    'type'        => 'option',
                        
    'value'        => 'Gastraumticket',
                        
    'label'        => 'Gastraumticket'.$result->priceFull,
                    ); 
    Das wird im Frontend auch wunderschön umgesetzt.
    Aber nach Absenden erscheint diese Fehlermeldung, und ich kann das gerade nicht wirklich nachvollziehen...
    Das Formular wird immernoch abgeschickt und verarbeitet. Ich erhalte die Werte per Mail. Nur die Anzeige der Weiterleitungsseite scheint Probleme zu machen.
    Ich gebe auf der Seite aber nichts außer einem generischen "Vielen Dank" aus...
    Geändert von Exzentrik (01.04.2017 um 16:57 Uhr)

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.261
    Partner-ID
    10107

    Standard

    Evt. fehlt dir noch ein
    PHP-Code:
    $options[] = array(
        
    'type' => 'group_end'
    ); 
    ?

  8. #8
    Contao-Nutzer Avatar von Exzentrik
    Registriert seit
    23.05.2012.
    Beiträge
    39

    Standard

    Das hatte ich ursprünglich tatsächlich drin, da es so auch in der system/modules/core/forms/FormSelectMenu.php steht.
    Allerdings ergibt das im Frontend ganz komische Ergebnisse.

    Das group_end wird dann als Options-Feld ohne Label oder Value ausgegeben.
    Das sollte im Frondend entstehen:

    -Gruppentitel 1
    -> Option 1_1
    -> Option 1_2
    - Gruppe 1 Ende

    - Gruppentitel 2
    -> Option 2_1
    -> Option 2_2
    - Gruppe 2 Ende

    u.s.w.


    Was er aber macht ist:

    - Gruppentitel 1
    -> Option 1_1
    -> Option 1_2
    -> Option ohne Label oder Value
    -> Option 2_1
    -> Option 2_2
    -> Option ohne Label oder Value
    - Gruppe 1 Ende


    *EDIT*
    Ich habe es jetzt mal versucht, ob man dem group_end womöglich auch die Gruppennummer zuweisen muss.
    Das sieht im Frontend dann schon ein wenig besser aus (Aber immernoch nicht korrekt, weil er anstelle der leeren Option-Felder einfach eine leere Gruppe bildet) und es wird immernoch die Fehlermeldung anstelle der Weiterleitungsseite angezeigt...

    *EDIT2*
    Ich habe gerade nochmal einen Blick in die o.g. FormSelectMenu.php geworfen.
    Und das sieht für mich so aus, als würde er das group_end automatisch anhängen, wenn eine neue Gruppe gestartet wird.
    Daher würde es schon Sinn machen, wenn ich das nicht selber deklarieren sollte. Im Formulargenerator deklariere ich ja auch nur Gruppen und Felder, aber keine Gruppenenden.
    Geändert von Exzentrik (01.04.2017 um 19:15 Uhr)

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.261
    Partner-ID
    10107

    Standard

    Ja stimmt. Mehr Ideen habe ich momentan auch nicht

  10. #10
    Contao-Nutzer Avatar von Exzentrik
    Registriert seit
    23.05.2012.
    Beiträge
    39

    Standard

    Alles klar. Wie befürchtet, habe ich mich einfach hochgradig doof angestellt.
    Der Aufbau der Gruppen-Start-Option war falsch.
    Hier ist der richtige Aufbau:

    PHP-Code:
    $options[] = array(
                        
    'group'     => $groupCount,
                        
    'type'        => 'option',
                        
    'value'        => '',
                        
    'selected'     => '',
                        
    'label'        => $result->title,
                    ); 

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
  •