Will man die Die Frontend-Benutzerregistrierung um ein Feld erweitern, so muss man dies über eine eigene Extension tun. Im Manual der Extension steht selbst auch eine Anleitung dazu. Leider ist die auch etwas in die Jahre gekommen. Alternativ könnte man die Datenbanktabelle(fe_users) erweitern und das Feld in der Extension Front End User Registration(sr_feuser_register) hinzufügen. Dazu rate ich aber ab, da dies mit dem nächsten Update der Extension wieder verfällt.
Deshalb möchte ich euch den Weg über eine eigene Extension zeigen. Dabei möchte ich einen Radio-Button zur Auswahl zwischen benutzername udn Klartextname erstellen.
1) Extension Builder Installieren
Um eine eigene Extension zu schreiben hat man früher Kickstarter verwendet. Mit der Typo3-Version 6.x empfehle ich aber den Extension Builder zu verwenden. Dazu über den Erweiterungsmanager die Extension Extension Builder(extension_builder) installieren. In der Linken Typo3-Navigation erscheint nun ein neuer Menüpunkt. (eventuell neu einloggen)
Legt eine neue Extension wie in der Abbildung an. Mein Feld in fe_users heißt displayname. Die Extension selbst wird über den Key definiert. In meinem Beispiel sr_feuser_extrafield_displayname
Unter Extend existing model class müsst Ihr folgenden Wert eintragen: \TYPO3\CMS\Extbase\Domain\Model\FrontendUser
2) Neue Extension installieren.
Geht in den Typo3 Erweiterungsmanager und installiert die gerade erstellte Extension.
Im Anschluss sollte in euer Datenbanktabelle ein neues Feld displayname erscheinen.
3) Template erweitern
Nun müsst Ihr euer vorhandenes Template erweitern. Kopiert dazu einfach alle Blöcke die zu GENDER gehören und tauscht das wort GENDER gegen das von euch erstelle Datenbankfeld. In meinem Fall sieht es dann so aus. Es sind jedoch noch weitere Stellen im Template, die ich editiert habe.
<!-- ###SUB_INCLUDED_FIELD_displayname### --> <label>###LABEL_DISPLAYNAME### ###REQUIRED_DISPLAYNAME###</label> <!-- ###SUB_ERROR_FIELD_displayname### --> <p class="tx-srfeuserregister-pi1-error">###EVAL_ERROR_FIELD_displayname###</p> <!-- ###SUB_ERROR_FIELD_displayname### --> <!-- ###SUB_REQUIRED_FIELD_displayname### --> <p class="tx-srfeuserregister-pi1-error">###MISSING_DISPLAYNAME###</p> <!-- ###SUB_REQUIRED_FIELD_displayname### --> ###TCA_INPUT_displayname### <!-- ###SUB_INCLUDED_FIELD_displayname### --> |
4) Typoscript erweitern
Im Typoscript-Template muss die Konfiguration an zwei Stellen angepasst werden. Zum einen die Bezeichnungen und die Initialisierung der Form-Felder. Je nach Setup müssen auch create.fields und edit.fields angepasst werden.
plugin.tx_srfeuserregister_pi1 { _LOCAL_LANG.de { fe_users.displayname = Anzeigename fe_users.displayname.I.0 = Benutzername fe_users.displayname.I.1 = Vorname + Nachname }} |
plugin.tx_srfeuserregister_pi1 { formFields = username, password, gender, title, first_name, last_name, email,displayname } |
6) Anpassungen Extension
Damit die Felder nun endgültig sichtbar werden, muss die Extension noch erweitert werden. Dazu gibt es zwei Möglichkeit die ext_tables.php zu editieren.
Entweder Ihr erweitert die Funktion addTCAcolumns um den Parameter addTofeInterface. Siehe Doku
1 | t3lib_extMgm::addTCAcolumns('fe_users',$tmp_sr_feuser_extrafield_displayname_columns); |
1 | t3lib_extMgm::addTCAcolumns('fe_users',$tmp_sr_feuser_extrafield_displayname_columns,1); |
Dies wird wohl noch in der Version 6.x funktionieren, ist jedoch DEPRECATED. Ein aus meiner Sicht besser Weg ist die das FrontendInterface zu erweitern.
1 | $TCA['fe_users']['feInterface']['fe_admin_fieldList'] .= ',displayname'; |
Anhänge: Beispiel Extension
sr_feuser_extrafield_displayname
Hi,
danke für’s teilen. Vor allem der extension_kickstarter part war für mich interessant =)
Gruß
Bitte gerne. 🙂 Hat mich auch Nerven und Zeit gekostet. 🙂
Hallo Torald
Vielen Dank für Deine Beschriebung, sie ist noch immer aktuell und funktioniert (Stand 2018 mit sr_feuser_register 5.1.0 und TYPO3 8.7.x).
Noch ein Tipp zu Feldern die required sein sollen, kann eine Liste in den Konstanten erweitert werden:
plugin.tx_srfeuserregister_pi1.requiredFields = [feld1,feld2,…]
Und die Labels für Fehlermeldungen nicht vergessen 😉
Gruß Dirk