Ergebnis 1 bis 14 von 14

Thema: Verwendung von load_callback und save_callback

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

    Frage Verwendung von load_callback und save_callback

    Das ist die load_callback-Funktion in meinem DCA:
    PHP-Code:
    public function loadNachname($varValueDataContainer $dc)
    {
        
    // Füllt Nachname aus, wenn leer und ein Spieler ausgewählt wurde
        
    if($dc->activeRecord->name_id && !$varValue)
        {
            
    $objRegister $this->Database->prepare("SELECT * FROM tl_kaderlisten_namen WHERE id = ?")
                                          ->
    execute($dc->activeRecord->name_id);
            return 
    $objRegister->lastname;
        }
        else return 
    $varValue;

    Die Funktion füllt das Feld mit einem Wert aus. Der Name ($objRegister->lastname) der zu dem Wert ($dc->activeRecord->name_id), wird in das Feld eingetragen. Wenn ich nun das Formular speichere bleibt das Feld in der Datenbank leer. Contao speichert also meinen in das Feld automatisch eingetragenen Wert nicht in der Datenbank. Das überrascht mich etwas. Hebelt denn ein load_callback inkl. Feldmanipulation die normale Speicherfunktion von Contao aus? Falls ja, würde das heißen, ich muß noch einen save_callback machen und
    PHP-Code:
    public function saveNachname($varValueDataContainer $dc)
    {
        return 
    $varValue;

    weil das auch nicht funktioniert im save_callback wohl direkt in die Datenbank schreiben?! Ist das so? Oder gibt es eine einfachere Möglichkeit?
    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

  2. #2
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hallo Frank
    Sehe das auch wie du. Der load_callback lädt nur den Feldwert. Das Abspeichern müsstest du eigentlich Contao überlassen können.
    Lg Marko
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

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

    Standard

    Es ist wie verhext. In einem anderen Bundle verwende ich einen load_callback und einen save_callback. Der load_callback formatiert $varValue für die Anzeige im BE um und der save_callback formatiert das Ganze wieder zurück, damit es im speicherbaren Format ist.

    Im aktuellen Fall scheint es aber so zu sein, das Contao den Inhalt von $varValue beim Speichern schon wieder vergessen hat. Ich schreibe einen Wert in das Formularfeld, was wunderbar funktioniert. Aber Contao speichert ihn nicht. Und das liegt nicht an https://community.contao.org/de/show...ll=1#post62413, denn disabled oder readonly ist das Feld nicht.
    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

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

    Standard

    Bevor du dich um Probleme kümmerst solltest du zuerst immer auf die neueste Contao Version aktualisieren bzw. alle Pakete aktualisieren. Contao 4.8 hat das Lebensende schon länger erreicht.

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

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Bevor du dich um Probleme kümmerst solltest du zuerst immer auf die neueste Contao Version aktualisieren bzw. alle Pakete aktualisieren. Contao 4.8 hat das Lebensende schon länger erreicht.
    Ja, ich weiß. Das ändert aber nichts am Problem das es spukt. Ich werde mir aber eine Blanko-4.9 oder 4.10 installieren und das Problem dort nachstellen.

    Ich habe jetzt auch noch einen onsubmit_callback erstellt und mir $dc->activeRecord dort ausgeben lassen:
    Code:
    [08-Dec-2020 11:40:46] Contao\Database\Result Object
    (
        [resResult:protected] => 
        [strQuery:protected] => SELECT * FROM tl_kaderlisten_items WHERE id='1285' LIMIT 0,1
        [resultSet:protected] => Array
            (
                [0] => Array
                    (
                        [id] => 1285
                        [pid] => 21
                        [tstamp] => 1607424042
                        [type] => A
                        [nummer] => 0
                        [name_id] => 101
                        [vorname] => 
                        [nachname] => 
                        [landesverband] => 
                        [fidetitel] => 
                        [dwz] => 0
                        [elo] => 0
                        [comment] => 
                        [published] => 1
                        [note] => 
                    )
    
            )
    
        [intIndex:Contao\Database\Result:private] => 0
        [rowCount:Contao\Database\Result:private] => 1
        [arrModified:Contao\Database\Result:private] => Array
            (
                [type] => A
                [nummer] => 0
                [name_id] => 101
                [vorname] => Jana
                [nachname] => Bardorz
                [landesverband] => 
                [fidetitel] => 
                [dwz] => 0
                [elo] => 0
                [note] => 
                [comment] => 
                [published] => 1
            )
    
    )
    Im unteren Teil stehen bei vorname und nachname meine Werte aus dem Formular. In der Datenbank stehen die Werte anschließend nicht.
    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

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

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Das ändert aber nichts am Problem das es spukt.
    Genau das ist ja der Punkt, du kannst das eben nicht wissen. Um sicherzustellen, dass dieses Verhalten nicht an einem Bug in einer veralteten Contao Version liegt, musst du Contao zuerst aktualisieren.

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

    Standard

    Ich habe jetzt eine aktuelle 4.9 aufgesetzt und schachbulle/contao-kaderlisten-bundle installiert, danach meine Änderungen noch drübergeschoben. Ergebnis: dasselbe wie in der 4.8.

    Ich installiere jetzt noch mein contao-adressen-bundle, um zu sehen ob dort die beiden Callbacks funktionieren. Hier nochmal schematisch die Unterschiede beider load_callbacks:

    contao-adressen-bundle:
    • In der Datenbank steht 19901023
    • $varValue wird umformiert. Aus z.B. "19901023" wird 23.10.1990
    • Feld wird bearbeitet, z.B. "24.11.1993"
    • save_callback wandelt um in "19931124"
    • In der Datenbank steht nun 19931124


    contao-kaderlisten-bundle:
    • In der Datenbank steht - nichts
    • $varValue ist leer und wird mit z.B. "Frank" befüllt
    • Feld wird bearbeitet, z.B. "Frank1"
    • In der Datenbank steht - nichts


    Sieht für mich nach Spuk aus - in 4.8 und in 4.9.

    Wenn das adressen-bundle auch nicht mehr richtig funktioniert, wechsle ich den Server. Dann scheint Domainfactory verhext zu sein.
    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

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

    Standard

    Poste den gesamten Code. Bzw., falls das noch in Entwicklung ist, pushe den aktuellen Entwicklungsstand in einen eigenen Branch auf https://github.com/Samson1964/contao-kaderlisten-bundle

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

    Standard

    Danke Spooky! Mein adressen-bundle funktioniert übrigens...

    Mit Branches kenne ich mich nicht aus. Ich muß erst ein paar Git/Github-Unterrichtsstunden nehmen. Ich habe gerade die Version 1.2.1 gepusht, die den aktuellen Entwicklungsstand verkörpert.

    Bei der Installation wird contao-spielerregister-bundle als Abhängigkeit mitinstalliert. Wird für den Test nicht benötigt, muß aber da sein.
    Nach der Installation geht es so weiter:
    1. Inhalte -> Kaderlisten aufrufen und neue Kaderliste anlegen. Es muß dort nur der Titel ausgefüllt werden.
    2. Im Header auf "Registrierte Spieler" gehen und einen Spieler anlegen (Name, Vorname, Geburtsjahr ausfüllen)
    3. Danach zurück zu den Kaderlisten und in der angelegten Kaderliste einen Eintrag anlegen (Neuer Spieler)
    4. Im Abschnitt Spieler kann nun der Eintrag aus "Registrierte Spieler" ausgewählt werden und Vorname und Nachname werden automatisch ausgefüllt - leider aber nicht gespeichert ....
    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

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

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Ich habe gerade die Version 1.2.1 gepusht, die den aktuellen Entwicklungsstand verkörpert.
    Wo genau ist der load_callback und save_callback zu finden?

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

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wo genau ist der load_callback und save_callback zu finden?
    src/Resources/contao/dca/tl_kaderlisten_items.php
    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

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

    Standard

    Soweit ich jetzt herausbekommen habe, funktioniert der load_callback nicht ohne save_callback. Nachdem ich eine save_callback-Funktion aufrufe:
    PHP-Code:
    public function saveNachname($varValueDataContainer $dc)
    {
        return 
    $varValue;

    landet endlich der Wert in der Datenbank. Ohne save_callback wird der Wert wohl nach NULL geschickt.

    EDIT: 2 Minuten später - funktioniert so leider auch nicht. Ich muß wohl besondere Ausgangsbedingungen schaffen.
    Geändert von Samson1964 (08.12.2020 um 14:43 Uhr)
    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

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

    Standard

    Unter der Annahme $varValue = 'Meyer'
    save_callback 1:
    PHP-Code:
    public function saveNachname($varValueDataContainer $dc)
    {
        return 
    $varValue.' ';

    Speichert 'Meyer ', also mit Leerzeichen am Ende

    save_callback 2:
    PHP-Code:
    public function saveNachname($varValueDataContainer $dc)
    {
        return 
    $varValue;

    Speichert '', also nichts.

    Sieht für mich wie ein Fehler in Contao aus, der sich schon seit vielen Versionen festgesetzt hat. Der Fehler scheint nur unter der Bedingung zu entstehen, wenn $varValue leer ist und erst durch einen load_callback gefüllt wird.
    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

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

    Standard

    Die Lösung war simpel, siehe https://github.com/contao/contao/issues/2557

    Im Feld mit dem load_callback muß im eval-Array stehen:
    PHP-Code:
    'alwaysSave' => true 
    Ich werde mir diese Einstellung für andere Projekte hoffentlich als Standard merken können.
    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

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
  •