Contao-Camp 2024
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 59

Thema: tl_member erweitern

  1. #1
    Contao-Nutzer
    Registriert seit
    24.01.2016.
    Beiträge
    8

    Standard tl_member erweitern

    Hallo liebe Contaofreunde,

    in der tl_member soll das Feld gender hinzugefügt werden.

    warum funktioniert

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    '{personal_legend},firstname,lastname,dateOfBirth;{address_legend:hide},company,street,postal,city,state,country;{contact_legend},phone,mobile,fax,email,website,language;{groups_legend},groups;{login_legend},login;{homedir_legend:hide},assignDir;{account_legend},disable,start,stop',
        
    '{personal_legend},firstname,lastname,dateOfBirth,gender;{address_legend:hide},company,street,postal,city,state,country;{contact_legend},phone,mobile,fax,email,website,language;{groups_legend},groups;{login_legend},login;{homedir_legend:hide},assignDir;{account_legend},disable,start,stop',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    ); 
    nicht?

    (Der Grund warum der komplette String genommen wird ist der, weil noch mehrere Felder hinzukommen und es vielleicht mit einem str_replace geht. Es ist mir klar, dass
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    'dateOfBirth',
        
    'dateOfBirth,gender;',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    ); 
    funktioniert)

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

    Standard

    Ich denke mal, daß eine andere Erweiterung bereits eine Ersetzung vorgenommen hat und der String deshalb nicht mehr matcht.
    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

  3. #3
    Contao-Nutzer
    Registriert seit
    24.01.2016.
    Beiträge
    8

    Standard

    Mann muss in diesem Fall gar nicht str_replace benutzen!

    Geht einfach mit

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = '{personal_legend},firstname,lastname,dateOfBirth,gender;{address_legend:hide},company,street,postal,city,state,country;{contact_legend},phone,mobile,fax,email,website,language;{groups_legend},groups;{login_legend},login;{homedir_legend:hide},assignDir;{account_legend},disable,start,stop'
    Viele Grüße,
    Peter

  4. #4
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Dann hast Du aber evtl. das Problem, daß Du Änderungen, die Anne andere Extension gemacht haben könnte (siehe Kommentar von Samson1964) zerstörst, weil Du sie einfach mit Deinem Wert überschreibst.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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

    Support Contao

    Standard

    Das ist ja auch der einzige Sinn des str_replace. Klar kann ich mir den globalen Wert direkt so schreiben wie ich ihn für meine Erweiterung brauche. Aber nur, solange das sicher die einzige Erweiterung ist (und auch bleibt!), die tl_member ändern/erweitern will.

    Edit: Und natürlich muss man dann auch nach einem eventuellen Contao-Update kontrollieren, ob das dann für den Core noch passt. Der könnte ja auch mal neue Felder hinzufügen/löschen/ändern.
    Geändert von tab (05.03.2016 um 14:45 Uhr)

  6. #6
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du solltest das Hinzufügen des Feldes so machen:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    ',dateOfBirth',
        
    ',dateOfBirth,gender',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    ); 
    Weil jedes Feld besitzt ein führendes Komma - ",myField". Die Semikolons solltest du nicht ersetzen. Könnte sein, dass das zweite Beispiel aus deinem ersten Post deswegen nicht funktioniert.

    Diese Lösung funktioniert nat. nur dann, wenn das Feld "dateOfBirth" auch noch vorhanden ist.

    Um ganz sicher zu gehen kannst du das eigentlich nur so machen:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] .= '{myown_legend},gender';
    // oder
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = '{myown_legend},gender;'.$GLOBALS['TL_DCA']['tl_member']['palettes']['default']; 
    Mich wundert allerdings, dass du das Feld gender überhaupt dort hinzufügen möchtest, da es doch schon vorhanden ist!? Hat das vielleicht schon jemand entfernt?
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  7. #7
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Frage Über Modul Spalte 'customer_number' in Tabelle 'tl_member' erstellen

    Zitat Zitat von Pet Beitrag anzeigen
    in der tl_member soll das Feld hinzugefügt werden.
    Hallo alle
    Ich wollte in contao 3.5.12 das Feld customer_number in die Mitgliedertabelle hinzufügen und gehe nach der Contao-Anleitung Eigene Felder hinzufügen vor. Entsprechend nachstehende Anleitung wird zwar bei Mitglieder > Personendaten das Feld Kundennummer angezeigt, doch beim Eintragen bzw. beim Speichern von Mitgliederdaten erscheint die Fehlermeldung Query error: Unknown column 'customer_number' in 'field list' (UPDATE tl_member SET customer_number='999' WHERE id='5'). In der Datenbank ist in der Tabelle tl_member dann auch keine Spalte customer_number zu finden.
    30-04-_2016_13-44-20.png

    /contao/install.php ergibt ein seltsames Bild - es scheint, als sei system/modules/zusatz_member/dca/tl_member.php nicht korrekt:
    30-04-_2016_13-12-18.png

    Wo liegt der Fehler?

    Was ich zuvor gemacht habe:

    [1] Im Verzeichnis system/modules/ den Modulordner zusatz_member angelegt.
    [2] Im Verzeichnis system/modules/zusatz_member/ den Ordner dca angelegt.
    [3] Im Verzeichnis system/modules/zusatz_member/dca/ die Datei tl_member.php angelegt und gemäss Anleitung mit dem Code gefüllt:


    PHP-Code:
    // Anpassung der Palette
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    'company',
        
    'customer_number,company',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    );

    // Hinzufügen der Feld-Konfiguration
    $GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['customer_number'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8),
        
    'sql'       => "varchar(8) NOT NULL default ''"
    ); 
    [4] Im Verzeichnis system/modules/zusatz_member/ den Ordner languages angelegt.
    [5] Im Verzeichnis system/modules/zusatz_member/languages/ den Ordner de angelegt.
    [6] Im Verzeichnis system/modules/zusatz_member/languages/de/ die Datei tl_member.php angelegt und gemäss Anleitung mit dem Code gefüllt.


    PHP-Code:
    $GLOBALS['TL_LANG']['tl_member']['customer_number'] = array
    (
        
    'Kundennummer',
        
    'Bitte geben Sie die 8-stellige Kundennummer ein.'
    ); 
    [7] Unter Sytemwartung den Cache geleert und neu aufgebaut
    [8] Auf dem Web /contao/install.php aufgerufen, um die Datenbank zu aktualisieren
    Geändert von merlincom (30.04.2016 um 13:51 Uhr)

  8. #8
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Mach halt mal ein DB Update in Contao!
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  9. #9
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    /contao/install.php ergibt ein seltsames Bild - es scheint, als sei system/modules/zusatz_member/dca/tl_member.php nicht korrekt:
    30-04-_2016_13-12-18.png
    Wenn der PHP Code im Output zu lesen ist fehlt Dir wohl das öffnende <?php in der Datei.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  10. #10
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    HTML

    Zitat Zitat von fiedsch Beitrag anzeigen
    fehlt Dir wohl das öffnende <?php in der Datei.
    Hallo fiedsch
    Das war der richtige Hinweis! Danke für die rasche Antwort.


    Eine Frage noch:
    Wenn ich mir nach dem Aufruf [meine URL]/contao/install.php die vom Modul neu angelegte Spalte customer_number in der tl_member in phpMyAdmin direkt ansehe, verstehe ich unter der Rubrik Standard den Eintrag Wie definiert und das darunterstehende leere Eingabefeld nicht (siehe Screenshot).
    30-04-_2016_15-33-54.png

    Zur Lösung des ursprünglichen Problems:
    Offensichtlich ist das öffnende <?php und schliessende ?> in der Datei system/modules/zusatz_member/dca/tl_member.php notwendig.
    Korrekt sieht die Datei nun so aus:

    PHP-Code:
    <?php
    // Anpassung der Palette
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] = str_replace
    (
        
    'company',
        
    'customer_number,company',
        
    $GLOBALS['TL_DCA']['tl_member']['palettes']['default']
    );

    // Hinzufügen der Feld-Konfiguration
    $GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['customer_number'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8),
        
    'sql'       => "varchar(8) NOT NULL default ''"
    );
    ?>
    Im Gegensatz dazu scheint das in system/modules/zusatz_member/languages/de/tl_member.php nicht notwendig.
    Gruss von Marcel aus Basel

  11. #11
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von merlincom Beitrag anzeigen
    Eine Frage noch:
    Wenn ich mir nach dem Aufruf [meine URL]/contao/install.php die vom Modul neu angelegte Spalte customer_number in der tl_member in phpMyAdmin direkt ansehe, verstehe ich unter der Rubrik Standard den Eintrag Wie definiert und das darunterstehende leere Eingabefeld nicht (siehe Screenshot).
    30-04-_2016_15-33-54.png
    Falls noch jemand mitliest: Ich vermute inzwischen, dass der Eintrag Standard in der Tabelle tl_member die Eingabekriterien enthält aus der Zeile 'eval' => array('mandatory'=>true, 'rgxp'=>'digit', 'maxlength'=>8) der im Modul system/modules/zusatz_member/dca/tl_member.php neu angelegten Spalte customer_number.

    PHP-Code:
    <?php
    // Hinzufügen der Feld-Konfiguration
    $GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['customer_number'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8),
        
    'sql'       => "varchar(8) NOT NULL default ''"
    );
    ?>
    Danke für Rückmeldung
    Marcel

  12. #12
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Das "Standard" bezieht sich auf das sql Bereich

    PHP-Code:
    'sql'       => "varchar(8) NOT NULL default ''" 
    Also in dem Fall soll in dem Feld customer_number immer ein leerer Wert stehen. Alternativ könnte man das Feld entweder über PHPMyadmin wie in deinem screenshot oder eben über den sql Bereich im DCA automatisch mit einem vorgegebenen Wert befüllen. Es hat also nichts mit den eval-Werten etc. zu tun!
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  13. #13
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Das "Standard" bezieht sich auf das sql Bereich
    PHP-Code:
    'sql' => "varchar(8) NOT NULL default ''" 
    … also nichts mit den eval-Werten etc. zu tun!
    Danke Scrat für die Info.
    Ich bin deshalb verwirrt, weil normalerweise im Feld Standard 'Kein(e)' steht und nicht wie im Falle der vom Contao-Moduls erstellten Spalte customer_number 'Wie definiert' (vgl. Screenshot aus einem anderern Beispiel mit in phpMyAdmin direkt erstellter Spalte)
    2016-05-03 08_47_20-MySQL.jpg
    30-04-_2016_15-33-54.png
    Die Suchmaschinenanfrage hat mich in dieser Sache nicht weitergebracht und ich weiss nicht, welche Bedeutung dieser Eintrag hat und worauf er sich bezieht.
    Marcel

  14. #14
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Naja '' ist eine Definition! Und "nichts" ist halt "nichts". Ist doch vollkommen egal. Jedenfalls hat es nichts mit irgendwelchen Vorgaben vom eval zu tun.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  15. #15
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Frage DropDown-Menü anlegen mit unterschiedlichen Namen und Werten

    Ich möchte ein Selectfeld anlegen mit drei Optionen (Alternativ stellt sich dieselbe Frage bei Radiobuttons). In HTML müsste dies dann wie folgt aussehen:

    HTML-Code:
    <select name="company_adress_prefered" size="8">
    <option value="1">Ja</option>
    <option value="2">Nein</option>
    <option value="3">Weiss nicht</option>
    </select>
    Nun weiss ich nicht, wie dies im Modul zu bewerkstelligen ist. Die m.E. unschöne Lösung ist, 'Ja', 'Nein' oder 'Weiss nicht' als String in die DB zu schreiben.
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['company_adress_prefered'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['company_adress_prefered'],
        
    'exclude'   => true,
        
    'inputType' => 'select',
        
    'options' => array('Ja','Nein','Weiss nicht'),
        
    'eval'      => array('mandatory'=>false'rgxp'=>'extnd''maxlength'=>16),
        
    'sql'       => "varchar(16) NOT NULL default ''"
    ); 
    Ich jedoch würde lieber den Wert (Value) als Int in die DB schreiben. Hilft da input_field_callback weiter und wie sähe der Code für 'option' aus?
    Geändert von merlincom (03.05.2016 um 10:07 Uhr)

  16. #16
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['company_adress_prefered'] = array 

        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['company_adress_prefered'], 
        
    'exclude'   => true
        
    'inputType' => 'select'
        
    'options' => array(0=>'Ja',1=>'Nein',2=>'Weiss nicht'), 
        
    'eval'      => array('mandatory'=>false), 
        
    'sql'       => "varchar(16) NOT NULL default ''" 
    ); 
    Der Input_field_callback hat damit überhaupt nichts zu tun!
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  17. #17
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    PHP-Code:
        'options' => array(0=>'Ja',1=>'Nein',2=>'Weiss nicht'), 
    Danke Scrat für deine Geduld
    Ich bin am Contao-verstehen-lernen und suche jeweils - bevor ich hier eine Frage stelle - hier im Forum, in der Contao-Anleitung oder via Suchmaschine selber nach Lösungen. Gelegentlich bleibe ich jedoch im Datendschungel hilflos stecken, komme auf Irrwege ab und benötige dann eine Orientierungshilfe bzw. Hilfe zur Selbsthilfe
    Im Gegenzug versuche ich, hier die Fragen und dazugehörenden Lösungen für andere Personen möglichst verständlich darzustellen.

    Ich nehme an, dass es Sinn macht, nun die Daten auch in einen Integer- und nicht mehr in einen Varchar-Wert zu speichern (rgxp und maxlength kann man ja jetzt wohl weglassen):

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['company_adress_prefered'] = array
    (
         
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['company_adress_prefered'],
         
    'exclude'   => true,
         
    'inputType' => 'select',
         
    'options' => array(0=>'Ja',1=>'Nein',2=>'Weiss nicht'),
         
    'eval'      => array('mandatory'=>false),
         
    /* Nachrägliche Aenderung 
         'sql'       => "int NOT NULL default ''"  
         Diese Zeile ist falsch! */
         /* Korrekturhinweis von Scrat. Danke. */
         
    'sql'       => "int(10) unsigned NOT NULL default '0'"  
    ); 
    Was müsste ich schreiben, damit - nur wenn der User noch keinen Wert eingegeben hat - jeweils 'Weiss nicht' selected ist?
    HTML-Code:
    <option value="3" selected>Weiss nicht</option>
    Geändert von merlincom (04.05.2016 um 14:36 Uhr)

  18. #18
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Also so wie du das sql im Moment hast, wird es nicht funktionieren

    Wenn dann müsste es so sein
    PHP-Code:
     'sql'                     => "int(10) unsigned NOT NULL default '0'" 
    Um das Feld zu selekieren kannst du das über den Parameter 'default' machen

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['company_adress_prefered'] = array 

        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['company_adress_prefered'], 
        
    'exclude'   => true
        
    'inputType' => 'select'
        
    'default' => 2// wert vom "weiss nicht"
        
    'options' => array(array(0=>'Ja',1=>'Nein',2=>'Weiss nicht')), 
        
    'eval'      => array('mandatory'=>false), 
    'sql'                     => "int(10) unsigned NOT NULL default '0'"
    ); 
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  19. #19
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    so wie du das sql im Moment hast, wird es nicht funktionieren
    Weshalb kommt bei int(10) die Zehn in die Klammer und wo wäre das Manual dafür zu finden?
    Direkt in phpMyAdmin eröffne ich eine neue Spalte mit dem SQL-Befehl:
    Code:
    ALTER TABLE `tl_member` ADD `company_adress_prefered` INT NOT NULL;
    Dann meine (vorläufig) letzte Frage. Wie sieht es aus mit?
    Code:
    'sql'       => "text NOT NULL default ''";
    und
    Code:
    'sql'       => "date NOT NULL default ''";

  20. #20
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Die int(10) hab ich jetzt nur mal genommen, weil ich es so in einer dca gerad kopiert hab, du kannst auch int(2) machen wenn dich das glücklich macht oder du nicht mehr brauchst :-)

    Orientiere dich am besten einfach an anderen DCA Feldern, wie die das haben. Ansonsten schau dir einfach mal das MySQL Handbuch an, dort sollte drin stehen, welche Angaben nötig sind.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  21. #21
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von merlincom Beitrag anzeigen
    Weshalb kommt bei int(10) die Zehn in die Klammer und wo wäre das Manual dafür zu finden?
    Das ist die display width. Siehe z.B. http://dev.mysql.com/doc/refman/5.7/...ttributes.html
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  22. #22
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    HTML

    Zitat Zitat von merlincom Beitrag anzeigen
    Ich bin deshalb verwirrt, weil normalerweise im Feld Standard 'Kein(e)' steht und nicht wie im Falle der vom Contao-Moduls erstellten Spalte customer_number 'Wie definiert' (vgl. Screenshot aus einem anderern Beispiel mit in phpMyAdmin direkt erstellter Spalte)
    2016-05-03 08_47_20-MySQL.jpg
    30-04-_2016_15-33-54.png
    Nun bin ich auch hier einen Schritt weitergekommen. Es reicht völlig - und Standard erscheint später mit Keine(e) -, wenn man "default ''" weglässt und nur eingibt:

    PHP-Code:
    // Hinzufügen der Feld-Konfiguration
    $GLOBALS['TL_DCA']['tl_member']['fields']['customer_number'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['customer_number'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8),
        
    //'sql'       => "varchar(8) NOT NULL default ''"
        
    'sql'       => "varchar(8) NOT NULL"
    ); 
    Dabei habe ich garade festgestellt, dass beim Aufruf der [url]/contao/install.php der verwendete SQL angezeigt wird:
    2016-05-03 13_41_08-Installation - Contao Open Source CMS 3.jpg

  23. #23
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Warum bleibst du jetzt nicht bei int(8) weil max ja nur 8 ziffern erlaubt sind.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  24. #24
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Frage Problem mit Datum

    Wenn ich in sql anstelle von varchar(12) (so funktionierts) für ein Datum date nehme, wird zwar die Spalte customer_begin in der Tabelle tl_member korret erstellt, aber beim Aufruf Mitglieder > neues Mitglied erhalte ich folgende Fehlermeldung (egal, ob schon oder noch kein kein Mitglied in der Tabelle angelegt ist).

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['customer_begin'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['customer_begin'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>false'rgxp'=>'date''datepicker'=>true'maxlength'=>12),
        
    //'sql'       => "varchar(12) NOT NULL"  //Funktioniert, ist aber eher unschön
        
    'sql'       => "date NOT NULL default '0000-00-00"  //Fehlermeldung beim Aufruf eines Mitglieds
    ); 
    Code:
    Fatal error: Uncaught exception OutOfBoundsException with message Invalid date "0000-00-00" thrown in system/modules/core/library/Contao/Date.php on line 438
    
    #0 system/modules/core/library/Contao/Date.php(79): Contao\Date->dateToUnix()
    #1 system/modules/core/library/Contao/Widget.php(1462): Contao\Date->__construct('0000-00-00', 'd.m.Y')
    #2 system/modules/core/classes/DataContainer.php(265): Contao\Widget::getAttributesFromDca(Array, 'customer_begin', '0000-00-00', 'customer_begin', 'tl_member', Object(Contao\DC_Table))
    #3 system/modules/core/drivers/DC_Table.php(1951): Contao\DataContainer->row('{personal_legen...')
    #4 system/modules/core/classes/Backend.php(650): Contao\DC_Table->edit()
    #5 system/modules/core/controllers/BackendMain.php(131): Contao\Backend->getBackendModule('member')
    #6 contao/main.php(20): Contao\BackendMain->run()
    #7 {main}
    In Date.php steht:
    PHP-Code:
    // Validate the date (see #5086 and #7955)
    if (!is_numeric($intMonth) || !is_numeric($intDay) || !is_numeric($intYear) || checkdate($intMonth$intDay$intYear) === false)
    {
        throw new \
    OutOfBoundsException(sprintf('Invalid date "%s"'$this->strDate));

    Natürlich habe ich mir #5086 and #7955 angesehen, bin aber nicht klüger geworden, was zu tun wäre. Verwendet deswegen Contao 3.6.12 selber in der tl_member für dateOfBirth den Typ varchar(11). um das Problem zu umgehen?
    Geändert von merlincom (13.12.2018 um 12:11 Uhr)

  25. #25
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    //'sql'       => "varchar(12) NOT NULL"  //Funktioniert, ist aber eher unschön 
    Und wieso ist das "unschön"?

    Und wie kommst du darauf, dass 'date' das richtige sql dafür wäre? Nutz doch einfach das, was eh schon vorhanden ist. Am besten schaust du dazu in die tl_member.php (/system/modules/core/dca) und orientierst dich an Feldern, die das so machen wie du es gerne hättest.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  26. #26
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Warum bleibst du jetzt nicht bei int(8) weil max ja nur 8 ziffern erlaubt sind.
    Hallo Scrat
    Ich hab schon verstanden, bin bloss am Ausprobieren und kann nicht alles auf einmal

  27. #27
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Contao benutzt den Feld-Typ date nicht. Datumsangaben werden in Contao als unix-timestamp gespeichert, damit kann man sehr gut rechnen und auch in ein lesbares Datum umwandeln. Deswegen varchar(11).
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  28. #28
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Frage Unterschiedliche Values und Namen in Options

    Hallo Scrat
    Bei mir funktionierts leider nicht (V 3.5.12). Wo hast du das Beispiel gesehen? Ich hab in system/modules/core/dca/ nichts entsprechendes in den Dateien gefunden.
    [QUOTE=the_scrat;407448]
    PHP-Code:
    'options' => array(0=>'Ja',1=>'Nein',2=>'Weiss nicht'), 
    [QUOTE]
    Value und Bezeichnung bleiben trotzdem identisch. Der Quelltext im Browser lautet:
    HTML-Code:
    <option value="Ja">Ja</option><option value="Nein">Nein</option><option value="Weiss nicht">Weiss nicht</option>
    Grafisch ist natürlich im Browser davon nichts zu erkennen:
    04-05-_2016_14-48-52.png
    Nicht Abhilfe schaffen kann auch nicht
    PHP-Code:
    'options' => array(array(0=>'Ja',1=>'Nein',2=>'Weiss nicht')), 
    Hier sieht das Ergebnis noch kurioser aus:
    04-05-_2016_14-14-31.png
    Hier entseht plötzlich eine Optgroup
    HTML-Code:
    <select><optgroup label="&nbsp;0"><option value="Ja">Ja</option>
    Was nun?
    Geändert von merlincom (04.05.2016 um 15:05 Uhr)

  29. #29
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Dann probiers mal so:

    PHP-Code:
    'options' => array('1'=>'Ja','2'=>'Nein','3'=>'Weiss nicht'), 
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  30. #30
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    PHP-Code:
    'options' => array('1'=>'Ja','2'=>'Nein','3'=>'Weiss nicht'), 
    … führt leider zum selben falschen Resultat.
    Ich schätze jetzt mal, dass - da der Code selber zu keiner Fehlermeldung führt - das Array zwar gelesen, das Schlüsselpaar aber nicht korrekt eingesetzt wird.
    Müsste irgendwo so etwa wie folgendes heissen:
    PHP-Code:
    foreach ($options as $key => $value) {
        echo 
    '<option value="'.$key .'">'.$value.'</option>'

    Bloss, wo verbirgt sich der PHP-Code, der für den Aufbau des Select-Feldes bzw. die Options verantwortlich ist?
    PS: Baue selbstverständlich nach jeder Änderung des Programmcods den Cache neu auf.
    Geändert von merlincom (04.05.2016 um 16:10 Uhr)

  31. #31
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Dann speichere halt einfach die Werte ab und fertig, warum willst du die indexwerte speichern?

    Zitat Zitat von merlincom Beitrag anzeigen
    PHP-Code:
    foreach ($options as $key => $value) {
        echo 
    '<option value="'.$key .'">'.$value.'</option>'

    Bloss, wo verbirgt sich der PHP-Code, der für den Aufbau des Select-Feldes bzw. die Options verantwortlich ist?
    Der befindet sich im Core. Dafür gibt es ja die DCA, damit man durch einfache Strukturierung so ein Selectfeld erzeugen kann.

    Zitat Zitat von merlincom Beitrag anzeigen
    PS: Baue selbstverständlich nach jeder Änderung des Programmcods den Cache neu auf.
    Schalt den Cache doch einfach komplett aus, dann brauchst du ihn nicht aufbauen!
    Geändert von the_scrat (04.05.2016 um 16:23 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  32. #32
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Dass dies nicht geht
    PHP-Code:
    'options' => array(=> 'Ja'=> 'Nein'=> 'Weiss nicht'), 
    müsste eigentlich klar sein, weil dies das Gleiche ist wie
    PHP-Code:
    'options' => array('Ja''Nein''Weiss nicht'), 
    Aber das hier müsste eigentlich funktionieren
    PHP-Code:
    'options' => array('0' => 'Ja''1' => 'Nein''2' => 'Weiss nicht'), 
    Das wird auch hier angewendet https://github.com/contao/core/blob/..._feed.php#L164
    Und dann steht rss in dem Feld in der DB.

    Kann allerdings sein, dass irgendwas aus den Strings '0' usw. wieder einen Integer macht, bevor es in der DB landet.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  33. #33
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Dafür gibt es ja die DCA, damit man durch einfache Strukturierung so ein Selectfeld erzeugen kann
    Danke für den Hinweis. Ich habe FormSelectMenue.php gefunden und ich nehme an, es handelt sich um die Zeilen um 255
    PHP-Code:
                $arrOptions[] = array
                    (
                        
    'type'     => 'option',
                        
    'value'    => $arrOption['value'],
                        
    'selected' => $this->isSelected($arrOption),
                        
    'label'    => $arrOption['label'],
                    ); 
    Es scheint ein Problem zu sein, wenn in options Zahlen stehen, selbst dann, wenn diese in Anführungszeichen gesetzt werden. Wo dieses Problem aber begründet ist, habe ich nicht herausgefunden.
    Nehme ich einen String mit Buchstaben, dann funktioniert es:
    PHP-Code:
    'options'   => array('Hallo'=> 'Nein''Velo'=>'Ja'), 
    ergibt im Quelltext des Browsers korrekt
    HTML-Code:
    <option value="Hallo">Nein</option><option value="Velo">Ja</option>
    Und sorry, falls ich mit meinen Fragen nerve. Programmieren ist nicht mein Beruf, sondern mein Hobby. In HTML, CSS, PHP und jQuery bin ich mit meinen 59 Jahren) eigentlich ganz fit. Mit der Objektprogrammierung haperts aber und an das DCA-Modell taste ich mich gerade eben heran. Deshalb muss ich mich auf Handbücher und das Forum verlassen. Am Ende geht es mir darum, die Sachen korrekt zu verstehen und nicht um die schnelle Lösung. Und was bisher für mich einfach händisch in PHP auf eine SQL-fähige DB zu programmieren war, erweist sich in Contao als neue Herausforderung. Und last but not least finde ich es schade, dass die Mitgliederverwaltung von Contao keine Unterteilung von Privat- und Firmenadresse macht. Darum habe ich mir vorgenommen, die bestehenden Felder zu erweitern. Derzeit sieht es schon so aus (zusätzlich zu den bestehenden Feldern):
    04-05-_2016_17-20-05.png
    Der nächste Schritt ist, diese Firmendaten von den privaten Adressdaten optisch zu trennen und in einer eigenen Rubrik anzuzeigen. Später dann wird es darum gehen, dass die Mitglieder die Adressdaten im Fontend selber ergänzen bzw. ändern können. Wenn dies dann gelungen ist, können alle davon profitieren, so das Ziel.
    Geändert von merlincom (04.05.2016 um 18:31 Uhr)

  34. #34
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    HTML

    Zitat Zitat von Andreas Beitrag anzeigen
    Kann allerdings sein, dass irgendwas aus den Strings '0' usw. wieder einen Integer macht, bevor es in der DB landet.
    Hallo Andreas, dass muss des Pudels Kern sein ;-)

  35. #35
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Aber das hier müsste eigentlich funktionieren
    PHP-Code:
    'options' => array('0' => 'Ja''1' => 'Nein''2' => 'Weiss nicht'), 
    Das wird auch hier angewendet https://github.com/contao/core/blob/..._feed.php#L164
    Und dann steht rss in dem Feld in der DB.

    Kann allerdings sein, dass irgendwas aus den Strings '0' usw. wieder einen Integer macht, bevor es in der DB landet.
    Ich vermute mal, dass ein numerischer Wert einfach immer als ganz normaler arrayindex verarbeitet wird, ähnlich wie $array[0] (was ja das gleiche wie $array[] ist). Und erst wenn kein numerischer Wert genutzt wird, wird dieser auch verarbeitet
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  36. #36
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    @the_scrat: Du meinst also, dass diese beiden Zeilen das gleiche Ergebnis liefern
    PHP-Code:
    array['2'] = 'test';
    array[
    2]   = 'test'
    Also dass der Key dann nicht mehr als String erkannt wird. Kannste ja mal ausprobieren, weiß ich grad nicht.

    Aber trotzdem muss ja irgendwo die Entscheidung getroffen werden: Es kommt ein assoziatives Array also nehme ich den Schlüssel als VALUE, es kommt ein numerisches Array jetzt nehme ich den Wert als VALUE.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  37. #37
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Tatsache

    PHP-Code:
    $array1[2] = 'test';
    $array2["2"] = 'test';
    $array3["key"] = 'test';
    var_dump($array1);
    var_dump($array2);
    var_dump($array3); 
    ergibt
    Code:
    array(1) {   [2]=>   string(4) "test" } 
    array(1) {   [2]=>   string(4) "test" } 
    array(1) {   ["key"]=>   string(4) "test" }
    Damit ist auch klar, warum es nicht geht, es wird immer ein numerischer Index! Daher ist es im obigen Fall auch "rss" und "atom" und keine Zahl
    Geändert von the_scrat (04.05.2016 um 18:06 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  38. #38
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    So, ich glaub ich hab die Lösung.

    https://github.com/contao/core/blob/...dget.php#L1428

    Es gibt wohl noch einen secret (nicht dokumentierten evaluation key).
    ['eval']['isAssociative']
    Damit müsste Contao gezwungen werden auch eine Ziffer als String zu behandeln bzw. zu speichern.

    Entscheidend ist diese Zeile
    PHP-Code:
    $arrAttributes['options'][] = array('value'=>($blnIsAssociative $k $v), 'label'=>($blnUseReference ? ((($ref = (is_array($arrData['reference'][$v]) ? $arrData['reference'][$v][0] : $arrData['reference'][$v])) != false) ? $ref $v) : $v)); 
    Hier wird entweder der $k oder $v dem value zugewiesen.

    @merlincom
    Mach mal bitte folgendes

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['company_adress_prefered'] = array 

        
    'label'     => &$GLOBALS['TL_LANG']['tl_member']['company_adress_prefered'], 
        
    'exclude'   => true
        
    'inputType' => 'select'
        
    'options'   => array(0=>'Ja',1=>'Nein',2=>'Weiss nicht'), 
        
    'eval'      => array('mandatory'=>false'isAssociative'=>true), 
        
    'sql'       => "varchar(16) NOT NULL default ''" 
    ); 
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  39. #39
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    So, ich glaub ich hab die Lösung.
    [PHP 'eval' => array('mandatory'=>false, 'isAssociative'=>true),[/PHP]
    Heureka! Das ist die Lösung:
    Das Ergebnis lautet im Browser-Quelltext nun korrekt:
    HTML-Code:
    <option value="0" selected="">Ja</option><option value="1">Nein</option><option value="2">Weiss nicht</option>
    Danke Euch beiden Scrat und Andreas für euer Engagement.
    Marcel, Gruss aus Basel - heute wegen Contao bei bestem Motorradwetter auf Ausflug verzichtet

  40. #40
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Hier wird entweder der $k oder $v dem value zugewiesen.
    Wow, super rausgefunden

    Wenn das jetzt noch jemand in die Docs bringen würde https://docs.contao.org/books/api/dc...tml#evaluation
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 2 (Registrierte Benutzer: 0, Gäste: 2)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •