Ich erhalte immer wieder deutschsprachige Anfragen, wie man femanager dazu bekommt, eigene Felder von fe_users anzuzeigen. Daher will ich das hier noch einmal genau beschreiben.
Die Anleitung ist erst einmal ohne Gewähr und ich hoffe, dass ich nichts übersehen habe. Freue mich über Feedback.
femanager
Bei der Extension femanager handelt es sich um eine Frontend-Benutzerregistrierung mit einer Vielzahl an Funktionen und nützlichen Features.
Anleitung zur Erweiterung
Um femanager updatesicher mit neuen Feldern auszurüsten, wird eine weitere Extension benötigt (siehe Beispielextension femanagerextended_0.1.0.zip unten in den Links), die zur Laufzeit die femanager erweitert, ohne den eigentlichen Code des femanagers zu ändern. Als Beispiel wollen wir den Twitternamen des zu registrierenden speichern.
1. Neues Feld über TSConfig dem Plugin hinzufügen
Damit der Redakteur in den FlexForm ein weiteres Feld "Twitter ID" zur Verfügung hat, müssen wir über Page TSConfig dieses Feld aktivieren:
tx_femanager {
flexForm {
new {
addFieldOptions {
twitterId = Twitter ID
}
}
edit < tx_femanager.flexForm.new
}
}
2. HTML-Template ergänzen
Wird der Redakteur das neue Feld nun der Registrierung hinzufügen, wird es im Frontend zu einem Fehler kommen, da femanager automatisch nach einem Partial (Untertemplate) mit dem Namen TwitterId.html suchen würde. Sofern wir den Pfad der Partials noch nicht angepasst haben, sucht femanager jetzt nach typo3conf/ext/femanager/Resources/Private/Partials/Fields/TwitterId.html. Diese Datei gibt es aber per Default nicht, daher kommt es zu einer entsprechenden Fehlermeldung.
Am einfachsten ist es, alle vorhandenen Partials (kompletter Ordner typo3conf/ext/femanager/Resources/Private/Partials/) nach fileadmin (z.B. fileadmin/femanager/Partials/) zu kopieren, und femanager per TypoScript darauf verweisen, dass er künftig dort nach Partials suchen soll:
plugin.tx_femanager.view.partialRootPath = fileadmin/femanager/Partials/
Wird man das Frontend nun neu laden, besteht der Fehler zwar weiterhin, aber man erkennt, dass femanager nun nach der Datei fileadmin/femanager/Partials/Fields/TwitterId.html sucht, diese aber nicht findet.
Diese können wir jetzt selber hinzufügen - Beispielinhalt:
{namespace femanager=In2\Femanager\ViewHelpers}
<div class="femanager_fieldset control-group">
<label for="twitterId" class="control-label">
Twitter
</label>
<div class="controls">
<femanager:form.textfield
id="twitterId"
property="twitterId"
class="input-block-level"
additionalAttributes="{femanager:Misc.FormValidationData(settings:'{settings}',fieldName:'twitterId')}" />
</div>
</div>
Beim Erneuten Reload sollte das neue Feld nun im Frontend sichtbar sein.
3. Eigene Extension erstellen
Um den eigentlichen Speichervorgang in femanager zu verändern, brauchen wir eine eigene Extension (siehe femanagerextended in Links unten).
Ich empfehle die femanagerextended einmal zu installieren, und diese nach eigenen Wünschen anzupassen.
Wichtige Dateien hierbei sind:
ext_tables.sql Hier werden die neuen Felder definiert (z.B. twitter_id varchar(255) DEFAULT '' NOT NULL,). Nicht vergessen im Install-Tool einen Datenbank-Compare zu machen, wenn ihr hier neue Felder für eure fe_users hinzufügt.
ext_typoscript_setup.txt Hier wird femanager angewiesen im Controller auf die neue Entsprechung zuzugreifen.
Classes/Domain/Model/User.php Das Model des femanager wird hier um sogenannte Getter und Setter erweitert (getTwitterId() und setTwitterId())
Classes/Controller/NewController.php Hier wird der Controller des femanager durch unseren neuen überlagert (siehe auch Classes/Controller/EditController.php für Bearbeitungsansicht)
4. Sprachdateien
Damit euer neues Feld auch eine Beschriftung hat, könnt ihr die locallang.xlf des femanagers über TypoScript ergänzen:
plugin.tx_femanager._LOCAL_LANG {
default {
tx_femanager_domain_model_user.twitterId = Twitter ID
}
de {
tx_femanager_domain_model_user.twitterId = Twitter Name
}
}
Abschließend
Im Prinzip war es das. Femanager kann somit durch beliebig viele Felder erweitert werden. Das Ganze mag im ersten Moment etwas kompliziert aussehen, letztlich hilft dieses Vorgehen aber die femanager unangetastet zu belassen. Somit könnt ihr jederzeit Updates machen und neue Versionen einspielen.
Links
-
Femanager Handbuch http://docs.typo3.org/typo3cms/extensions/femanager/
-
Neue Felder hinzufügen laut Handbuch http://docs.typo3.org/typo3cms/extensions/femanager/ExtfeManager/BestPractice/AddingNewFieldsToFeUsersWithYourOwnExtension/Index.html
-
Eine Beispielextension, die femanager und fe_users um zwei Felder erweitert, befindet sich im Verzeichnis von femanager (unter typo3conf/ext/femanager/Resources/Private/Software/femanagerextended_0.1.0.zip oder http://forge.typo3.org/projects/extension-femanager/repository/revisions/master/show/Resources/Private/Software)
-
Bug gefunden? Bitte hier reporten http://forge.typo3.org/projects/extension-femanager
Grüße, Alex