|
Die möglichen User-Daten für Joomla-User sind ziemlich beschränkt. Es gibt gerade mal "Name", "Benutzername" und "Email". Ggf. möchte man als Webmaster auch mal mehr über seine User wissen. Z.B. wo sie Wohnen, eine Telefonnummer, wie sie die Website gefunden haben. Kundennummer, Referenznummer oder ähnliches wären evtl. ebenfalls hilfreich.
Heute erweitern wir die Benutzerdaten in Joomla!
Zuerst werfen wir einen Blick auf mögliche Alternativen:
In erster Linie muss hier eine sehr gute und einfache Lösung genannt werden: ChronoForms.
Mit ChronoForms können eigene Registrierungs-Formulare mit beliebigen Feldern erstellt werden. Daraus erstellt man eine Tabelle. Das CF-Plugin "Joomla Registration" kann dann ein Login-Formular daraus erstellen, so dass alles Weitere gar nicht mehr über die Joomla-eigene User-Tabelle geht.
Wer mag kann mithilfe des CF-Plugins "Email Verification" sogar vorher die Email verifizieren lassen.
Kurz: ChronoForms ist die Non-Plus-Ultra-Lösung für diese Problemstellung.
Wer sich nicht durch die teilweise quälende Bedienung von CF durch ackern möchte, kann mit ein bisschen Code-Manipulation ebenfalls weit kommen.
Dazu brauchen wir lediglich administrativen Zugang zur Datenbank (z.B. per phpMyAdmin), ein kleines bisschen Kenntnis in PHP und HTML.
Nachteil dieser Lösung: Sie ist nicht Update-Sicher. Aber da die Version 1.5 sowieso nicht mehr weiter entwickelt wird, braucht uns das hier zumindest nicht stören.
In medias res:
Wir bauen lediglich beispielhaft ein neues Datenfeld ein: Telefon
1. Als erstes ergänzen wir dieses Feld in der Datenbank:
Wir hängen ans Ende der Felder ein weiteres Feld "telefon" als varchar mit der Länge 15 an.
2. Der nächste Schritt ist ein Eingriff in den Joomla-Core:
Die Datei libraries/joomla/database/table/user.php wird nach der letzten Objekt-Variablen ($params) und vor dem Konstruktor (__construct) das neue Feld eingetragen:
var $telefon = null;
3. Ein weiterer Eingriff in den Core folgt mit der Änderung von components/com_user/controller.php:
Die Routine function save() muss in (ca. Zeile 76) um das neue Feld erweitert werden:
$post['telefon'] = JRequest::getVar('telefon', '', 'post', 'string');
Die nächsten Eingriffe kann man dann ins Template übernehmen, indem man die genannten Dateien ins Template unter templates/TEMPLATE-NAME/html/com_user/register/ bzw. .../com_user/user/ kopiert und dort bearbeitet.
4. Wir erweitern die Datei components/com_user/views/register/tmpl/default.php, welche das Registrierungsformular darstellt, um den passenden HTML-Code. Dieser kann theoretisch von darüberliegenden Eingabefeldern kopiert werden. In diesem Fall sieht er dann wie folgt aus:
<tr>
<td height="40">
<label id="telefonmsg" for="telefon">
<?php echo JText::_( 'Telefon' ); ?>:
</label>
</td>
<td>
<input type="text" id="telefon" name="telefon" size="40" value="<?php echo $this->user->get( 'telefon' );?>" class="inputbox required" maxlength="100" /> *
</td>
</tr>
Man beachte im input-Tag die class-Definition: inputbox braucht das Feld auf jeden Fall. Aber die Klasse required ist nur nötig wenn das Feld vom User unbedingt ausgefüllt werden soll. Anderweitig (also "Telefonangabe freiwillig") ist diese Klasse raus zu nehmen und das Sternchen am Ende der Zeile zu entfernen.
5. Die Datei components/com_user/views/user/tmpl/form.php stellt das Formular dar, welches der angemeldete User evtl. selber aufrufen kann um seine Daten nachträglich zu ändern.
Hier wird Analog zur letzten Datei verfahren. Ebenfalls die required-Klasse ist hier zu beachten.
6. Zu guter Letzt möchten wir die Daten auch im Backend einsehen können. Dazu bearbeiten wir die Datei administrator/components/com_users/views/user/tmpl/form.php welche leider nicht als Kopie im Template auszulagern ist.
Der Aufbau der nötigen Zeilen geht analog zu den beiden letzten Schritten. Ich stelle die neuen Felder zwischen "Email" und "Passwort" (ca. Zeile 105) ein.
7. Nun kommt noch die Kür:
Wer mag, kann auch versuchen die Telefonnummern bereits in der User-Liste anzuzeigen. Die entsprechende Datei lautet administrator/components/com_users/views/users/tmpl/default.php.
Kleiner Tipp:
Wer andere Felder wie z.B. Checkboxen, Radio-Buttons, Selects, etc. nutzen möchte, sollte auf die von Joomla mitgelieferten Möglichkeiten von JHTML zurück greifen. Ein Beispiel zur Darstellung einer Selectbox für einen Benutzertyp:
<?php
$TypenListe = array(
JHTML::_('select.option', '', '--- wählen ---'),
JHTML::_('select.option', 1, 'Freund'),
JHTML::_('select.option', 2, 'Familie'),
JHTML::_('select.option', 3, 'Kollege'),
JHTML::_('select.option', 99, 'sonstiges'),
);
echo JHTML::_('select.genericlist', $TypenListe, 'UserType',
'size="1" class="inputbox"', 'value', 'text',
$this->user->get( 'UserType' )
);
?> |