Ergebnis 1 bis 11 von 11

Thema: Callback mit Datenbankabfrage für tl_member

  1. #1
    Contao-Nutzer
    Registriert seit
    06.02.2017.
    Beiträge
    11

    Standard Callback mit Datenbankabfrage für tl_member

    Hallo,

    beschäftige mich gerade mit Contao und erweitere gerade die tl_member. Dabei will ich einen Callback nutzen, der Daten aus der Datenbank halt. Leider scheine ich da noch einen Fehler drin zu haben, finde ihn nicht.

    Was ich erreichen will, ist dass der maximale Wert aus der DB geholt wird, um 1 erhöht und dann zurückgegeben wird.

    PHP-Code:
    /* CALLBACK */

    $GLOBALS['TL_DCA']['tl_member']['config']['onsubmit_callback'][] = array('tl_member_club''createMitgliedsnummer');

    /* GLOBALS */

    $GLOBALS['TL_DCA']['tl_member']['fields']['mitgliednr'] = array
    (
        
    'label'                 => &$GLOBALS['TL_LANG']['tl_member']['mitgliednr'],
        
    'search'                => true,
        
    'inputType'             => 'text',
        
    'exclude'               => true,
        
    'load_callback'         => array(array('tl_member_club''createMitgliedsnummer')),
        
    'eval'                  => array('mandatory'=>true'maxlength'=>10'tl_class'=>'w50''alwaysSave'=>true'readonly'=>true),
        
    'sql'                   => "int(10) NOT NULL"
    );

    /* KLASSE */

    class tl_member_club extends tl_member
    {
        
        public function 
    createMitgliedsnummer($value$dc)
        {
            
    // Keine Nummer erstellen, wenn ein Wert vorhanden ist.
            
    if ($value != '0')
            {
                return 
    $value;
            }

            
    // Neue Mitgliedsnummer generieren
            
    $value $this->Database->prepare("SELECT MAX(mitgliednr) FROM tl_member")->execute(); 
            return 
    $value++;
        }

    Danke :-)

  2. #2
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Und was passiert? Der maximale Wert aus der Datenbank wird zurückgegeben, nicht der um 1 erhöhte? Dann ersetze "$value++" mal durch "++$value".

  3. #3
    Contao-Nutzer
    Registriert seit
    06.02.2017.
    Beiträge
    11

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Und was passiert? Der maximale Wert aus der Datenbank wird zurückgegeben, nicht der um 1 erhöhte? Dann ersetze "$value++" mal durch "++$value".
    Es wird scheinbar gar nichts zurückgegeben. Das Feld ist einfach leer, obwohl in der Tabelle Einträge enthalten sind.

    Auch wenn ich
    PHP-Code:
    return $value
    schreibe wird nichts zurückgegeben.


    Nehme ich die DB Abfrage raus und ersetze die einfach mal durch
    PHP-Code:
    $value 5
    wird auch wie erwartet 5 zurückgegeben.
    Geändert von AM72 (06.02.2017 um 14:06 Uhr)

  4. #4
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.452
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich hab das so gemacht: https://github.com/rsclg/RscClubMemb...ember.php#L278

    Quasi nach dem Execute den DB Cursor noch auf den ersten Datensatz im ResultSet gesetzt und mit dem Alias rausgeholt.

    Gruß, Cliff

  5. #5
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Die Datenbankabfrage habe ich mir jetzt nicht angeschaut, jedenfalls musst du aber $value inkrementieren BEVOR du den Wert zurückgibst, bei $value++ wird der Wert von $value zurückgegeben und erst danach $value inkrementiert.

  6. #6
    Contao-Nutzer
    Registriert seit
    06.02.2017.
    Beiträge
    11

    Standard

    DANKE Cliff ... damit hat es super funktioniert.

  7. #7
    Contao-Nutzer
    Registriert seit
    06.02.2017.
    Beiträge
    11

    Standard

    Eine Frage habe ich dann noch. Bei
    PHP-Code:
    'readonly'=>true 
    , schreibt den Wert nicht in die Datenbank. Gibt es einen Befehl, wo der Benutzer den Wert nicht ändern, aber sehen, kann, aber dieser trotzdem dieser in die DB geschrieben wird?

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

    Standard

    Warum so kompliziert? Einfach mit ins SQL...

    PHP-Code:
    SELECT (max(xt_club_membernumber) +1) as max FROM tl_member 
    Warum das bei readonly allerdings ist, verstehe ich nicht. Eigentlich sollte das schon klappen. Ich speichere mir das aber lieber selbst in meine Tabelle weg (also eine eigene query).

  9. #9
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.452
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von PaddySD Beitrag anzeigen
    Warum so kompliziert? Einfach mit ins SQL...

    PHP-Code:
    SELECT (max(xt_club_membernumber) +1) as max FROM tl_member 
    Ja. Eine weitere Möglichkeit von vielen, den nächsten Wert zu ermitteln.

    Zum readonly:

    Wenn ich das richtig sehe werden readonly und disabled gleich behandelt: https://github.com/contao/core/blob/....php#L303-L306

    Daten werden nicht übertragen. Macht imho auch Sinn. Gespeichert wird, was verändert wurde ... da readonly und disabled Felder nicht vom User geändert werden können, braucht man sie nicht speichern.

    Lösen könnte man das mittels onsubmit_callback. Siehe dazu hier: https://github.com/contao/core/blob/...member.php#L23


    Hinweis: ich hab das Feld bearbeitbar gelassen, weil es immer wieder vorkam, dass die Nummern schon vor dem Eintragen im System vergeben wurde ... oder die gerade nächste nicht verwendet werden sollte ... für solche Fälle muss man bei einem gesperrten Feld immer die Änderung in der DB vornehmen.

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

    Standard

    Zitat Zitat von cliffen Beitrag anzeigen
    [...]

    Wenn ich das richtig sehe werden readonly und disabled gleich behandelt: https://github.com/contao/core/blob/....php#L303-L306

    Daten werden nicht übertragen. Macht imho auch Sinn. Gespeichert wird, was verändert wurde ... da readonly und disabled Felder nicht vom User geändert werden können, braucht man sie nicht speichern.
    [...]
    Vielleicht bin ich ja noch nicht ganz wach, aber da steht doch eher, dass der Wert nicht übertragen wird, wenn er leer ist, oder sehe ich das falsch???

    Cliffen, Du verwirrst mich

  11. #11
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.452
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hmmm, das steht "wenn $varValue true ist setze $blnSubmitInput auf false" ...

    Und "$blnSubmitInput" wird dann wiederum geprüft in DataContainer ...

    Richtig ???

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
  •