Zitat von
cliffparnitzky
Contao 4.13.34
PHP 8.1
Hallo Cliff,
ich hoffe, es ist in Ordnung, wenn ich das Thema mal aufgreife.
Ich habe über die DCA in der tl_member ein neues Feld Kundennummer hinzugefügt und es mit Hilfe deines Posts auch geschafft, eine fortlaufende Kundennummer zu generieren. Dafür schonmal vielen Dank.
Die neue tl_member.php ist im Ordner contao/dca und den Prod.-Cache erneuere ich auch immer.
Allerdings klappt das nur, wenn ich im Backend einen Kunden neu anlege. Wenn ich über das Registrierungsformular einen neuen Kunden anlege (also eine Registrierung simuliere), speichert er zwar auch die neue, fortlaufende Kundennummer, aber ich weiß nicht wo. In der Datenbank wird immer die per default gesetzte 0 gespeichert.
Erst wenn ich den Kunden im Backend aufrufe und auf Speichern klicke, wird auch die Kundennummer gespeichert.
Kannst du mir einen Tipp geben, wie die Kundennummer auch direkt bei der Registrierung in der Datenbank gespeichert wird?
Ich habe es auch schon mit save_callback versucht, aber damit kenne ich mich nicht wirklich aus.
Den Code habe ich etwas verändert bzw. angepasst, da ich RscClubMember nicht nutze. Ich habe ganz oben und unten den letzten Teil mit "addDateAdded" weggelassen.
Zweimal habe ich noch RscClubMemberFields stehen. Muss ich das evt. durch was anderes ersetzen?
Aber wie schon gesagt, im Backend klappt es einwandfrei.
Schonmal vielen Dank und viele Grüße
Michael
HTML-Code:
$GLOBALS['TL_DCA']['tl_member']['fields']['customernumber'] = array(
'label' => array('Kundennummer','Wird automatisch vergeben.'),
'exclude' => true,
'search' => true,
'sorting' => true,
'flag' => DataContainer::SORT_INITIAL_LETTER_DESC,
'inputType' => 'text',
'eval' => array('feEditable' => false, 'feViewable' => false, 'feGroup' => 'address', 'tl_class' => 'clr w50', 'mandatory' => true, 'rgxp' => 'digit', 'unique' => true, 'alwaysSave' => true),
'load_callback' => array(array('RscClubMemberFields', 'getCustomerNumber')),
'sql' => "int(10) unsigned NOT NULL default '0'"
);
---------------------------------------------------------------------------
class RscClubMemberFields extends tl_member
{
/**
* Constructor, initialize the object.
*/
public function __construct() {
parent::__construct();
}
/**
* Returns the member number, if no one is set the next free number will be searched in database
*/
public function getCustomerNumber($varValue, DataContainer $dc) {
if ($varValue != null && $varValue > 0) {
return $varValue;
}
// seems there is not member number set, so select the next free number from database
$lastCustomerNumber = $this->Database->prepare("SELECT max(customernumber) as max FROM tl_member")->execute()->next()->max;
return $lastCustomerNumber + 1;
}
}
Lesezeichen