Hallo,
ich bin dabei, ein eigenes Modul zu entwickeln und möchte/muss für bestimmte Anforderungen auf Callbacks/Hooks zurückgreifen.
Dabei tue ich mich zugegebener Maßen etwas schwer bei der konkreten Umsetzung. Das liegt an verschiedenen unklaren Punkten, dir ich auch nach Lektüre des Typolight-Handbuchs und durchstöbern des Forum nicht ganz beseitigen konnte.
Viele Beschreibungen zu diesem Thema finde ich nicht umfassend/detailliert genug bzw. zu sehr auf einen Teilaspekt beschränkt, so dass mir eine konkrete, funktionierende Umsetzung noch nicht gelungen ist.
Ich würde hier gerne eine Beschreibung zu diesem Thema zusammentragen (und später auch die Ergebnisse im Contao-Wiki eintragen), um Laien wie mir den Umgang mit Callbacks und Hooks näherzubringen.
Ich hoffe auf viele klärende Beiträge zu diesem Thema.
Gruß Carsten
Zielsetzung:
------------
Änderungen von "relevanten" persönlichen Daten (tl_member) sollen im Backend (Mitglieder) als auch im Frontend-Modul "Persönliche Daten" erkannt, entsprechende Kennzeichnungen sowie das Änderungsdatum in neuen Datenbankfeldern (tl_member) gespeichert werden.
Als "relevante" Felder werden die Kontaktdaten (z.B. Email-Adresse, Handy-Nummer, usw.) angesehen. Solche Daten bzw. Änderungen selbiger sind in unserem Verein wichtig für Alarmierungen. Aufgrund der Kennzeichnungen und Änderungsdatum soll automatisch eine jederzeit verfügbare "Änderungsliste Kontaktdaten" bereitgestellt werden.
Alle Änderungen sollen updatesicher umgesetzt werden.
Lösungsansatz:
---------------
Beim Laden der Mitglieder-Daten (tl_member) im Backend oder Frontend werden die Inhalte der relevanten Felder in der Session gespeichert.
Beim Speichern (Speichern-Button) der Mitgliederdaten werden die in der Session gespeicherten Werte mit den entsprechenden Feldern im Formular bzw. in tl_member verglichen.
Bei Änderungen wird ein Änderungsdatum und entsprechende Kennzeichnungen in zwei neuen Feldern gespeichert.
Beim Laden der Mitglieder-Daten soll eine callback-/Hook-Funktion für die Speicherung der bisherigen, relevanten Feldinhalte in der Session sorgen.
Ebenso soll eine callback-/Hook-Funktion beim Speichern einen Vergleich der in der Session gespeicherten Werte mit den Entsprechungen im Formular/tl_member durchführen und bei Änderungen Kennzeichen und Änderungsdatum speichern.
Was bisher geschah:
-------------------
Ich habe in der Tabelle tl_member zwei neue Felder angelegt:
- aenderung , Textfeld, Länge 40: In diesem Feld sollen Kennzeichen hinterlegt werden, welche der relevanten geändert wurden.
- aenddat, Textfeld, Länge 11: Änderungsdatum, nur für relevante Felder
- diverse Versuche Callback-/Hook-Funktionen in meinem eigenen Modul einzubauen
- Versuch, eine callback-Funktion in ../system/modules/meinModul/dca/tl_member.php zu registrieren
Fragen, die sich ergeben haben:
-------------------------------
- Callback-/Hook-Funktionen:
Ich versuche diese Begriffe nach meinem bisherigen Verständnis zu erläutern und bitte ggf. um Korrekturen:
Im Contao werden bei vielen Aktionen/Funktionen Ereignisse ausgelöst. Jedem dieser Ereignisse können eigene Funktionen zugeordnet werden, die bei Eintritt des Ereignisses eigene, individuelle Aktionen ausführen können.
Wird ein Ereignis im Contao-Backend ausgelöst, bezeichnet man die "Ereignis-Funktion" als Callback-Funktion, im Frontend werden die "Ereignis-Funktionen" als Hook-Funktion bezeichnet.
Im Grunde liegt in beiden Fällen die gleiche Systematik dahinter. Die Kinder sollten aber unbedingt unterschiedliche Namen haben.
- Welche Callback-/Hook-Funktionen sind für die Problemstellung geeignet?
Das Modul "tl_member.php" wird nach Infos aus dem Forum sowohl für Backend als auch für Frontend verwendet.
Welche Callback-/Hook-Funktionen sind hier also konkret einzusetzen? Einige "Ereignis"-Funktionen sollen scheinbar sowohl für Backend als auch Frontend verwendbar sein, andere wiederum nur für Backend oder nur für Frontend.
Ich würde gerne "Ereignis"-Funktionen einsetzen, die sowohl im Backend als auch im Frontend gleichermassen funktionieren (falls es solche gibt). Bisher sind folgende "Ereignis-Funktionen" in die engere Auswahl gekommen:
- onload_callback
- onsubmit_callback
- load_callback
- save_callback
- processFormData-Hook (Das Modul 'tl_member' löst scheinbar diesen Hook nicht aus.)
- Gibt es gleichnamige Callback-Funktionen für Tabellen/Data-Container und Tabellenfelder?
An manchen Stellen wurde vom "save_callback" gesprochen. Dabei im Zusammenhang einzelner Tabellenfelder als auch im Zusammenhang mit einer ganzen Tabelle/Data-Container.
Wie ist da zu unterscheiden? Wie lauten dann die callback-Registrierungen für DataContainer bzw. ein einzelnes Feld?
- Wie und wo genau muss eine Callback- bzw. Hook-Funktion für "Mitglieder" (BE) bzw. das Modul "Personal Data" (FE) registriert werden?
Ich habe ein eigenes Modulverzeichnis ../system/modules/meinModul erstellt. Es finden sich dort die Unterverzeichnisse "config", "dca", "languages".
In welchem Verzeichnis und Datei muss die Registrierung der Callback- bzw. Hook-Funktionen erfolgen?
Lesezeichen