+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Tipp zur Modifikation des Registrierungsformulars

  1. #1
    Neu an Board
    Registriert seit
    20.02.2009
    Beiträge
    7
    Bedankte sich
    0
    Erhielt 15 Danksagungen
    in 2 Beiträgen

    Cool Tipp zur Modifikation des Registrierungsformulars

    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:
    1. 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.
    2. 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.
    3. 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'); 
    4. 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="<?php echo $this->user->get'Strasse' );?>" 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 MUß-Feld handeln, so muß der Klassenbezeichner "inputbox required" lauten.
    5. 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.
    6. 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'); ?>" />
    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&auml;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' ))
    ;
    ?>
    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.

    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
    Geändert von Elleven (20.02.2009 um 19:11 Uhr) Grund: Anpassungen an der libraries/joomla/database/table/user.php vergessen zu beschreiben


  2. #2
    Neu an Board Avatar von Stylo
    Registriert seit
    16.03.2008
    Ort
    Menden
    Beiträge
    63
    Bedankte sich
    23
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard Danke für deine Arbeit!

    Hallo, ich habe genau sowas gesucht wie Du beschrieben hast. Allerdings möchte ich die "öffentliche" Registrierung abschalten. Habe dazu signallogin installiert, was diese Möglichkeit bietet. Wenn man sich aber ohne Dateneingabe anmeldet, kommt man wieder auf ein Standard-Anmeldeformular von Joomla (wie heißt das und wo liegt das?) , wo die Registrierung online wieder angeboten wird. Dieses Standardformular möchte ich durch einen Link auf ein neues Formular , erstellt mit Mad4joomla (formular-Komponente), ersetzen. Ich hoffe, dein Beitrag hilft mir, dieses Reg-System zu durchschauen.

  3. #3
    Neu an Board
    Registriert seit
    20.02.2009
    Beiträge
    7
    Bedankte sich
    0
    Erhielt 15 Danksagungen
    in 2 Beiträgen

    Idee

    Hi,

    das Joomla-Registrierungsformular findest Du unter components/com_user/views/register/tmpl/default.php

    Gruß,
    Armin

  4. #4
    Neu an Board
    Registriert seit
    02.03.2009
    Beiträge
    2
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Hallo Elleven,
    Dein HowTo hat mir auch sehr geholfen.
    Vielen Dank dafür.

  5. #5
    Neu an Board
    Registriert seit
    02.03.2009
    Beiträge
    2
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Zitat Zitat von Elleven Beitrag anzeigen
    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&auml;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' ))
    ;
    ?>
    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. ....
    Hallo Armin,
    vieleicht kannst Du mir ja doch noch bei einem kleinen Checkbox-Problem helfen.
    Ich hab manche Felder als Checkbox, deren entsprechenden Werte auch in die Datenbank geschrieben werden.
    PHP-Code:
    <td>
                            <input class="inputbox" type="checkbox" name="newsletter_per_fax" id="newsletter_per_fax" size="40" value="j" <?php  if (($this->user->get'newsletter_per_fax' ))=='j')echo 'checked="checked"';?> />
    </td>
                                                <td class="key">
                            <label for="newsletter_per_fax">
                                <?php echo JText::_'Versand per Fax' ); ?>
                            </label>
                        </td>
    Wenn ich jedoch als Admin diese Felder ändern will, schreibt er mir die Änderungen nur dann in die Datenbank, wenn ich die Checkbox von "j" (angehakt) auf "n" (nicht angehakt) setze.
    Andersrum klappt es nicht.
    Hast Du evtl. auch schon mal mit Checkboxen gebastelt und kannst mir da nen Tip geben?
    Gruß
    Dirk

    kurzer Nachtrag:
    wenn der Kunde seine Daten selbst ändert geht es,
    nur wenn der Admin die Kundendaten ändern will, dann geht es nicht
    Geändert von dirk_meier (05.03.2009 um 10:38 Uhr) Grund: ergänzung

  6. #6
    Neu an Board
    Registriert seit
    18.12.2007
    Beiträge
    87
    Bedankte sich
    6
    Erhielt 6 Danksagungen
    in 5 Beiträgen

    Standard

    Hallo,

    das ist genau das was ich gesucht habe für mich bist du mein Held des Monats! Alle verweisen immer nur auf den Community Builder dabei ist diese Komponente einfach zu groß und einfach nur unnötig wenn man einfach nur ein paar zusätzliche Felder haben möchte.

    Ein einfaches Danke drücken (obwohl ich es erst im Laufe der Woche ausprobieren werde) fand ich einfach zu wenig für deine Mühe. Darum vielen vielen Dank (in der Hoffnung das alles funktionieren wird...

    joomlanische Grüße

    crossbeam

  7. #7
    Neu an Board
    Registriert seit
    18.12.2007
    Beiträge
    87
    Bedankte sich
    6
    Erhielt 6 Danksagungen
    in 5 Beiträgen

    Standard

    Hallo,

    habe deine Anleitung gerade eben ausprobiert und funktioniert wunderbar. Zwei Punkte fehlen mir zumindest noch in der Anleitung:

    - Wie mache ich es, dass meine zwei zusätzlichen Textfelder ebenfalls rot werden, wenn kein Eintragung gemacht wurde obwohl diese als auch als "inputbox required" deklariert wurden? Es funktioniert schon, dass die Anmeldung blockiert wird wenn die Felder nicht ausgefüllt werden, nur ändert sich deren Farbe eben nicht. Konnte den notwendigen Code dazu bislang noch nicht entdecken.

    - Wie kann ich die beiden neuen Textfelder im Backend in der Komplettübersicht (Site --> Benutzer) anzeigen lassen? Erhalte die beiden Textfelder nur angezeigt im Backend, wenn ich auf den entsprechenden User gehe. Muss doch bestimmt noch irgendwo hinzugefügt werden oder?

    Danke schon einmal im vorraus!

    sgg Stevie

  8. #8
    Neu an Board
    Registriert seit
    02.03.2009
    Beiträge
    3
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Frage Klassenbezeichner "inputbox required"

    Hallo Elleven,

    erst einmal danke für deinen Beitrag. Mit folgender Aussage habe ich jedoch ein Problem:

    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.
    Habe das alles so gemacht, wie du beschrieben hast, bzw wie ich hier auch nachgelesen habe klick. Dort wurde jedoch der 3. Punkt, den du oben ausgeführt hast, nicht berücksichtigt. Es funktioniert auch alles soweit (mit und ohne Punkt 3), nur leider nicht, dass nach dem setzten von "inputbox required" das Feld als Plichtfeld angesehen wird.

    Eine Registrierung ist auch ohne ausfüllen des von mir dazugefügten Feldes möglich, trotz class="inputbox required".

    Jemand einen Tipp?

    MfG

    tozzo

  9. #9
    Neu an Board
    Registriert seit
    18.12.2007
    Beiträge
    87
    Bedankte sich
    6
    Erhielt 6 Danksagungen
    in 5 Beiträgen

    Standard Daten für Dropdownfeld aus Datenbank?

    Wie könnte ich es denn realisieren, dass die Daten für ein Dropdownfeld im Userbereich (Daten ändern) statt diese statisch in die user.php zu schreiben aus der Datenbank dynamisch geladen werden. Ich besitze z.B. in der Tabelle jos_users ein Extrafeld "Funktionsnummer".

    Es gibt dann eine Tabelle "Funktionen" in denen wieder dann die Nummern mit einem zusätlichem Feld "Name" drinstehen.

    Nun möchte ich also ein Dropdownmenü haben welches:

    - prüft ob der User sich bereits einer Funktion zugordnet ja
    --> falls ja gebe Funktion mit dem Name aus der Tabelle Funktionen aus

    --> falls nein gebe ein Dropdownmenü mit den Namen aus "Funktionen" aus und setze die Auswahl mit der Ziffer in die Tabelle jos_users.

    Ich weiß zwar wie ich das Feld Funktionsnummer ausgegeben kann, aber nicht wie ich die Dropdownliste aus einer anderen Tabelle anzeigen lassen kann. Bin für jede Hilfe dankbar.

  10. #10
    Verbringt hier viel Zeit
    Registriert seit
    22.05.2007
    Beiträge
    727
    Bedankte sich
    35
    Erhielt 135 Danksagungen
    in 131 Beiträgen

    Standard Vielen Dank und Ergänzung

    Vielen Dank für die funktionierende und gut erklärte Anleitung. Vielleicht ist noch zu ergänzen, das manche Templates eigene Dateien für form.php und default.php zur Darstellung im Frontend mitbringen. Diese dann einfach im Template-Ordner suchen und entsprechend verändern/ergänzen.

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein