Ergebnis 1 bis 4 von 4

Thema: Änderung von Persönlichen Daten registrieren --> "Änderungsliste Kontaktdaten"

  1. #1
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard Änderung von Persönlichen Daten registrieren --> "Änderungsliste Kontaktdaten"

    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?
    Geändert von althoffc (20.06.2012 um 14:54 Uhr)
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Zu aufwendig!
    Nutze den onload_callback für die tl_member

    $GLOBALS['TL_DCA']['tl_member']['config']['onload_callback'] = array();

    Dort wird alles nötige übergeben, auch im FE.
    Dann einfach für den aktuellen User in Persönliche Daten die Änderungen registrieren mit Hilfe der Timestamps und ggf. in der DB speichern. So wie du es bereits machen wolltest.
    Sessions etc. werdrn dafür nicht benötigt.

    Grüße,
    Tim


    Sent from my iphone using Tapatalk
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Contao-Nutzer Avatar von althoffc
    Registriert seit
    24.06.2009.
    Beiträge
    125

    Standard

    Hallo Tim,

    danke für Deine Antwort.

    Ich blicke aber leider noch nicht ganz durch.

    • In welchem Verzeichnis/Datei ist der Eintrag
      $GLOBALS['TL_DCA']['tl_member']['config']['onload_callback'] = array();
      vorzunehmen?
      In dem Array gebe ich dann ja meine eigene Klasse und Methode an.

    • Stehen mir beim onload-callback tatsächlich die bisherigen und die ggf. geänderten Felder aus tl_member/Formular zur Verfügung? Welche Daten/Objekte habe ich dann konkret im Zugriff?

    • In meiner callback-Funktion (onload_callback) kann ich relevante Änderungen feststellen und entsprechende Kennzeichnungen bzw. Änderungsdatum in die beiden (neuen) tl_member-Felder speichern.
      Wenn dann aber die Bearbeitung der "Personal Data" ohne Speichern vorzeitig abgebrochen wird, habe ich bereits meine Kennzeichen und Änderungsdatum gespeichert, obwohl dann die eigentlichen Änderungen (z.B. Email-Adresse, Handy-Nummer) verworfen wurden.

      Aus diesem Grund hatte ich das Vorgehen zweigeteilt: Bisherige Daten in Session (oder sonst wo?) merken, und erst beim tatsächlichen Speichern der User-Daten einen Vergleich "alt - neu" durchführen und ggf. die Kennzeichnungen und Änderungsdatum zusätzlich speichern.

      Oder habe ich hier einen grundsätzlichen Denkfehler?


    Gruß
    Carsten
    Albert Einstein: Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.

  4. #4
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    onload nur zum Bereitstellen des Ist-Zustands mit den aktuellen User daten.

    onsubmit für das Prüfen und in die DB speichern.


    Sent from my iphone using Tapatalk
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

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
  •