Ergebnis 1 bis 7 von 7

Thema: Datensätze löschen per Cronjob: ondelete_callback?

  1. #1
    Contao-Nutzer
    Registriert seit
    05.10.2012.
    Beiträge
    213

    Standard Datensätze löschen per Cronjob: ondelete_callback?

    Hallo

    ich hab ein eigenes Modul, bei dem ich Datensätze n Tage nach Erstellung automatisch löschen will.
    Außerdem ist ein ondelete_callback im DCA eingerichtet.

    Im Moment lösche ich die Datensätze im Cronjob über das Model:
    PHP-Code:
    $objEntries = \MeinModul\MeinModel::findOldEntries();

    if (
    $objEntries)
    {
        foreach( 
    $objEntries as $objEntry)
        {
            
    $objEntry->delete();
        }

    Dabei wird aber der Callback nicht ausgeführt.
    Gibt es da einen einfachen Weg, den ich übersehen habe?

    Im Callback wird ja ein DataContainer-Objekt verwendet, komm ich aus dem Model irgendwie da dran?

    Danke!

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.316
    Partner-ID
    10107

    Standard

    Ja, einfach das DCA laden und die Callbacks selbst ausführen, so wie es DC_Table machen würde. Manche Frontend Module führen auch Callbacks aus den DCAs aus.

  3. #3
    Contao-Nutzer
    Registriert seit
    05.10.2012.
    Beiträge
    213

    Standard

    Hallo Spooky, danke für die schnelle Antwort.

    Ich bin allerdings auch nach längerem Testen noch nicht so richtig weiter gekommen.
    Was mir unklar ist:
    • Wie lade ich das DCA? Per $this->loadDataContainer?
      Ich verstehe noch nicht ganz, wozu das nötig ist.
    • Ich versuche, die Callbacks selbst auszuführen, aber der ondelete_callback erwartet als Argument ein dataContainer-Objekt. Wie komme ich da ran bzw wie setze ich den activeRecord?
    • Hab meine Installation durchsucht, aber kein Frontend-Modul gefunden, dass das macht. Weißt du ein Beispiel?
    • Muss ich das im Kontext eines FE-Moduls machen, oder geht auch ein BE-Modul?


    DANKE!

  4. #4

  5. #5
    Contao-Nutzer
    Registriert seit
    05.10.2012.
    Beiträge
    213

    Standard

    Danke, das hätte ich natürlich selbst finden müssen … Stand auf dem Schlauch.

    Allerdings komm ich immer noch nicht wirklich weiter. Vielleicht verwende ich die Callbacks auch falsch?

    Mein Test:
    Dachte, ich schau mir das vom Modul Personal Data ab.

    Also hab ich in die DCA-Config folgendes gepackt:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['firstname']['load_callback'] = array(array('MeineKlasse','meineFunktion')); 
    Meine Funktion:
    PHP-Code:
        public function meineFunktion($varValueDataContainer $dc)
        {
            return 
    $varValue;
        } 
    So wie hier zu finden.

    Bekomme aber folgende Fehlermeldung:
    PHP-Code:
    Recoverable errorArgument 2 passed to MeineKlasse::meineFunktion() must be an instance of DataContainerinstance of FrontendUser givencalled in /Applications/XAMPP/xamppfiles/htdocs/verso/contao-3.5.15/system/modules/core/modules/ModulePersonalData.php on line 195 and defined in system/modules/vs-jobs/modules/ModuleJobs.php on line 91 
    Was auch zu erwarten war, wenn ich mir das hier anschaue.

    Also gehe ich davon aus, dass das Problem die Callback-Funktion selbst ist und mache da eine Abfrage, ob es sich um ein DataContainer-Objekt handelt oder um ein Model?
    PHP-Code:
    public function meineFunktion($varValue$entry)
        {
            if (
    $obj instanceof DataContainer
            {
                ...
            }
            else if (
    $obj instanceof MyModel
            {
            }
            

            
    return $varValue;
        } 
    Wäre das so richtig, irgendwie kommt es mir etwas unschön vor?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.316
    Partner-ID
    10107

    Standard

    Ja, wie du im Core siehst, ist der zweite Parameter beim load_callback bspw. nicht unbedingt vom Typ \DataContainer. Daher darfst du das in der Funktionsdefinition auch nicht so festlegen.

  7. #7
    Contao-Nutzer
    Registriert seit
    05.10.2012.
    Beiträge
    213

    Standard

    Perfekt, dann ist das ganze kein Problem mehr.
    Vielen Dank!

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
  •