Ergebnis 1 bis 7 von 7

Thema: Keine Änderung an Datenbank nach save_callback

  1. #1
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard Keine Änderung an Datenbank nach save_callback

    Hallo Zusammen,

    ich erstelle gerade ein kleines Modul in dem ich Wochentage mit ihrem Datum und Namen in der BE-Liste auflisten möchte.
    Mein Datum speichere ich dabei als Timestamp ab, wodurch die Sortierung in der Liste klappt, mir aber auch der Timestamp statt dem Datum als Label angezeigt wird.

    Als Lösung dafür habe ich mir ein weiteres Feld "dateClean" erstellt, in das ich per save_callback vom Feld "date" das formatierte Datum eintragen lassen möchte, damit statt dem Timestamp dieses Datum in der Liste angezeigt wird.

    Das ist meine Funktion und mein Feld:
    Code:
    'date' => array
    (
    'exclude'                 => true,
    'search'                  => true,
    'inputType'               => 'text',
    'eval'                    => array('mandatory' => true,'rgxp'=>'date', 'datepicker'=>true, 'tl_class'=>'w50 wizard'),
    'sql'                     => "varchar(10) NOT NULL default ''"		),
    'save_callback' => array
    (
    array('tl_speiseplan_tag', 'generateDate')
    ),
    
    'dateClean' => array
    (
    'sql'                     => "varchar(255)  NULL default ''",
    ),

    Code:
        public function generateDate($varValue, DataContainer $dc)
        {
            $date = $dc->activeRecord->date;
            $date = date('d.m.Y',$date);
            $id = $dc->activeRecord->id;
            $sql = 'UPDATE `tl_speiseplan_tag` SET `dateClean` = ? WHERE `id` = ?';
            $this->Database->prepare($sql)->execute($date,$id);
        }
    Relativ simpel eigentlich, nur wird das SQL nicht ausgeführt... habe ich da irgendetwas falsch gemacht? Ich arbeite mich gerade in die tiefere Contao Programmierung ein, habe daher noch nicht so viel Erfahrung mit den Contao Klassen & Methoden...

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

    Standard

    Bei einem save_callback musst du den Wert zurück geben, den du speichern lassen möchtest. Aktuell gibst du aber gar nichts zurück. Sieh auch https://docs.contao.org/dev/referenc...lds-field-save
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard

    Wenn ich dem Feld einen Wert zurückgebe, in dem Fall seinen eigenen, weil ich den ja nicht ändern möchte, ändert es allerdings leider nichts:

    Code:
        public function generateDate($varValue, DataContainer $dc)
        {
            $date = $dc->activeRecord->date;
            $date = date('d.m.Y',$date);
            $id = $dc->activeRecord->id;
            $sql = 'UPDATE `tl_speiseplan_tag` SET `dateClean` = ? WHERE `id` = ?';
            $this->Database->prepare($sql)->execute($date,$id);
            return $varValue;
        }

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

    Standard

    Hast du denn überhaupt geprüft, ob dein Callback aufgerufen wird?
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard

    Scheinbar wird er nicht aufgerufen... woran könnte das liegen?

    Nur für mich: Ich habe es kurz getestet, indem ich dem Return einen String übergeben habe, geht das auch intelligenter? Wie gesagt, ich finde mich da gerade erst ein...

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

    Standard

    Zitat Zitat von FlorinvV Beitrag anzeigen
    Scheinbar wird er nicht aufgerufen... woran könnte das liegen?
    Ohne den restlichen Code zu sehen wird das schwer überprüfbar sein. Außerdem nutzt du noch die alte Variante um Callbacks zu registrieren, statt die neue (siehe Dokumentation).
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    06.04.2020.
    Beiträge
    116

    Standard

    Also ich meine das hier müsste der momentan relevante Code sein:

    Code:
    $GLOBALS['TL_DCA']['tl_speiseplan_tag'] = [
    'config' => [...],
    'list' => [...],
    'palettes' => [...],
    'fields' => [
    'date' => array
    (
    	'exclude'                 => true,
    	'search'                  => true,
    	'inputType'               => 'text',
    	'eval'                    => array('mandatory' => true,'rgxp'=>'date', 'datepicker'=>true, 'tl_class'=>'w50 wizard'),
    	'sql'                     => "varchar(10) NOT NULL default ''"		),
    	'save_callback' => array
    	(
    		array('tl_speiseplan_tag', 'generateDate')
    	),
    
    'dateClean' => array
    (
    'sql'                     => "varchar(255)  NULL default ''",
    ),
    ],
    ];
    
    class tl_speiseplan_tag extends Backend
    {
        public function generateDate($varValue, DataContainer $dc)
        {
            $date = $dc->activeRecord->date;
            $date = date('d.m.Y',$date);
            $id = $dc->activeRecord->id;
            $sql = 'UPDATE `tl_speiseplan_tag` SET `dateClean` = ? WHERE `id` = ?';
            $this->Database->prepare($sql)->execute($date,$id);
            return $varValue;
        }
    };
    Es ist immer etwas schwierig, direkt die neuen Varianten zu nutzen, weil es recht wenige Beispiele gibt... ich habe mich ein bisschen an den News orientiert, da läuft es auch noch über die alte Variante... aber davon abgesehen müsste die alte ja noch gehen, oder? Im Zweifel stelle ich das auf das neue System um

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
  •