Ergebnis 1 bis 35 von 35

Thema: Contao Hooks verwenden?

  1. #1
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard Contao Hooks verwenden?

    Hallo,

    ich habe das vor längerer Zeit zwar schonmal gemacht, aber ich finde gerade nicht den Anfang ... wie gehe ich denn richtig vor, wenn
    ich einen Hook verwenden möchte? Damals fand ich ein ganz nettes Tutorial dazu, aber das ist nicht mehr auffindbar ...

    gibt es da etwas zum nachlesen?


    Danke

    Mark

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi Mark,

    vielleicht hilft dir diese Seite wieder etwas auf die Sprünge: https://contao.org/de/manual/3.0/cus...l#contao-hooks

    Generell, Hooks registrierst du in der config.php, beschreibst dort, wann deine Methode ausgeführt werden soll. Die Logik packst du dann in eine eigene Klasse / Methode die dann ausgeführt wird. Ist aber in den Beispielen gut zu erkennen. Ansonsten schau dir einfach ein paar Erweiterungen an die Hooks benutzen. Z.B. Avisota da gibts in der config nen eigenen Bereich mit Hooks, einfach und verständlich nachzuvollziehen.

    Hoffe das hilft dir etwas.

    Gruß
    Michael
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Ja, die Seite hatte ich gesehen - ich suche allerdings etwas, wo auch steht:

    welche Verzeichnisstruktur muss ich evtl. anlegen, mit welchen Dateien, wie müssen die benannt werden und warum ....
    Ich hatte das halt schonmal irgendwo gelesen ... finde es aber nicht mehr ...


    Mark

  4. #4
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.512
    User beschenken
    Wunschliste

    Standard

    Im Prinzip legst du ein neues Modul an, darin 2 Datein, config und die Klasse mit der Logik.
    Beispiel:
    /system/modules/myCustomModule/config/config.php:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['createNewUser'][] = array('myCustomModuleClass''myCustomClassMethod'); // Klassenname - Methodenname 
    /system/modules/myCustomModule/myCustomModuleClass.php:
    PHP-Code:
    class myCustomModuleClass // Klassenname = Dateiname (ohne .php)
    {
       public function 
    __construct() {} // eventuell nicht nötig, probieren
       
       
    public function myCustomClassMethod($intId$arrData// Methodenname so wie in config angegeben, Parameterdefinitionen aus dem Entwicklerhandbuch entnehmen
       
    {   
          
    print_r($intId);     // Print the ID of the new User
          
    print_r($arrData); // Print out the user's data, which should include the fields you need.
       
    }   

    Ansonsten, immer gute Sache, schaue im Core ob dort der Hook irgendwo schon mal genutzt wird.
    Je nach Hook ist es nötig (bzw. vereinfacht das ganze), dass die Klasse von Frontend, Backend, Module, System o.ä. erbt.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  5. #5
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Vielleicht hilft dir mein Foliensatz der letztjährigen Konferenz weiter: https://contao.org/files/conference/...ed_english.pdf
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  6. #6
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Auch zum Thema Erstentwicklung mit Hooks

    Ich habe schon den ganzen Tag alle möglichen Beiträge zum Thema Hooks gelesen,
    Eurer Beitrag hat mich schon näher gebracht. Allerdings bekomme ich es nicht hin, trotz Beschreibung den "processFormData" hook zu handeln.
    Ich benötige für ein Formular (alles Radiobuttons) eine Berechnung der ausgefüllten Werte, deswegen habe ich mit dem Formulargenerator ein Formular mit Radiobuttons erstellt und wollte nun eine Funktion zur Manipulation der Werte schreiben:

    Ich habe ein Modul angelegt modules/myModule

    darin /config/config.php:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('myCustomModuleClass', 'myCustomClassMethod');

    myModule/myCustomModuleClass.php:
    class myCustomModuleClass // Make sure this class name matches the first item in the above line of code
    {
    public function __construct() {}

    public function myCustomClassMethod($arrPost, $arrForm, $arrFiles)
    {
    echo "Hello Welt; //um erstmal zu sehen ob überhaupt was passiert
    print_r($arrPost);
    exit;
    }
    }

    autoload.php:
    ClassLoader::addClasses(array
    (
    'Contao\myCustomModuleClass' => 'system/modules/myModule/myCustomModuleClass.php',
    ));

    Wahrscheinlich habe ich eine grundsätzlichen Denkfehler, ich fange gerade erst mit der Contao Entwicklung an. Wäre sehr dankbar für eure Hilfe !!
    LG Jens

  7. #7
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Sieht alles richtig aus.

    Das einzige was mir auffällt in der myModule/myCustomModuleClass.php:
    Hast du am Anfang folgendes eingefügt?
    PHP-Code:
    /**
     * Run in a custom namespace, so the class can be replaced
     */
    namespace Contao
    Sendest du dein Formular mit POST oder GET ab?

    -> Der Hook geht nur wenn das Formular mit POST abgesendet wird.
    Mein Blog -> brothers-project.de

  8. #8
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Hallo Zero

    Vielen Dank für Deine Antwort.

    Hatte deinen Thread mit dem Post / Get Problem auch schon gelesen, läuft alles auf POST. Geht trotzdem nicht.
    Namespace wie laut deinen Angaben:


    /**
    * Run in a custom namespace, so the class can be replaced
    */
    namespace Contao;


    class myCustomModuleClass // Make sure this class name matches the first item in the above line of code
    {
    public function __construct() {}

    public function myCustomClassMethod($arrPost, $arrForm, $arrFiles)
    {
    echo ($arrPost);
    print_r($arrPost);
    exit;
    }
    }

    Muss unter Contao3 vielleicht die myCustomModuleClass.php in ein Verzeichniss mymodule\classes ? Ist momentan unter myModule\myCustomModuleClass.php ...
    Bin echt am verzweifeln... fehlt irgendwas Vorbereitendes oder Grundsätzliches was ich bei Contao noch beachten muß ?

    Danke Jens.

  9. #9
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Hallo Zero,

    es hat zu guter Letzt doch noch geklappt !! ich habe eigentlich für etwas anderes (EFG) den Internen Cache aufgebaut im Contao 3.1, dann
    ging es plötzlich !

    Vielen Dank an Alle !

    Mickey.

  10. #10
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Am besten ist es wenn du bei Entwicklungsarbeiten den internen Cache umgehst.
    Siehe Einstellungen:
    Internen Cache umgehen - Die internen Cache-Dateien ignorieren (z.B. nützlich bei der Extension-Entwicklung).
    Mein Blog -> brothers-project.de

  11. #11
    Contao-Nutzer Avatar von mickey77
    Registriert seit
    22.12.2011.
    Ort
    Erfurt
    Beiträge
    67
    Partner-ID
    7473

    Standard Interner Cache

    Hallo Zero,

    danke für den Tipp. Ich verstehe ihn nur nicht ganz: Es hat ja erst geklappt, als ich den internen Cache aufgebaut habe. Oder war das Zufall ?

    LG Jens

  12. #12
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von mickey77 Beitrag anzeigen
    Hallo Zero,

    danke für den Tipp. Ich verstehe ihn nur nicht ganz: Es hat ja erst geklappt, als ich den internen Cache aufgebaut habe. Oder war das Zufall ?

    LG Jens
    Nein das ist kein Zufall .
    Der interne Cache setzt sich aus allen config und DCA Dateien zusammen.
    Wenn du also in einer Config Datei etwas änderst und den Cache nicht neu aufbaust, wird deine Änderung nie angewendet.

    Deshalb ist es empfohlen bei der Modulentwicklung die von mir beschriebene Systemeinstellung zu aktivieren. Dann erstellt Contao keinen Cache und lädt die aktuellen Dateien, welche du editierst. -> Das sollte man allerding bei der online Version wieder deaktivieren, da der Cacheaufbau eine Menge zeit in Anspruch nimmt.
    Mein Blog -> brothers-project.de

  13. #13
    Contao-Nutzer
    Registriert seit
    01.10.2012.
    Ort
    München
    Beiträge
    4

    Standard

    Hallo Zusammen,

    vielen Dank für den interessanten Beitrag. Ich hoffe, dass er noch ein bisschen aktuell ist bzw. noch von Jemandem gelesen wird :-)

    Zu meinem Problem/Frage: Ich arbeite mich gerade in das Thema Contao Modulentwicklung ein und entwickle deshalb ein kleines Modul um die Abläufe besser verstehen zu können und einfach: learning by doing.

    Frage 1:
    Wenn ein Frontend Benutzer Daten aus meinen Modul manipulieren soll - z.B. über ein Formular im Frontend - sind dann die TL_HOOKS die richtige Wahl oder was gibt es noch für andere Techniken eine PHP Methode aus dem Frontend aufzurufen?

    Frage 2:
    Woher weiß Contao, dass mein Frontend Formular aus meinem Template genau zu dem TL_HOOK gehört, welches ich in der config angelegt habe. Muss ich da in meiner <form> eine spezielle ID angeben oder wie funktioniert das?

    Auf jeden Fall schonmal vielen Dank!!!

    Gruß Philipp

  14. #14
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Hi Phillipp,

    Zitat Zitat von botze Beitrag anzeigen
    Frage 1:
    Wenn ein Frontend Benutzer Daten aus meinen Modul manipulieren soll - z.B. über ein Formular im Frontend - sind dann die TL_HOOKS die richtige Wahl oder was gibt es noch für andere Techniken eine PHP Methode aus dem Frontend aufzurufen?
    Hooks sind im Prinzip Events und wenn man sich das vor Augen führt, weiss man eigentlich auch schon, wann man sie verwenden sollte Ein Event ist etwas das zu einem bestimmten Zeitpunkt irgendwo im Programmablauf ausgeführt wird. Events können es erlauben, das Verhalten zu beeinflussen, müssen aber nicht.
    Nehmen wir z.B. einen Event, der nach Abschluss einer Bestellung ausgeführt wird. Er erlaubt dir keine Änderung am Verhalten des Programmflusses, aber er ermöglicht dir, weitere Funktionen zu diesem Zeitpunkt auszuführen (bspw. UPS informieren). Ein anderer Event, z.B. einer der die Validierung eines Formularfelds erlaubt, ermöglicht dir, das Programmverhalten zu ändern, indem du beispielsweise sagst, dass die Eingabe "xy" falsch ist.

    Es gibt also nicht pauschal eine Antwort darauf, ob Hooks die richtige Wahl sind. In Contao kannst du sie sehr oft dazu nutzen, bestehendes Verhalten zu ändern. Du kannst aber auch einfach dein eigenes Frontend-Modul oder Inhaltselement programmieren und einbinden.

    Zitat Zitat von botze Beitrag anzeigen
    Frage 2:
    Woher weiß Contao, dass mein Frontend Formular aus meinem Template genau zu dem TL_HOOK gehört, welches ich in der config angelegt habe. Muss ich da in meiner <form> eine spezielle ID angeben oder wie funktioniert das?
    Ich nehme an du sprichst von Formulargenerator und dem "processFormData"-Hook. Das wäre nun also ein Beispiel wie du bestehende Funktionalität nutzt und veränderst Du könntest aber genauso ein Inhaltselement programmieren, einbinden und da ein Formular ausgeben, ohne bereits vorhandene Funktionalität zu nutzen etc.
    In diesem spezifischen Hook kriegst du als Parameter die Formulargenerator-Daten. Also unter anderem auch die ID. Du könntest jetzt hergehen und weitere Einstellungen im Backend zur Verfügung stellen, so dass z.B. dein Benutzer eine Checkbox im Formular anhaken kann und nur dann reagierst du in deinem Hook darauf
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  15. #15
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard E-Mail Benachrichtigung bei Absenden des Formulars Kundendaten

    Hallo allerseits,
    ich lese mich schon eine ganze Weile durch diverse Beiträge zum Thema Hooks, komme aber nicht so richtig weiter. Und dies scheint mir der richtige Platz für meine Frage zu sein.

    Zur Problematik:
    Ich habe in einem geschützten Mitgliederbereich eine Seite mit den Kundendaten, die zum Teil durch den Kunden aktualisiert werden können (Mail Adresse, Geburtsdatum). Die Kundendaten selbst werden aber über eine Schnittstelle aus einer externen Datenquelle befüllt bzw. aktualisiert. Um nun Änderungen, die vom Kunden selbst vorgenommen werden, in die Quelldatenbank einpflegen zu können, damit diese bei der nächsten Synchronisation nicht wieder mit den alten (falschen) Daten überschrieben werden, wäre es hilfreich, nach der Änderung durch den Kunden, eine E-Mail zu verschicken, in der die aktuellen Werte stehen und der Betreiber somit informiert wird und die Quelldaten entsprechend aktualisieren kann.

    Das ich dazu den "processFormData-Hook" benötige ist soweit klar, nur wie muss ich nun vorgehen, um die Anpassungen einzubinden? Kann ich dazu das Benachrichtigungscenter verwenden (ist dies sinnvoll)? Wenn ja, wie funktioniert das?
    Da ich selbst kein PHP-Experte bin, aber Jemanden kenne, der dies umsetzt, der aber mit der Contao-Entwicklung nicht vertraut ist, bräuchte ich eine kurze Anleitung, um ihm dies zu vermitteln.

    Für sachdienliche Hinweise wäre ich sehr dankbar.

    Gruß Thomas

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

    Standard

    Verwendest du zur Kundenverwaltung die interne Mitgliederverwaltung?
    Werden die externen Daten in einer Tabelle gespeichert, in der Sich auch
    die Contao Sachen befinden? Z.b.: tl_externe_memberdaten

    Wie wird das ganze sync.?

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

  17. #17
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Hallo Messa,
    ja, es wird die interne Mitgliederverwaltung verwendet, die ich zwar mittels xt_memberfields etwas "aufgebohrt" (um zusätzlich benötigte Felder erweitert) habe, aber die Funktionalität bleibt die gleiche.
    Die externen Daten stammen aus einer Access-DB, die dort als csv exportiert und mittels eines kleinen Tools, direkt in die tl_member Tabelle geschrieben werden. Dabei werden alle Werte, ausser dem Passwort, mit den externen Daten überschrieben. Nun gibt es aber in der Ausgangsdatenquelle Datensätze, die z.B. keine E-Mail Adresse haben und kein Geburtsdatum hinterlegt ist, da die Daten bisher nur offline gepflegt wurden. Über das Kundendatenformular sollen die Kunden nun die Möglichkeit bekommen, ihre Daten selbst zu aktualisieren und dazu ist es erforderlich dem Seitenbetreiber über Aktualisierungen seitens der Kunden zu informieren, um die Daten in der Access-DB vor dem nächsten Update anzupassen.

    Ich hoffe das ist soweit nachvollziehbar.

    Gruß Thomas

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

    Standard

    Es gibt einen Hook der beim senden des Formulares verwendet werden kann.

    // config.php
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('MyClass''myProcessFormData'); 
    // MyClass.php
    PHP-Code:
    public function myProcessFormData($arrPost$arrForm$arrFiles)
    {
        
    // Beliebiger Code
            
    if($arrForm['id'] == NUMMER//Formular
            

            
            }


    Du brauchst dann noch die richtige ID Des Formulares.
    Darum würde ich am Anfang nur mal
    PHP-Code:
    print_r($arrForm['id']) 
    ausgegeben lassen und danach dann die ID eintragen.
    Sonst wird der HOOK bei jedem mal verwendent.

    Danach würde ich alle Daten aus geben und die dann via PHP weitersenden.

    lg Matthias
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  19. #19
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Nimm am besten den HOOK

    PHP-Code:
    $GLOBALS['TL_HOOKS']['updatePersonalData'][] 
    Dann ersparst du dir mit irgendwelchen IDs zu arbeiten. Dieser Hook wird ausgeführt, sobald jemand seine Profildaten updatet. Ist doch viel passender in diesem Fall.

    Übergebene Parameter sind $objMember, $arrSession, $objModule
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

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

    Standard

    Danke der ist mir neu.
    Auch im Handbuch konnte ich den nicht finden - > https://contao.org/de/manual/3.2/cus...l#contao-hooks
    Naja Gut zu wissen.

    Hier noch eine Doku zu dem Hook.
    https://github.com/contao/docs/blob/...ersonalData.md

    PHP-Code:
    <?php
    // config.php
    $GLOBALS['TL_HOOKS']['updatePersonalData'][] = array('MyClass''myUpdatePersonalData');
    PHP-Code:
    // MyClass.php
    public function myUpdatePersonalData($objUser$arrData$objModule)
    {
        
    // Do something

    lg
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  21. #21
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Ja, im Handbuch steht so einiges nicht, leider. Steht aber natürlich jedem frei sich daran zu beteiligen. Der Hook ist aber wohl schon älter, den gabts schon unter 2.11 :-)

    Ich such immer nach "TL_HOOK" und lass mir anzeigen was es für Hooks gibt, Quelltext ist einfach das beste und aktuellste "Handbuch" :-)

    Vorteil von diesem Hook ist (wenn man es professioneller umsetzt) dass man das "persönliche Daten" Modul erweitern kann mit einer Checkbox, die man über den Parameter $objModule abfragen kann und dann entweder ne Mail verschickt oder nicht. Denke in seinem Fall wird das nicht benötigt, da seine Seite natürlich nur diese eine Aufgabe hat. Bei Multidomain Installationen würde sich soetwas anbieten.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  22. #22
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Da gehts schon los. Welche config.php meinst Du damit? Wenn ich nach dem $GLOBALS['TL_HOOKS']['processFormData'] suche, finde ich drei config.php Dateien, die diesen Hook beinhalten (/system/cache/config/config.php, system/modules/efg/config/config.php, system/modules/notification_center/config/config.php). Der zweite ($GLOBALS['TL_HOOKS']['updatePersonalData']) kommt nur in system/modules/core/modules/ModulePersonalData.php vor. Doch wie binde ich dort meine Änderungen ein, vorallem updatesicher. Muss ich dazu ein neues Modul anlegen und die Änderungen dort vornehmen? Wie stelle ich das an?

    Wie gesagt, ich habe mit der Modulentwicklung / Nutzung von Hooks noch nichts zu tun gehabt.
    Hilfreich wäre also eine "Dummy-Anleitung", welche Datei ich wo erstellen / anpassen muss, um den gewünschten Effekt zu erhalten.
    Wie würde denn die "professionelle" Variante aussehen, von der the_scrat spricht (Checkbox im persönliche Daten Modul). Müssten die Anpassungen auch in einem eigenen Modul vorgenommen werden?

    Gruß Thomas

  23. #23
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi Thomas,

    eigentlich wollte ich dir eine Anleitung schreiben. Nach den ersten 20 Zeilen musste ich dann jedoch feststellen, dass es für mich einfacher ist, dir das komplette Modul zu programmieren ;-)

    Anbei das Modul. Kopiere dir den Inhalt der Datei unter /system/modules
    Danach gehst du in Contao in die Erweiterungsverwaltung und machst ein Datenbankupdate, damit die 3 Felder angelegt werden. Als nächstes gehst du nun in dein Modul (Persönliche Daten) und kannst ganz unten nun den Punkt aktivieren ob für dieses Formular bei einem Update die Daten verschickt werden.

    Feature: du kannst einen individuellen Betreff wählen und zusätzlich die E-Mail an mehrere Adressen schicken. Einfach mit Komma trennen.

    Wenn du wissen willst, wie das funktioniert, sieh dir den Quelltext an. Dort habe ich dir einige Kommentare hinterlassen. Denke das ist am einfachsten (für uns beide)

    Gruß Michael

    Edit: Sollte sowohl unter Contao 2 als auch Contao 3 laufen :-)
    Angehängte Dateien Angehängte Dateien
    Geändert von the_scrat (23.04.2014 um 18:00 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  24. #24
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Hallo Michael,

    ich weiß ja gar nicht was ich sagen soll. Erst einmal vielen vielen Dank für Deinen Einsatz.
    Das ist es, was ich an der Contao Community so schätze. Man bekommt schnell und unkompliziert geholfen. Bis hin zu fertigen Lösungen, auch wenn das gar nicht die Vorgabe war.
    Wenn ich Dir also auch mal etwas Gutes tun kann, gib mir bitte Bescheid.

    Habe das Modul natürlich gleich installiert und getestet. Installation und Funktion soweit alles reibungslos.
    Ein kleines Problem habe ich noch. Beim Geburtsdatum erhalte ich in der Mail nur den Timestamp angezeigt.
    Wenn Du mir noch erklären könntest, an welcher Schraube ich drehen muss, um ein lesbares Datum zu erhalten.

    Mit begeisterten Grüßen
    Thomas

  25. #25
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi Thomas,

    "nehmen" und "geben" ist die Devise. Mir wurde auch schon viel geholfen und wäre froh, wenn mir früher jemand sowas gebastelt hätte. Von daher, warum nicht mal den ersten Schritt machen?
    Wer weiß, was es bringt.... Zumindest einen weiteren zufriedenen Communitybenutzer. Das ist ja Sinn der Community :-) Sich gegenseitig zu helfen ohne ständig den Satz zu lesen "mach ich aber nicht kostenlos".

    Zu deinem Problem:

    Ersetz bitte in der UpdateAccessDB.php (Hauptverzeichnis) den mittleren Teil mit dem foreach in das hier:

    PHP-Code:
            // Prüfe alle Datenfelder und bau die Mail zusammen
            
    foreach($arrData as $strKey => $strValue)
            {
                switch(
    $strKey)
                {
                    case 
    'tstamp':
                    case 
    'dateOfBirth':
                    case 
    'dateAdded':
                        
    $objMail->text .= $GLOBALS['TL_LANG']['tl_member'][$strKey][0] . ': ' date("d.m.Y",$strValue) . "\n";
                    break;

                    default:
                        
    $objMail->text .= $GLOBALS['TL_LANG']['tl_member'][$strKey][0] . ': ' $strValue "\n";
                }
            } 
    Habs nicht getestet, "müsste" aber funktionieren :-)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  26. #26
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Hallo Michael,

    schön das es "solche" Community-Mitglieder wie Dich gibt, ist nicht selbstverständlich.

    Besten Dank, das Update hat funktioniert!!!
    Kann ich in der UpdateAccessDB.php auch einzelne Felder in der Mail ausblenden?
    Da kommt z.B. bei Änderung des Passwortes auch der md5-Hash mit und das serialisierte Array vom Newsletter, was ich aber in der Mail nicht benötige, da diese Daten in der Access-DB eh nicht gepflegt werden.

    Gruß Thomas

  27. #27
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi Thomas,

    habe dir nun im Modul unterhalb von den E-Mailangaben noch die verfügbaren Mitgliederfelder eingebaut. So kannst du nun exakt auswählen, welche Felder übermittelt werden :-)

    Ersetz den Inhalt einfach und mach danach bitte noch ein Datenbankupdate, es kam noch ein weiteres Datenbankfeld hinzu.
    Angehängte Dateien Angehängte Dateien
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  28. #28
    Contao-Nutzer Avatar von wdm
    Registriert seit
    11.04.2011.
    Beiträge
    230

    Standard

    Hallo Michael,

    cool, jetzt ist das Ganze perfekt.
    Nochmals vielen Dank und einen schönen Abend noch.

    Gruß Thomas

  29. #29
    Contao-Nutzer Avatar von Timo
    Registriert seit
    22.06.2009.
    Beiträge
    75

    Standard Nur bei bestimmten Feldern reagieren...

    Hallo Michael,

    danke für dein tolles Tool! Ich habe noch zwei Fragen:

    1. Was muss ich ändern, damit der Hook nicht immer reagiert, sondern nur bei Änderung von E-Mail, Handynummer und Ort bspw. nicht aber bei Änderung von PW oder BN.

    2. Was muss ich ändern, damit in der E-Mail steht: "User XYZ hat folgende Werte geändert: E-Mail, Handynummer" Der Hook also erkennt welches Feld tatsächlich geändert wurde und davon den Feldnamen übermittelt aber nicht den gespeicherten Wert.

    Es wäre super, wenn du mich da unterstützen könntest.

    lg Timo

  30. #30
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hallo Timo,


    Zitat Zitat von Timo Beitrag anzeigen
    1. Was muss ich ändern, damit der Hook nicht immer reagiert, sondern nur bei Änderung von E-Mail, Handynummer und Ort bspw. nicht aber bei Änderung von PW oder BN.

    2. Was muss ich ändern, damit in der E-Mail steht: "User XYZ hat folgende Werte geändert: E-Mail, Handynummer" Der Hook also erkennt welches Feld tatsächlich geändert wurde und davon den Feldnamen übermittelt aber nicht den gespeicherten Wert.
    Das ist so leider in Kombination nicht möglich, da bei der Ausführung des HOOKs die Felder bereits gespeichert wurden. Es gibt also keine direkte Möglichkeit herauszufinden was sich effektiv geändert hat.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  31. #31
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.943

    Standard

    Zitat Zitat von Timo Beitrag anzeigen
    1. Was muss ich ändern, damit der Hook nicht immer reagiert, sondern nur bei Änderung von E-Mail, Handynummer und Ort bspw. nicht aber bei Änderung von PW oder BN.
    Das sollte doch via Konfiguration des Moduls machbar sein. Wähle nur die Felder aus, die Dich interessieren.

    2. Was muss ich ändern, damit in der E-Mail steht: "User XYZ hat folgende Werte geändert: E-Mail, Handynummer" Der Hook also erkennt welches Feld tatsächlich geändert wurde und davon den Feldnamen übermittelt aber nicht den gespeicherten Wert.
    Dazu musst Du den Code in UpdateAccessDB.php ändern. Und zwar den Teil, wo in einer Schleife über die geänderten Felder jeweils Feldname + Wert ausgegeben wird:

    PHP-Code:
    foreach($arrFields as $strKey)
            {
                switch(
    $strKey)
                {
                    case 
    'tstamp':
                    case 
    'dateOfBirth':
                    case 
    'dateAdded':

                        if(
    $arrData[$strKey])
                            
    $objMail->text .= $GLOBALS['TL_LANG']['tl_member'][$strKey][0] . ': ' date("d.m.Y",$arrData[$strKey]) . "\n";
                    break;

                    default:
                        
    $objMail->text .= $GLOBALS['TL_LANG']['tl_member'][$strKey][0] . ': ' $arrData[$strKey] . "\n";
                }
            } 
    hier entfernst Du den Wert (also date("d.m.Y",$arrData[$strKey]) bzw. $arrData[$strKey]).

    Oder Du verwendest anstelle der Schleife folgendes:

    PHP-Code:
    $arrFieldLabels =  array_map(function($strKey) { return $GLOBALS['TL_LANG']['tl_member'][$strKey][0]; },   $arrFields);
    $objMail->text .= implode(","$arrFieldLabels); 
    Disclaimer: ich habe das Modul nicht ausprobiert und mir nur den Quelltext angeschaut. Muss also nicht funktionieren.

    Edit: aus #30 gelernt, daß meien Antwort zu 1.) wohl falsch ist :-(
    Geändert von fiedsch (30.03.2016 um 07:36 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  32. #32
    Contao-Nutzer Avatar von Timo
    Registriert seit
    22.06.2009.
    Beiträge
    75

    Standard

    @ Michael: ja, das habe ich befürchtet. Ich dachte erst an $get oder §post aber ich kann ja trotzdem nicht vergleichen was davor drin stand...
    @ fiedsch danke für deinen workaround. Leider müsste erst Frage 1 erfüllt sein, damit das dann Sinn macht...weil wenn der Hook auf jede Änderung reagiert bringt es nichts zu sagen er soll nur E-Mail und Ort als Feldname in der E-Mail schreiben und sich in diesen Feldern aber gar nichts geändert hat, weil eigentlich der BN geändert wurde...dann käme trotzdem jedesmal E-Mail und Ort...

    Trotzdem vielen Dank für eure Hilfe, vielleicht kommt da in späteren contao versionen noch was...
    Geändert von Timo (30.03.2016 um 18:27 Uhr)

  33. #33
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Eine Möglichkeit Änderungen festzustellen ist, den Datensatz beim Ladevorgang (onload_callback) in die Session zu schreiben. Beim onsubmit_callback kannst Du Session und Datensatz dann miteinander vergleichen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  34. #34
    Contao-Nutzer Avatar von Timo
    Registriert seit
    22.06.2009.
    Beiträge
    75

    Standard

    Hi Samson,

    kannst du das etwas präzisieren bzw. mir eine Hilfestellung geben in welcher Datei ich genau was ändern muss? Das wäre super! :-)

    lg Timo

  35. #35
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Bin zwar nicht Samson, aber....

    Du müsstest erstmal etwas präzisieren, was Du überhaupt machen willst...eigene erweiterung usw...

    Grundsätzlich schreibst Du Dir einen onload_callback indem die notwendigen (ja, nur die notwendigen, nicht alle!) Felder in die Session gespeichert werden. So z.B.:
    PHP-Code:
    public function storeDcaInSession(DataContainer $dc)
        {
            
    $session = \Session::getInstance();
            
            
    $session->set('meineErweiterung.meinFeldname''irgendwas');
            } 
    Nachher kannst Du dann z.B. danach abfragen:
    PHP-Code:
    $session = \Session::getInstance();
                    
    // post = wasanderes // session = irgendwas
            
    if(\Input::post('meinFeldname') != session->get('meineErweiterung.meinFeldname')) 
    Ist jetzt runter geschrieben, also ungetestet, das Prinzip sollte aber klar werden.
    Geändert von PaddySD (08.02.2017 um 13:19 Uhr)

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
  •