Open Source CMS

joomla
Joomla™
drupal
Drupal
phplist
PHPlist
magento
Magento
wordpress
Wordpress
[Form RSW not found!]
Joomla Benutzerregistrierung erweitern

Problem:

Die Joomla Benutzerregistrierung soll um beliebige Zusatzfelder erweitert werden

Lösung:

Achtung: Es kann sein, dass die angesprochenen Dateien im Template Ordner liegen!

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:

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:

PHP-Code:

/**
* Description
*
* @var string
*/
var $Strasse = null;

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.

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:

PHP-Code:

<input type="text" name="Strasse" id="Strasse" size="40" value="" class="inputbox" maxlength="50" />

Interessant ist dabei der Klassenbezeichner "inputbox". Den kann man für ein Feld verwenden, was nur optional ist. Soll es sich um ein MUSS-Feld handeln, so muß der Klassenbezeichner "inputbox required" lauten.

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 Baustelle. 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="" />

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:

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,'Benutze rTyp','size="1" class="inputbox"','value','text',$this->user->get( 'BenutzerTyp' ));
?>

Der Name des Feldes lautet in dem Beispiel dann Benutzertyp. Auch das Feld kann man dann über die Klasse zum Pflichtfeld 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.

 

W3 Arts & Webdesign

Startseite

Produkte

Webdesign Lösungen

Was ist eigentlich...?

Konzept & Webdesign

Designkonzepte nach Maß

Projektablauf

In 5 Schitten zur eigenen Homepage

Online Shop Lösungen

Produkte erfolgreich verkaufen

Hompage Leasing

Websites für Existenzgründer

E-Shop Installationsservice

Ihr Shop innerhalb von 48h

Business Webhosting

Flexible Hostingpakete

Domainpreise

.de Domain ab 0,90 €

Domainbestellung

Registrierung innerhalb 1h

Website Optimierung

Erfolgreich gefunden werden

IT News

  • CMS Joomla 1.7 veröffentlicht
  • Android-Tablet Interpad
  • Apple stellt Xserve ein
  • Google und Facebook
  • E-Postbrief
  • Apple senkt Mac-mini-Preise