User Registrierung erweitern

Zu der Benutzerregistrierung sr_feuser_register sollten neue Felder dazukommen. Wie also in der Dokumentation zu der Extension beschrieben habe ich mit der EM mit dem Kickstarter eine neue Extension angelegt. Diese Extension konnte nichts anderes außer neue Felder in der Tabelle fe_users anzulegen. Da die vom Kickstarter automatisch generierten Spaltennamen zu lang sind, hab ich sie ein wenig geändert. Nach der Einrichtung und der Installation hatte die Extension die Tabelle um einige Felder erweitert: ein Eingabefeld, ein Auswahlfeld (Checkbox), einige Textfelder (längere Texte) und eine Drop-Down-Box (Auswahl).
Dann musste man nun noch das Template um die Felder erweitern und die Felder in die Konstanten reinschreiben, damit sie auch angezeigt werden.

Dann habe ich festgestellt, dass die Extension sr_feuser_register keine Ansicht bietet, es gibt ein Bearbeitungsformular, ein Formular zum Anlegen eines Accounts, aber keine Einstellung, um die gespeicherten Daten einfach nur anzuzeigen. Die Idee war, die eben angelegte Extension zu erweitern zu einem Frontend Plugin.
Im Kickstarter hatte ich die entsprechenden Einstellungen vorgenommen: Frontend Plugin als Typ und wieder neu schreiben lassen. Da ich die Spaltennamen vorher geändert hatte, musste ich die aus der alten Datei kopieren oder wieder ändern.

Man muss ja nichts neu erfinden: die Felder, die angezeigt werden sollen und das Template liefert ja schon sr_feuser_register, den Pfad zum Template sollte der Benutzer auch nicht zweimal eingeben müssen. Da diese Definition aber in den Konstanten steht, kann man einfach im Setup der eigenen Extension darauf zugreifen und verfügbar machen.

plugin.tx_npptafeuserregister_pi1 {
# copy stuff you need from sr_feuser_register
formFields = {$plugin.tx_srfeuserregister_pi1.formFields}
templateFile = {$plugin.tx_srfeuserregister_pi1.file.templateFile}
}

Dann sucht man sich aus dem Template von sr_feuser_register einen Teil aus, der gut passt, z.B. TEMPLATE_CREATE_PREVIEW. Dort stehen die Daten nicht in Input-Feldern, sondern einfach mit Labels untereinander. Das einzige was ein wenig stört, ist das Formular und die Buttons, aber wozu gibt es reguläre Ausdrücke?
Die Beschriftung der Buttons kann man auch von der sr_feuser_register „klauen“. Dazu brauche ich aber eine Instanz dieser Klasse, lade dort die Locallang rein und lasse mit die Labels übersetzen.
Weiterer Trick (danke Boris) ist die Locallang für die TCA reinzuladen und die Int-Werte durch die dazugehörigen Labels ersetzen zu lassen. Anschließend werden die unnötigen Labels entfernt.

// Klassenvariable
var $originalTemplateCode;
function main($content,$conf) {
global $TCA;
$this->conf=$conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();

$this->getTemplateCode();

$srpath = t3lib_extMgm::extPath(’sr_feuser_register‘);
$srpath.= ‚pi1/class.tx_srfeuserregister_pi1.php‘;
require_once($srpath);
$srclass = t3lib_div::makeInstance(‚tx_srfeuserregister_pi1′);
$srclass->pi_loadLL();

$dbllfile = file_get_contents(t3lib_extMgm::extPath($this->extKey).’locallang_db.xml‘);
$dbllfile = t3lib_div::xml2array($dbllfile);
$dbll = $dbllfile[‚data‘][‚default‘];
if($dbllfile[‚data‘][$this->LLkey]) {
$dbll = array_merge($lang,$dbllfile[‚data‘][$this->LLkey]);
}

$templateCode = $this->cObj->getSubpart($this->originalTemplateCode,’###TEMPLATE_CREATE_PREVIEW###‘);

$feuser = $GLOBALS[‚TSFE‘]->fe_user->user; // get the fe user

// replace markers
$fields = explode(‚,‘,$this->conf[‚formFields‘]);
$markerArray = array();
for($i=0;$ipi_getLL($key,$dbll[‚fe_users.‘.$key]);
}
}
$key = ‚pta_job‘;
$value = $feuser[$key];
$markerArray[‚###TCA_INPUT_‘.$key.’###‘] = $dbll[‚fe_users.‘.$key.‘.I.‘.$value];

// remove useless labels
$markerArray[‚###HIDDENFIELDS###‘] = “;
$markerArray[‚###LABEL_V_DEAR###‘] = “;
$markerArray[‚###LABEL_V_VERIFY_BEFORE_CREATE###‘] = “;

// remove form and input tags from template
$search = ‚//i‘;
$templateCode = preg_replace($search,“,$templateCode);
$search = ‚/<\/form>/i‘;
$templateCode = preg_replace($search,“,$templateCode);
$search = ‚//i‘;
$templateCode = preg_replace($search,“,$templateCode);

$content = $this->cObj->substituteMarkerArray($templateCode,$markerArray);

$removeFields = array(‚gender‘,’name‘,’status‘,’date_of_birth‘,’title‘,’company‘,’title‘,’address‘,’city‘,’zone‘,’static_info_country‘,’country‘,’zip‘,’telephone‘,’fax‘,’usergroup‘,’module_sys_dmail_category‘,’module_sys_dmail_html‘,’language‘,’www‘,’image‘,’comments‘);
for($i=0;$icObj->substituteSubpart($content,’###SUB_INCLUDED_FIELD_‘.$key.’###‘,“);
}
}
return $this->pi_wrapInBaseClass($content);
}

function getTemplateCode() {
$this->originalTemplateCode = $this->cObj->fileResource($this->conf[‚templateFile‘]);
}

1 Kommentar