Typo3 - Benutzer Registrierung (sr feuser register)
Diese Extension kann die wichtigsten Dinge für Frontend Benutzer ab:
- Registrieren
- An- / Abmeldung
- Zuordnung zu verschiedenen Benutzergruppen
- etc.
Siehe auch:
Newsletter mit Direct Mail
TYPO3 - Sichere Backend und Frontend Benutzer mit rsaauth, ssl und saltedpasswords
Links[Bearbeiten]
User Registrierung mit gesalzenen Passwörtern
Zusatzfelder: http://blog.marit.ag/2010/02/03/sr_feuser_register-zusatzfeld/
Quickstart[Bearbeiten]
benötigt:
- static_info_tables
- div2007 (für Flexforms)
- kb_md5fepw wenn md5 Passwords verwendet werden sollen (obsolet wird durch rsaauth und saltedpasswords ersetzt)
- rsaauth (Verschlüsselte Übertragung bei der Anmeldung)
- salted passwords
Wichtige Ordner und Seiten[Bearbeiten]
- O: Benutzer (oder Abos) enthält notwendige Benutzergruppen und die User
- S: Login (oder Newsletter) enthält normales Login und sr_feuser_register (default, startingpoint ist der feuser - Ordner)
- S: Registrierung (sr_feuser_register, mode create, startingpoint wie oben)
Benutzergruppen anlegen[Bearbeiten]
- Gruppe für nicht bestätigte Registrierungen
- Gruppe für bestätigte Registrierungen
TypoScript[Bearbeiten]
Statisches Template
- FE User Registration
Constants
// Ordner mit Benutzern für Loginform
styles.content.loginform.pid = 87
// bei alter newloginbox...
# plugin.tx_newloginbox_pi1.storagePid = 87
plugin.tx_srfeuserregister_pi1{
// Seite mit den Benutzern
pid = 87
// Benutzergruppen uid nach Registrierung aber vor Bestätigung (z.B. "NL nicht bestätigt")
userGroupUponRegistration = 1
// Benutzergruppen uid nach Bestätigung (z.B. "NL bestätigt")
userGroupAfterConfirmation = 2
// Seite mit Login Form
loginPID = 88
// Seite mit Registierung
registerPID = 89
// Seite zum editieren der Benutzerdaten
editPID = 90
// Seite mit Bestätigung der Registrierung
confirmPID = 91
// Wieviel Bilder dürfen hochgeladen werden
maxImages = 1
dateFormat = d.m.Y
dateSplit = .
salutation = informal
siteName = KO rockt!
formFields = password,first_name, last_name, email,module_sys_dmail_html, module_sys_dmail_category,disable
requiredFields = first_name,last_name,email
email = steff@ko-rockband.de
// nur mit RealURL ?
useShortUrls = 1
// Kategorien von Direct Mail
module_sys_dmail_category_PIDLIST = 86
//
dmailCheckedUponRegistration = 1
}
Setup
// Sprachlabel anpassen
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de{
v_really_wish_to_delete_informal = Willst Du Dein Konto wirklich löschen?
v_your_account_was_created_informal = Dein Konto <strong>%2$s</strong> wurde erstellt. Wir senden eine E-Mail an die Adresse <strong>%4$s</strong>, damit Du die Anmeldung bestätigen kannst.
}
// Titel der Benutzerseite überschreiben (wird in E-Mails benutzt)
plugin.tx_srfeuserregister_pi1.pidTitleOverride = KO rockt! News
Beispiel: sr_feuser_register für Newsletter einsetzen[Bearbeiten]
In diesem Beispiel geht es darum die Benutzer Registrierung für Direct Mail (direct_mail) einzubauen und zu konfigurieren.
Eigene Felder hinzufügen[Bearbeiten]
http://www.herzogkienast.de/tutorials/benutzerregistrierung-erweitern.html http://blog.marit.ag/2010/02/03/sr_feuser_register-zusatzfeld/
Prinzip:
- Extension erstellen die fe_user mit den benötigten Feldern erweitert
- HTML Template kopieren / bearbeiten
- TCA Array für Selectboxen etc. bearbeiten und localconf mit hook erweitern.
FE-User Tabelle erweitern und Template kopieren[Bearbeiten]
Die FE-User Tabelle erweitern
Zunächst müssen die zusätzlichen Felder in der Front-End Benutzertabelle erzeugt werden. Hierzu kann einfach mit dem Kickstarter eine Extension erstellt werden, die der Tabelle fe_users weitere Felder hinzufügt.
Die Marker im Template von sr_feuser_register anlegen
So man das noch nicht getan hat, das Template der Front-End Registrierung kopieren und im Fileadmin ablegen. Dann in den TypoScript Konstanten das Template eintragen:
plugin.tx_srfeuserregister_pi1 {
file.templateFile = fileadmin/template/html/srfeuserregister.html
}
Beispiel einfaches Textfeld[Bearbeiten]
Marker für einfache Textfelder anlegen:
<!-- ###SUB_INCLUDED_FIELD_myNewFieldName### --> <dt> <label for="tx-srfeuserregister-pi1-myNewFieldName">###LABEL_MYNEWFIELDNAME###</label> <span>###REQUIRED_MYNEWFIELDNAME###</span> </dt> <dd> <!-- ###SUB_ERROR_FIELD_myNewFieldName### --> <p>###EVAL_ERROR_FIELD_myNewFieldName###</p> <!-- ###SUB_ERROR_FIELD_myNewFieldName### --> <!-- ###SUB_REQUIRED_FIELD_myNewFieldName### --> <p>###MISSING_MYNEWFIELDNAME###</p> <!-- ###SUB_REQUIRED_FIELD_myNewFieldName### --> <input id="tx-srfeuserregister-pi1-myNewFieldName" type="text" size="40" maxlength="50" title="###TOOLTIP_MYNEWFIELDNAME###" name="###NAME_MYNEWFIELDNAME###" /> </dd> <!-- ###SUB_INCLUDED_FIELD_myNewFieldName### -->
Dabei myNewFieldName durch den gesammten Feldnamen ersetzen.
Aufpassen wo Groß und wo Kleinschreibung angesagt ist (Im Standard Template nachschauen). Unterschiede bei den Markern von TCA Feldern und einfachen Textfeldern beachten. Bei Textfeldern heißt es oft FIELD_myFieldName, bei TCA Feldern TCA_INPUT_myFieldName
Label und Fehlertexte lokalisiert hinzufügen[Bearbeiten]
Wie bereits bei der Eintragung ins Template zu erkennen war, können alle Label und Texte für den Fehlerfall lokalisiert eingegeben werden. Dazu einfach folgendes zum TypoScript Setup hinzufügen:
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de.myNewFieldName = Mein Feld eingeben:
Fehlernachricht bei unausgefüllten Pflichtfeldern:
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.de.missing_myNewFieldName = Bitte geben Sie etwas ein!
Dasselbe aber für die Einladungsmaske:
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.languageCode.missing_invitation_ myNewFieldName = Bitte auch hier was eingeben
Fehlermeldung, wenn das Feld falsch ausgefüllt wurde:
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.languageCode.evalErrors_evalRuleName_myNewFieldName = Darf nur Buchstaben und Zahlen enthalten!
TCA Felder hinzufügen (Select, Radio, Checkbox)[Bearbeiten]
Hier sind weitere Schritte notwendig. Nämlich:
Die TCA-Konfiguration zur Verfügung stellen[Bearbeiten]
In früheren Versionen der Extension sr_feuser_register wurde pauschal die gesamte TCA des Projektes eingelesen und ausgewertet. Dies stellte sich jedoch als zu ressourcenfressend heraus. Daher müssen Extensions, deren Felder in sr_feuser_register genutzt werden sollen, nun über einen Hook registriert werden. Dazu folgenden Code der ext_localconf.php der Extension, die die neuen Felder enthält, hinzufügen:
if (TYPO3_MODE==’FE’){
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sr_feuser_register']['extendingTCA'][] = ‘my_new_ext’;
}
Kann oder möchte man die andere Extension nicht verändern oder bleibt bei älteren Konstellationen der Hook wirkungslos, so kann man auch mit einem direkten Hack der Extension sr_feuser_register die TCA zur Verfügung stellen. Achtung, diese Änderung geht bei einem späteren Update verloren und muss daher gut dokumentiert werden!
In der Datei typo3conf/ext/sr_feuser_register/lib/class.tx_srfeuserregister_tca.php in der Funktion “init” hinter dem Code, der direkt Mail behandelt folgendes einfügen:
if (t3lib_extMgm::isLoaded('my_new_ext')) {
tx_div2007_alpha::loadTcaAdditions_fh001(array('my_new_ext'));
}
Nun wird das TCA in jedem Fall geladen. Andernfalls kann der ärgerliche Fall eintreten, das bei der Front-End Nutzerregistrierung die Marker der Felder nur dann ersetzt werden, während man als Nutzer im Backend angemeldet ist, da nur in dem Fall das ganze TCA geladen wird.
Achtung: Wenn das Feld über die Angabe allgemeine Datensatzsammlung, in der Seitenkonfiguration Daten bezieht, dann muß im Backend dieser Ordner auch angegeben sein, sonst funktioniert es auch im FE nicht.
Weiteres Beispiel[Bearbeiten]
TCA-Marker, wie im Codebeispiel unten, ersetzt werden und dieser Marker platziert werden '###TCA_INPUT_tx_srfeuserextrafieldindustry_industry###.
<!-- ###SUB_INCLUDED_FIELD_tx_srfeuserextrafieldindustry_ industry### --> <dt> <label for="tx-srfeuserregister-pi1-industry"> ###LABEL_TX_SRFEUSEREXTRAFIELDINDUSTRY_INDUSTRY### ###REQUIRED_TX_SRFEUSEREXTRAFIELDINDUSTRY_INDUSTRY### </label> </dt> <dd> <!-- ###SUB_ERROR_FIELD_tx_srfeuserextrafieldindustry _industry### --> <p>###EVAL_ERROR_FIELD_tx_srfeuserextrafieldindustry _industry###</p> <!-- ###SUB_ERROR_FIELD_tx_srfeuserextrafieldindustry _industry### --> <!-- ###SUB_REQUIRED_FIELD_tx_srfeuserextrafieldindustry _industry### --> <p>###MISSING_TX_SRFEUSEREXTRAFIELDINDUSTRY _INDUSTRY###</p> <!-- ###SUB_REQUIRED_FIELD_tx_srfeuserextrafieldindustry _industry### --> ###TCA_INPUT_tx_srfeuserextrafieldindustry_industry### </dd> <!-- ###SUB_INCLUDED_FIELD_tx_srfeuserextrafieldindustry _industry### -->
ext_localconf.php in der neuen Extension mit Hook um das neue Feld zu registrieren (nur bei tca feldern)
<?php
if (TYPO3_MODE=='FE') {
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']
['sr_feuser_register']['extendingTCA'][]
= 'sr_feuser_extrafield_industry';
}
?>
TypoScript Template - Felder zuweisen
In Ihrem TS-Template müssen Sie nun noch das entsprechende Feld zuweisen.
Zunächst in den constants wie folgt:
plugin.tx_srfeuserregister_pi1.formFields = tx_srfeuserextrafieldindustry_industry,image, username
Und im Setup bei create.fields und edit.fields.
Sofern das Feld ein Pflichtfeld sein soll, muss es sowohl in den Constants bei plugin.tx_srfeuserregister_pi1.requiredFields, als auch im Setup bei create.required angegeben werden.
Sprachlabel[Bearbeiten]
plugin.tx_srfeuserregister_pi1._LOCAL_LANG {
de {
fe_users.tx_srfeuserextrafieldindustry_industry =
Branchenauswahl:
fe_users.tx_srfeuserextrafieldindustry_industry.I.0 =
---
fe_users.tx_srfeuserextrafieldindustry_industry.I.1 =
Produzent1
fe_users.tx_srfeuserextrafieldindustry_industry.I.2 =
Produzent2
fe_users.tx_srfeuserextrafieldindustry_industry.I.3 =
Produzent3
fe_users.tx_srfeuserextrafieldindustry_industry.I.4 =
Produzent4
fe_users.tx_srfeuserextrafieldindustry_industry.I.5 =
Produzent5
}
}
Custom Logout/Login fest im Layout[Bearbeiten]
[usergroup=*]
page.10.subparts.LOGIN = TEXT
page.10.subparts.LOGIN.value(
<form action="index.php?id=1" method="post">
Angemeldet als: <span><!--###USERNAME###--></span><br />
<input class="submit logout" type="submit" name="submit" value="Logout" />
<input type="hidden" value="logout" name="logintype"></input>
<input type="hidden" value="22,101" name="pid"></input>
<input type="hidden" value="" name="redirect_url"></input>
<input type="hidden" value="0" name="tx_felogin_pi1[noredirect]"></input>
</form>
)
[else]
page.10.subparts.LOGIN = TEXT
page.10.subparts.LOGIN.value (
<form action="index.php?id=102" method="post" onsubmit="superchallenge_pass(this); return true;">
<input class="input" type="text" id="user" name="user" value="Benutzername" onfocus="if (this.value == 'Benutzername') this.value = '';"/>
<input class="input" type="password" id="pass" name="pass" value="password" onfocus="if (this.value == 'password') this.value = '';"/>
<input class="submit" type="submit" name="submit" value="Login"/>
<input type="hidden" name="logintype" value="login"/>
<input type="hidden" name="pid" value="22,101" />
<input type="hidden" value="0" name="tx_felogin_pi1[noredirect]"></input>
<input type="hidden" name="redirect_url" value="index.php?id=102" />
</form>
)
[GLOBAL]
Probleme lösen[Bearbeiten]
Marker von eigenen Feldern mit TCA_INPUT werden nicht mehr ersetzt[Bearbeiten]
Es wird nur noch der Marker ausgegeben.
Lösung: Extension über Hook anmelden
siehe auch http://bugs.typo3.org/view.php?id=5846
Seit sr_feuser_register muss jede Extension mit neuen Felder für fe_users angemeldet werden. Dasselbe gilt auch für sr:_email_subscribe und tt_address. Der Grund ist eine Code-Optimierung, damit im Frontend nicht mehr die $TCA einer jeden installierten Extension eingelesen werden muss, was eine Menge an RAM einspart, weil im $TCA auch viele Übersetzungstexte vorkommen.
In der ext_localconf.php der Extension mit dem Extension Key meineext muss das eingetragen werden:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sr_feuser_register']['extendingTCA'][] = 'meineext';
Fehlermeldung: sr_feuser_register: The form's token is too short![Bearbeiten]
Dafür gibt es diverse Gründe.
- Domain bei baseURL etc. nicht richtig gesetzt (vor allem auf Subdomains achten auch www ist eine Subdomain)siehe oben.
- Ordner ID nicht richtig gesetzt (TypoScript Konstanten kontrollieren)
- Es kann an einem Bug in der Version: 2.5.25 liegen. Hierfür gibt es aktuell (1.5.2010) Kein Update aber einen Patch: http://bugs.typo3.org/view.php?id=14125&nbn=5
Wichtig ist danach eine aktuelle div2007 Version (bei mir 0.3.1 aufzuspielen. Sonst gibts gleich die nächsten Fehler.
Felder die über TCA verändert werden funktionieren im Backend aber nicht im Frontend[Bearbeiten]
Zitat aus der Mailingliste von Oliver Klee:
Das Problem ist, dass das TCA deiner Extension im FE nicht geladen wird
und sr_feuser_register daher die Einstellungen der Felder nicht kennt.
So habe ich das dann gelöst:
myext/ext_localconf.php
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/sr_feuser_register/lib/class.tx_srfeuserregister_tca.php'] = t3lib_extMgm::extPath('myext') . 'class.ux_tx_srfeuserregister_tca.php';
myext/class.ux_tx_srfeuserregister_tca.php:
class ux_tx_srfeuserregister_tca extends tx_srfeuserregister_tca {
function init (&$pibase, &$conf, &$controlData, &$langObj, $extKey,$theTable)
{
global $TCA;
tx_div2007_alpha::loadTcaAdditions_fh001(array('my ext'));
return parent::init( $pibase, $conf, $controlData, $langObj, $extKey, $theTable);
}
}
== Anpassen ==
http://blog.marit.ag/2010/02/03/sr_feuser_register-zusatzfeld/
Nur aktuelle Benutzerdaten anzeigen[Bearbeiten]
Checkbox und andere - als Pflichtfeld / Validierung funktioniert nicht[Bearbeiten]
Wenn z.B. eine eigene Checkbox als Pflichtfeld agieren soll geht das über:
plugin.tx_srfeuserregister_pi1.create.evalValues.XXX = required
im Setup (wichtig)
Das normale: requiredFields in den Konstanten funktioniert nicht