Ankündigung

Einklappen
Keine Ankündigung bisher.

HOOK $GLOBALS['CUSTOMCATALOG_HOOKS']['dataOutput']

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • HOOK $GLOBALS['CUSTOMCATALOG_HOOKS']['dataOutput']

    Hallo,

    ich würde gerne den Hook $GLOBALS['CUSTOMCATALOG_HOOKS']['dataOutput'] nutzen, allerdings greift meine Funktion nicht. Habe mich an die Anleitung ehalten, aber vermutlich etwas übersehen?! Wenn im Backend bei einem Katalog-Eintrag ein Häkchen gesetzt wird, soll eine Email versendet werden. Es passiert allerdings nichts.

    //autoload.php
    [PHP]
    PHP-Code:
    ClassLoader::addClasses(array
    (
    'HookSicherheit' => 'system/modules/sicherheitsdienst/hook/HookSicherheit.php',
    )); 
    //config.php
    PHP-Code:
    $GLOBALS['CUSTOMCATALOG_HOOKS']['dataOutput'][] = array('HookSicherheit''freigeschaltetSendeEmail'); 
    //hook/Hooksicherheit.php
    PHP-Code:
    <?php
    class HookSicherheit extends Backend
    {
       
    //https://premiumcontaothemes.gitbooks.io/customcatalog-api/content/pages/extension/hooks/dataOutput.html
        
    public function freigeschaltetSendeEmail($arrSet$strTable$objApi)
        {
            \
    System::log('HOOK -> Funktion freigeschaltetSendeEmail()'__METHOD__TL_GENERAL);
            if(
    $objApi->getTable() == 'cc_xxx')
            {
                
    //Email an Kunde bei Freischaltung
                
    if($arrSet['freigeschaltet']==1)
                {
                    if(!empty(
    $arrSet['email'])) {
                        
    $objEmail = new
    [...]
                        \
    System::log('Unternehmen freigeschaltet, Email an '$arrSet['email'], __METHOD__TL_GENERAL);
                    }
                }
            }
            return 
    $arrSet;
        }
    }
    Für einen Tipp würde ich mich sehr freuen und bedanke mich im Voraus!
    Herzliche Grüße,
    Petra
    Zuletzt geändert von PetraDammann; 14.11.2019, 19:50.

  • #2
    Hi Petra,
    ich gehe davon aus, dass die Hook-Methode selbst erstmal feuert. Also der anfängliche "Starter" Log geschrieben.

    Im set Array befinden sich sicher nur Felder;Werte, die geändert werden. Die Abfrage würde daher maximal greifen, wenn sich der Status des Feldes "freigeschaltet" geändert hat. In diesem Fall von n zu 1.

    Darüber hinaus ist der Array nicht assoziativ, sondern numerisch. Er übergibt ALLE Einträge und ist quasi erst je Eintrag assoziativ. Siehe genau das Beispiel. Es durchläuft eine foreach Schleife.
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: screenshot_5057.jpg
Ansichten: 38
Größe: 52,8 KB
ID: 16880
    Zuletzt geändert von Tim; 15.11.2019, 08:09.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Hallo Tim,

      vielen Dank für Deine Rückmeldung. Die Funktion greift leider gar nicht, d.h. es wird auch kein Log geschrieben und es kann auch ein PHP-Fehler in der Klasse/Datei stehen, es wird alles ignoriert. Daher meine Frage, ob der Aufruf ansich richtig ist?! In dem Modul pct_customelements_plugin_customcatalog ist unter /config/config.php wird "dataOutput" gar nicht genannt, das ist aber richtig, oder?

      Viele Grüße, Petra

      Kommentar


      • #4
        Ich muss offen fragen, weil dies hier schon tiefere PHP/Contao/Programmier-Kenntnisse voraussetzt. Hast du bereits mit Hooks im Contao-sinne vorab gearbeitet und eine eigene Contao Erweiterung erstellt, die eine Callback-Methode via Hook triggert?

        Bevor (besonders unter Contao 4.4) eine eigene Erw. im System greift müssen einige Schritte vorab getan werden. Der wichtigste ist sicher der permanente Neuaufbau des Symphony-Caches (bis das Teil läuft).

        config.phps werden immer gecached. Jede Änderung in einer config.php zwingt den Neuaufbau des Symphony-Caches.
        ---
        Das System spuckt hier keine Fehlermeldungen aus (try and catch), damit eine fehlerhafte externe Komponente nicht das Backend lahm legt. Fehler werden aber weiterhin im Error log und server log geschrieben.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Hallo Tim,

          ja, Contao-Hooks habe ich schon öfters eingesetzt und eigene Erweiterungen auch schon viele geschrieben. Den Hook habe ich wie bislang unter Contao 3 eingerichtet (wie oben bereits aufgeführt), aber das funktioniert unter Contao 4 zumindest mit Contao-Hooks auch. Den Symphony-Cache habe ich mit dem Contao-Manager jedes Mal erneuert.
          In der Log-Datei werden keine Fehler genannt.
          Muss der CUSTOMCATALOG_HOOKS-dataOutput-Hook anders eingebunden werden?

          LG, Petra

          Kommentar


          • #6
            Der Aufbau entspricht Contao-Standard. Ich würde empfehlen die Ladereihenfolge noch zu setzen über eine autoload.ini
            Code:
             [COLOR=#333333][SIZE=11px] requires[] = [COLOR=#dd2400]"core"[/COLOR]
              requires[] = [COLOR=#dd2400]"pct_customelements_plugin_customcatalog"[/COLOR]
             [/SIZE][/COLOR]
            Hast du überhaupt API-Jobs definiert? Der Hook wird nur getriggert, wenn min. ein Job existiert, der abgearbeitet wurde.
            Ohne Jobs stünde der apiComplete Hook bereit.
            Nur so als Idee: Sonst kann man die Aufgabe quasi "sende eine Mail" auch einfach in einen loadDataContainer Hook oder in einen Cronjob stecken. Eigentlich geht es ja nur um eine Prüfung ob ein Wert gesetzt ist je Eintrag.


            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Einen API-Job hatte ich nicht definiert, das habe ich mit einem Hook nicht in Verbindung gebracht.
              Aber vielen Dank für Deinen Tipp, mit einem save_callback auf das Feld hat es geklappt - shame on me, das hatte ich nicht ausprobiert, weil ich mich mit dem Katalog nicht wirklich auskenne und mir nicht bewusst war, dass ich die Tabelle "ganz normal" ansprechen kann.

              Dir noch einmal vielen Dank für Deine ganze Hilfe!!
              LG, Petra

              Kommentar

              Lädt...
              X