Hallo zusammen,
nachdem ich hier doch recht erfolglos das Forum durchsucht hatte, wie ich das Registrierungsformular nach meinen eigenen Wünschen anpassen kann und die hier vorgestellten Lösungen auch nicht wirklich zu meinem Problem paßten, habe ich mich selber hingesetzt und nun alles in epischer Breite selber gelöst. Da mich das viel Zeit gekostet hat und sicher auch für den ein- oder anderen Kameraden hier von Interesse sein dürfte, wollte ich meine Lösung hier kurz vorstellen.
Also, es müssen dazu in der SQL-Datenbank als auch bei ein paar wenigen PHP-Dateien kleinere Änderungen gemacht werden. Damit hat man dann die Möglichkeit, z.B. vorhandene Felder rauszuschmeißen, als nicht-mehr-Pflichtfeld zu definieren, neue Felder hinzuzunehmen oder gar Listboxen zu implementieren. So, folgendes muß man bearbeiten:
So, das war es eigentlich schon. Zum Schluß noch ein Zusatztipp zur Einbindung einer Listbox. Das hatte mich nämlich noch am meisten Zeit gekostet. Dazu muß man anstelle des o.g. Text-Feld eine Listbox erstellen. Die Besonderheit liegt dann darin, daß beim Rücklesen der Daten aus der DB auch das richtige Feld nachher vorselektiert ist. Dazu kann man sich zweier Funktionen aus der Klasse JHTMLSelect bedienen. In meinem Beispiel sieht das dann wie folgt aus. Anstelle der Zeile mit <input type="text"... trägt man dort dann folgenden Code ein:
- Zunächst überlegt man sich, welche Felder man zusätzlich haben möchte. Dann geht mal mit einem geeigneten MySQL-Tool in die Datenbank und öffnet die Tabelle jos_users. Dort muß man dann die entsprechenden Felder hinzufügen. Mein Provider bietet zum Glück bereits ein MySQL-Admin-Tool an, von daher kann ich jetzt hier keinen Tipp geben, was man dafür sonst noch so benutzen kann.
- Nun geht man in seine Joomla-Installation und schaut sich mal das File libraries/joomla/database/table/user.php an. Dort sind die Objekttypen für die User-Komponente definiert. Nennen wir für ein Beispiel unser neues Feld für das Registrierungsformular einfach mal "Strasse". Dann muß am ende der Objekdefinition von JTableUser (also ab Zeile 118) folgenden Code einfügen:
Wichtig ist, daß die Felder in der Objektdefinition in der gleichen Reihenfolge definiert sein sollten, wie die Tabelle in der Datenbank selbst. Anderweitig kann es zu Problemen kommen.PHP-Code:/**
* Description
*
* @var string
*/
var $Strasse = null;
- Als nächstes kommt nun die Datei components/com_user/controller.php dran. Dort gibt es eine Funktion save(), welche die Daten aus dem Registrierungsformular in die DB schreibt. Einfach mal die Zeile 72 kopieren und mit dem neuen Feldbezeichner "Strasse" hinzufügen. Das könnte dann z.B. wie folgt aussehen:
PHP-Code:$post['Strasse']= JRequest::getVar('Strasse', '', 'post', 'Strasse');
- Die nächste Baustelle ist das Formular zur Registrierung. Das findet man unter components/com_user/views/register/tmpl/default.php. Dort findet man dann zwischen jeweis zwei <TR> und </TR> Tags jeweils eine Zeile des Formulars. Passend zum o.g. Beispiel mit dem neuen Feld "Strasse" kann man dann so einen <TR>-Block kopieren, der dann u.A. folgende Zeile beinhalten sollte:
Interessant ist dabei der Klassenbezeichner "inputbox". Den kann man für ein Feld verwenden, was nur optional ist. Soll es sich um ein MUß-Feld handeln, so muß der Klassenbezeichner "inputbox required" lauten.PHP-Code:<input type="text" name="Strasse" id="Strasse" size="40" value="<?php echo $this->user->get( 'Strasse' );?>" class="inputbox" maxlength="50" />- Nun folgt das Formular, mit dem ein User seine Daten ändern kann. Das steht in der components/com_user/views/user/tmpl/form.php. Dort muß man praktisch genau die gleichen Änderungen vornehmen, wie im Registrierungsformular.
- So, nun noch die letzte Baustell. Das ist das Formular für die Benutzerverwaltung aus dem Back-End. Dort will man sein neues Feld ja auch wiederfinden. Die Datei heißt administrator/components/com_users/views/user/tmpl/form.php. Dort sieht die Modifikation FAST identisch aus. Für das Beispiel gilt:
PHP-Code:<input class="inputbox" type="text" name="Strasse" id="Strasse" size="40" value="<?php echo $this->user->get('Strasse'); ?>" />
Der Name des Feldes lautet in dem Beispiel dann BenutzerTyp. Auch das Feld kann man dann über die Klasse zum Pflichfeld aufwerten. Das muß man dann 1:1 in alle der drei o.g. Formulare eintragen. Sicher kann man die Optionsliste auch noch in eine separate Datei auslagern, damit man bei Änderungen dann nicht alle drei Formulardateien immer anpassen muß. Aber das habe ich mir dann geschenkt. Das darf dann ein anderer hier gerne zuende bringen.PHP-Code:<?php
$TypenListe = array();
$TypenListe[] = JHTML::_('select.option','',' --- Hier bitte Ihre Rolle auswählen ---');
$TypenListe[] = JHTML::_('select.option',1,'Freund');
$TypenListe[] = JHTML::_('select.option',2,'Familie');
$TypenListe[] = JHTML::_('select.option',3,'Kollege');
$TypenListe[] = JHTML::_('select.option',99,'sonstiges');
echo JHTML::_('select.genericlist',$TypenListe,'BenutzerTyp','size="1" class="inputbox"','value','text',$this->user->get( 'BenutzerTyp' ))
;?>
Anschauen kann man sich mein modifiziertes Formular unter http://www.gut-lohhof.com. Aber bitte nicht jeder auf senden drücken - das nervt!
Gruß und viel Spaß damit,
Armin


LinkBack URL
About LinkBacks
Zitieren

Lesezeichen