Liste der Anhänge anzeigen (Anzahl: 2)
Über Modul Spalte 'customer_number' in Tabelle 'tl_member' erstellen
Zitat:
Zitat von
Pet
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.
Anhang 17665
/contao/install.php ergibt ein seltsames Bild - es scheint, als sei system/modules/zusatz_member/dca/tl_member.php nicht korrekt:
Anhang 17664
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
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
fiedsch
fehlt Dir wohl das öffnende <?php in der Datei.
Hallo fiedsch
Das war der richtige Hinweis! Danke für die rasche Antwort.
:D:D:D
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).
Anhang 17666
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
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
the_scrat
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)
Anhang 17677
Anhang 17666
Die Suchmaschinenanfrage hat mich in dieser Sache nicht weitergebracht und ich weiss nicht, welche Bedeutung dieser Eintrag hat und worauf er sich bezieht.
Marcel
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?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
merlincom
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)
Anhang 17677
Anhang 17666
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:
Anhang 17681
Liste der Anhänge anzeigen (Anzahl: 2)
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:
Anhang 17687
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:
Anhang 17688
Hier entseht plötzlich eine Optgroup
HTML-Code:
<select><optgroup label=" 0"><option value="Ja">Ja</option>
Was nun?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
the_scrat
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):
Anhang 17690
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.