Ergebnis 1 bis 12 von 12

Thema: EFG mit MM vorbefüllen und im speziellen Attribut tabletext + EFG - wie gehts?

  1. #1
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Frage EFG mit MM vorbefüllen und im speziellen Attribut tabletext + EFG - wie gehts?

    Hi,

    ich möchte ein Formular (EFG) mit den Daten eines MMs füllen. Da stellen sich mir ein paar Fragen. Ich hoffe mir kann jemand helfen. Situation: Ein MetaModel hat Attribute wie Titel (text) und Termine (tabletext). Ein Formular soll eine E-Mail mit einer getroffenen Auswahl versenden z.B. Titel: Anfängerkurs, Termin: jeden Sonntag um 14 Uhr. Was ich bisher gemacht habe: MM angelegt. Formular angelegt. Beides wird auf einer Seite in einem Artikel untereinander angezeigt. Wie verbinde ich die aber nun?

    1a) Das Formular holt sich per Select-Menu (DB) alle Titel aller Kurse. Ok. Aber wie teile ich dem Formular mit, dass es den Titel des angezeigten Kurses auch im Select-Menu (vor)auswählt? Gut, ich könnte per Javascript mir "von oben" den Titel holen und das Select manipulieren. Ist aber unschön.

    1b) Eigentlich würde ich gerne anstatt ein Select-Menu (DB) ein Textfeld oder besser ein verstecktes vorausgefülltes Feld verwenden, aber wie kommt vom MM der Titel ins Formular?

    2) Wie bringe ich nun die Inhalte des tabletext Attributs in das Formular? Es ist ja nicht praktikabel alle Termine aller (!) Kurse in ein Select-Menu (DB) zu hauen, zudem verwendet tabletext mehrere Datenbanktabellen, um die Daten mit MMs zu verknüpfen. Ein checkbox/radio/select Menu mit den in diesem MM verfügbare tabeltext Werten wäre ja super. Nur wie gehts?

    Fragende Grüße

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

    Standard

    1a) Im EFG kann man da nichts einstellen.

    1b) Du kannst im Formular ein "verstecktes Feld" anlegen und dort den Insertag als Wert verwenden.
    Eventuell -> {{page::title}} wenn sich das Formular auf der Seite mit dem Kurs befindent.
    Wenn das Formular einzeln auf einer eigenen Seite ist und je nach dem welcher Kurs vorher gewählt war.
    Könntest du das mit Session lösen und in die Session z.b. den Kurstitel weitergeben und beim Formular
    dann die Session wieder auslesen und ganz wichtig am Schluss des Formulares die Session destroy also
    zerstören (löschen).

    PHP-Code:
    $session Session::getInstance();
    $session->set('foo''bar');
    echo 
    $session::->('foo'); 
    lg Matthias
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  3. #3
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Hi,

    Session klingt gut ... ich experimentiere gerade mit Javascript und "data" HTML Attributen in den Ausgaben der einzelnen MM Attribute. Die kann ich dann per JQuery z.B. in das Formular injektieren und tausche so z.B. alle options eines Selects mit den Werten aus einem MM Tabletext aus. Genauso denke ich, kann man Select-Options auswählen.

    Mit Session wäre es wohl besser, wenn man sich nicht auf Javascript verlassen will. Aber heutzutage hat glaube ich niemand mehr JS deaktiviert ...

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

    Standard

    Hallo.

    Ich bin auf der Ansicht, wer JS deaktiviert hat, hat im Leben schon verloren :P
    Aber mit Session wird das über PHP geregelt, dann hast du das JS Problem nicht.
    Eventuell könntest du es mit $_POST $_GET machen. Und den Wert über die URL
    weitergeben und dann im Forum wieder auslesen lassen.

    Hier noch zu Session in Contao:
    http://api.contao.org/classes/Contao.Session.html

    Liebe Grüße
    Matthias
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  5. #5
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Okay, endlich mal geschafft, das umzusetzten ... allerdings mit JS aus dem MM Eintrag "kopiert". Nur habe ich jetzt ein Problem, dass Contao die "neuen" Select-Box Formulardaten nicht mag ... bei einfachen Feldern, mag der Weg oben ja gehen, aber bei Selects wohl nicht (so einfach) ... doof ...

    https://community.contao.org/de/show...Cltige-Eingabe

  6. #6
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Also, falls jemanden diese Aufgabenstellung auch mal beschäftigt. Ich habe es nun so gemacht (irgendwie aufwändig und mit Abhängigkeiten, funktioniert aber bis jetzt zuverlässig)

    1a) Das Formular holt sich per Select-Menu (DB) alle Titel aller Kurse. Ok. Aber wie teile ich dem Formular mit, dass es den Titel des angezeigten Kurses auch im Select-Menu (vor)auswählt? Gut, ich könnte per Javascript mir "von oben" den Titel holen und das Select manipulieren. Ist aber unschön.
    Javscript geht, um eine Option aus einem Select auszuwählen. Einfacher wird es, wenn ich im Formulargenerator nur ein Text- oder Hidden-Input verwende und diesen per JS vorbelege.

    1b) Eigentlich würde ich gerne anstatt ein Select-Menu (DB) ein Textfeld oder besser ein verstecktes vorausgefülltes Feld verwenden, aber wie kommt vom MM der Titel ins Formular?
    Wohl die bessere Lösung ohne JS: Session. Dazu setze ich in die Contao Session (siehe Matthias) in einem modifizierten "mm_attr_select.html5" template (in meinem Projekt wird für jedes MM Item ein Formular per Alias ausgewählt) die Werte, die ich dann in dem Formulargenerator per inputvars Erweiterung beziehe.

    PHP-Code:
    // mm_attr_select.html5
    $session Session::getInstance();
    $session->set('cl_mm_item_id'$this->row['id']);
    $session->set('cl_mm_item_title'$this->row['title']);
    // ...
    echo "{{insert_form::$form_id}}";
    session_destroy(); 
    Dann beim Formulargenerator ein Verstecktes oder Text-Feld mit Standardwert:
    2014-08-02_15_16_00_-_Formulargenerator_A_Das_Feld_ID_6_bearbeiten_-_Contao_Open_Source_CMS_3_3.png
    Code:
    {{session::cl_mm_item_title::specialchars}}
    2) Wie bringe ich nun die Inhalte des tabletext Attributs in das Formular? Es ist ja nicht praktikabel alle Termine aller (!) Kurse in ein Select-Menu (DB) zu hauen, zudem verwendet tabletext mehrere Datenbanktabellen, um die Daten mit MMs zu verknüpfen. Ein checkbox/radio/select Menu mit den in diesem MM verfügbare tabeltext Werten wäre ja super. Nur wie gehts?
    So jetzt wird es etwas trickreich. Man benötigt die inputvars und efg Erweiterung. Anstatt eines Select-Form Elementes, nimmt man Select-Menu (DB). Einstellung siehe Bild und als Bedingung folgendes, wobei man tl_metamodel_attribute.colname für das eigene Projekt natürlich anpassen muss. So wird alles aus der DB gezogen.
    2014-08-02_15_07_22_-_Formulargenerator_Anmeldung-Single_Das_Feld_ID_7_bearbeiten_-_Contao_Open_.png
    Code:
    item_id = '{{session::cl_mm_item_id}}' AND att_id = (SELECT id  FROM tl_metamodel_attribute where  tl_metamodel_attribute.colname='timetable')

  7. #7
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Jetzt habe ich doch noch ne Frage ... wie zerstöre ich die Session korrekt?

    ... denn ich glaube einfach session_destroy() aufzurufen ist kontraproduktiv, da ich so meine komplette Contao Session zerhaue ...

    ... ist unset($session) der richtige Weg?
    Geändert von Cyberlussi (02.08.2014 um 15:05 Uhr) Grund: Vermutung hinzugefügt

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Du willst ja sicher nicht die ganze Session killen, sondern nur Deine MM-Formular-Sondersachen...

    ... somit sollen nur die Session-Werte gelöscht bzw. die Variablen gekillt werden.

    Um die Sache abzukürzen, könntest Du Deine Werte nicht direkt in das Session-Array schreiben sondern vorher ein eigenes Array aufspannen

    z.B. $_SESSION['mm_form'] = array(); und dann brauchst Du nur den einen Wert löschen

    Edit: ob die Standardmethoden ::get() ::set() mit einem Array funktionieren, kann ich nicht sagen

  9. #9
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Ja,

    destroy ist sicherlich nicht korrekt. ich habe es mal mit
    PHP-Code:
    $session->remove('cl_mm_item_id'); 
    versucht, das sieht ja erstmal im Template logisch aus. Das Formular bzw. der Datentransport funktioniert dann leider nicht mehr. Ich denke, das liegt daran, dass die Inserttags nicht sofort geparst werden, sondern später - und dann ist die Session-Variable schon gelöscht. Messa hat ja auch korrekt gesagt "wichtig am Schluss des Formulares die Session destroy also zerstören (löschen)." - "des Formulars" (!) nicht im Template!

    Die perfekte Lösung habe ich noch nicht gefunden, bis jetzt funktioniert meine Lösung mal - auch ohne Session-Wert löschen.

  10. #10
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    HTML

    okay .. nach etwas suchen, kam ich doch noch auf die Variante, die hoffentlich jetzt mal die beste dafür ist (vorallem, wenn man mehrere "gleiche" Formulare auf einer Seite hat)

    PHP-Code:
    // mm_attr_select.html5
    $session Session::getInstance();
    $session->set('cl_mm_item_id'$this->row['id']);
    // ...
    echo $this->getForm($form_id);
    $session->remove('cl_mm_item_id'); 
    ... das klappt ohne inserttags, erzeugt gleich das Formular und dann kann ich die Session bereinigen. Alles direkt im Template.

    Siehe auch https://github.com/contao/core/issues/3013 und http://api.contao.org/classes/Contao...method_getForm

  11. #11

  12. #12
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Danke, das kannte ich noch nicht. Das könnte hilfreich sein. Habe es aber per loadFormField Hook eigentlich sehr gut in einer kleinen eigenen Erweiterung erledigt.

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
  •