Manuelle Benutzerregistrierung mit Dateneinspeisung in Joomla Tabellen

  • Guten Tag zusammen.


    Ich benötigen eine ziemlich individuelle Benutzerregistrierung im Frontend. Sowohl Mitglieder als auch Unternehmen sollen sich mit zwei unterschiedlichen Masken registrieren können.


    Nun habe ich überlegt, wie ich das umsetzen möchte. Die Lösung über Fields sagt mir nicht so richtig zu, da Sie meine Anforderungen auch nicht komplett erfüllt. Letztlich überlege ich nun, mir mittels PHP eine eigene individuelle Lösung zu bauen.


    Mein Gedankengang ging in die Richtung, dass ich jeweils eine eigene Tabelle für natürliche sowie für juristische Personen anlege, mir eigene Formularmasken baue und die Daten in meinen eigenen Tabellen speichere. Soweit erstmal nichts schwieriges und besonderes. ABER: Was ganz sinnvoll wäre, wenn z. B. eine Person, die sich als natürliche Person registriert, dass einerseits die Daten in meiner eigenen Tabelle gespeichert werden, andererseits aber auch in der Joomla eigenen "users" Tabelle mit diesen Daten ein neuer User manuell angelegt wird. Soweit halte ich das erstmal auch nicht für wahnsinnig wirklich schwierig, aber einige Spalten sind für mich nicht ganz klar.


    Meine Fragen sind nun wie folgt:


    1. Wenn ich Joomla-Nutzer manuell über die Tabelle anlege, reicht dann wirklich das einfügen von Daten in die User Tabelle aus, oder sind noch weitere Tabellen für die User betroffen? Wahrscheinlich ist auch die Tabelle "usergroups" wegen der Userrechte betroffen, oder? Gibt es noch weitere Tabellen zu füttern, um manuell User anzulegen?
    2. Wenn ich mir die Spalten in Tabelle User anschaue: name, username, email und registerdate sind für mich klar. Aber zu den anderen Spalten habe ich Fragen:
      1. password: Welche Verschlüsselung ist verwendet? MD5?
      2. Was besagt die Spalte "block" und Welche Werte sind hier möglich?
      3. sendemail ist mir eigentlich auch klar, aber Welche Werte sind hier möglich? Sendemail ja= 1 und nein = 0?
      4. lastvisitdate wird ja später wahrscheinlich automatisch upgedated, oder?
      5. activation: Welche Werte sind hier möglich?
      6. params: Das stellt für mich derzeit das größte Fragezeichen. Was ist hier möglich/erforderlich?
      7. lastresettime: Muss ich hier was eingeben?
      8. resetcount: Ist das die Anzahl der passwort resets? Wird das automatisch aktualisiert?
      9. optkey: Was verbirgt sich hier hinter und was für Werte sind möglich?
      10. otep: Was verbirgt sich hier hinter und was für Werte sind möglich?
      11. Requirereset: Was verbirgt sich hier hinter und was für Werte sind möglich?
    3. Wenn ich mir die Spalten in Tabelle usergroup anschaue, stellen sich mir folgende Fragen:
      1. Wie muss parent_id, lft und rgt mit Daten bestückt werden? Welche Werte sind hier möglich?
    4. Sind noch weitere Tabellen für das anlegen eines Users betroffen? Wenn ja, welche?

    Ich hoffe, mir kann und will jemand mit meinen Fragen helfen...

    Im Voraus schon mal besten Dank!


    Beste Grüße


    Sven

  • Hi,


    Zitat

    Ich benötigen eine ziemlich individuelle Benutzerregistrierung im Frontend. Sowohl Mitglieder als auch Unternehmen sollen sich mit zwei unterschiedlichen Masken registrieren können.

    Hast du dich schon mit overrides und alternativen layouts sowie user plugins beschäftigt? Ich persönlich halte das für den einfacheren und sicheren Weg deine Anforderungen umzusetzen, dadurch brauchst du keine eigene App bauen und erst recht nicht doppelt die Daten zu halten etc.


    Als zweite Alternative gibt es auch die Möglichkeit ein Joomla Auth Plugin zu bauen (Beispiele) dadurch würde man sich auch die doppelte Datenhaltung sparen.


    Wenn du aber wirklich den Weg mit einer externen Anwendung gehen möchtest würde ich dir dringend davon abraten selber via SQL Einträge in core Tabellen zu machen.


    Ich würde empfehlen in dem eigenen Programm die Joomla Klasse: \Joomla\CMS\User\User zu laden und dort die save Methode zu benutzen. Dadurch werden u.a. auch die nötigen plugin trigger etc ausgelöst, Passwörter richtig gehashed, Benutzergruppen und parameter hinterlegt etc.


    Eine weitere Klasse ist diese hier: https://github.com/joomla/joom…s/models/registration.php da kannst du dir ansehen wie im Core die Sachen gemacht werden.



    Zu deinen Fragen

    Zitat

    password: Welche Verschlüsselung ist verwendet? MD5?

    Bitte nicht MD5 das hat nichts mehr mit Verschlüsselung zutun ;D In der save method händelt das Joomla selbstständig. Siehe \Joomla\CMS\User\UserHelper

    Zitat

    Was besagt die Spalte "block" und Welche Werte sind hier möglich?

    Ist der Benutzer geblockt Ja (1) / Nein (0)

    Zitat

    sendemail ist mir eigentlich auch klar, aber Welche Werte sind hier möglich? Sendemail ja= 1 und nein = 0?

    Richtig. Die option besagt ob systemmails aktiviert sind oder nicht. d.h. i.d.R. steht dies auf Nein (0)

    Zitat

    lastvisitdate wird ja später wahrscheinlich automatisch upgedated, oder?

    ja.

    Zitat

    activation: Welche Werte sind hier möglic

    Das Aktivierungstoken. Da der Joomla Registrierungsprozess aber übersprungen wird kann dieses Feld leer gelassen werden.

    Zitat

    params: Das stellt für mich derzeit das größte Fragezeichen. Was ist hier möglich/erforderlich?

    Die Parameter des Benutzers JSON encoded.

    Zitat

    lastresettime: Muss ich hier was eingeben?

    Nacht Joomla :)

    Zitat

    resetcount: Ist das die Anzahl der passwort resets? Wird das automatisch aktualisiert?

    Ja

    Zitat

    optkey: Was verbirgt sich hier hinter und was für Werte sind möglich?
    otep: Was verbirgt sich hier hinter und was für Werte sind möglich?

    Hier liegt die 2FA Konfiguration des Benutzers.

    Zitat

    Requirereset: Was verbirgt sich hier hinter und was für Werte sind möglich?

    Man kann einen Joomla Benutzer dazu zwingen sein PW zu ändern, wenn dieser Wer auf 1 gesetzt wird erzwingt Joomla einen PW reset :)

    Zitat

    Wie muss parent_id, lft und rgt mit Daten bestückt werden? Welche Werte sind hier möglich?

    Wie gesagt ich würde hier dringend davon abraten und dafür plädieren hier die Joomla API (addUserToGroup) dazu zu benutzen.

  • Also erst einmal danke für die ausführliche Antwort zero24 .


    Ich glaube, es macht an dieser Stelle einmal sinn, genauer zu beschreiben, was ich benötige, denn ich wüsste derzeit nicht, wie ich meine Anforderung mit overrides, alternativen Layouts oder Plugins lösen könnte. Da ich in Joomla aber immer noch weit davon entfernt bin, mich als Spezialisten zu bezeichnen und ich viele Dinge immer noch nicht weiß, lasse ich mich zur Lösung meiner Anforderung gerne eines besseren belehren.


    Also ich brauche zunächst einmal eine eine Frontend-Registrierung sowohl für Privatkunden als auch für Geschäftskunden (daher natürliche und juristische Personen).


    Die Formularmasken für diese beiden Kundentypen müssen unterschiedlich sein.


    So muss in der Privatkundenmaske zum Beispiel Vorname und Nachname getrennt abgefragt werden (Nicht wie in der normalen User-Registrierung einfach nur mit Namen). Außerdem müssen jede Menge weitere Daten zum Privatkunden abgefragt werden, die in der Standardregistrierung logischerweise nicht hinterlegt sind.

    In der Geschäftskundenmaske hingegen muss bei Registrierung zum Beispiel der Firmenname abgefragt werden. Auch Bankdaten etc. sind hier erforderlich.


    Ich habe versucht, das ganze mittels Fields zu lösen, indem ich zur Standard-User-Registrierung einfach weitere Formularfelder hinzugefügt habe. Problem daran war insbesondere der Name, der für Privatkunden zwingend in Vor- und Nachname getrennt sein muss.

    Ebenfalls habe ich das ganze bereits mittels einem Plugin (visforms) zu lösen. Das Problem hier war aber, dass das visforms logischerweise keinerlei Einfluss auf die tatsächlichen User nimmt. Es ist ein reines Formular-Plugin, jedoch kein User Management Plugin.

    Andere für meine Anforderung brauchbare Plugins habe ich - zumindest kostenfrei - nicht gefunden. Daher die Idee, selbst etwas zu bauen.


    Wie ich das ganze mit Overrides lösen könnte, weiß ich ehrlich gesagt nicht, lasse mich aber gerne belehren.


    Ein eigenes Joomla Auth Plugin scheidet glaube ich aus. Ich habe zwar PHP Kenntnisse, bin aber sicherlich weit davon entfernt, das derart professionell zu bauen. Ich bin Hobbyist, nicht professioneller Entwickler... ;-)


    Übrigens, ich wollte eigentlich gar nicht richtig extern gehen, sondern für mein Vorhaben durchaus in Joomla bleiben. Mit dem Plugin DirectPHP kann man nahezu alles innerhalb Joomla umsetzen.

  • denn ich wüsste derzeit nicht, wie ich meine Anforderung mit overrides, alternativen Layouts oder Plugins lösen könnte.

    in einer Kombination :)


    Also ich brauche zunächst einmal eine eine Frontend-Registrierung sowohl für Privatkunden als auch für Geschäftskunden (daher natürliche und juristische Personen).

    Umsetzbar über einen layout override + fields oder alternativ layout override + ein plugin welches die Felder einbaut.


    Ich habe versucht, das ganze mittels Fields zu lösen, indem ich zur Standard-User-Registrierung einfach weitere Formularfelder hinzugefügt habe. Problem daran war insbesondere der Name, der für Privatkunden zwingend in Vor- und Nachname getrennt sein muss.

    Ich persönlich würde hier drei Felder anlegen und dann beim Speichern die Werte für den Joomla Benutzer zusammenführen.


    Ein eigenes Joomla Auth Plugin scheidet glaube ich aus. Ich habe zwar PHP Kenntnisse, bin aber sicherlich weit davon entfernt, das derart professionell zu bauen. Ich bin Hobbyist, nicht professioneller Entwickler...

    Das wäre auch nur notwendig wenn du eine externe Benutzerverwaltung / Registrierung bauen würdest da du dir dann das manuelle anlegen der ganzen Benutzer sparst.


    Übrigens, ich wollte eigentlich gar nicht richtig extern gehen, sondern für mein Vorhaben durchaus in Joomla bleiben. Mit dem Plugin DirectPHP kann man nahezu alles innerhalb Joomla umsetzen.

    hmm ich behaupte jetzt mal alles was du mit DirectPHP machen würdest kannst du auch in einen Layout Override hinterlegen, hängst dich damit nicht an das Plugin und nutzt den Core Standard weg und die Core Registrierung.


    Grober Ablauf der Implementierung wäre der folgende:

    - Felder für die unterschiedlichen Benutzer identifizieren

    - Die User Felder im Backend in zwei unterschiedlichen Feld Kategorien anlegen

    - Einen Template Override für diese Datei anlegen: https://github.com/joomla/joom…stration/tmpl/default.php in der dann die unterschiedlichen Formulare implementiert werden. z.B. indem man mit einem Schalter zwischen Geschäftskunde und Privatkunde wechselt und dann entsprechend die Fields aus der Kategorie anzeigt welche benötigt werden.

    - Optional könnte in einem Plugin welches auf das Event "onUserBeforeSave" hört noch die beiden Felder für den Namen zusammengefügt werden sowie weitere Validierung wenn gewünscht. Alternativ zeigt man in dem override das Feld "Name" für den Nachnamen an und hat dort auch alle werte vorhanden.


    Alternativ würde es auch gehen in der Kombination von Overrides und einem eigenen Form Plugin das Formular sehr individuell umzuschreiben und dann auch Felder zusammen zu fügen und Validierungen zu implementieren. Bei letzterem könnte ich mir auch vorstellen das man das "showon" feature benutzen kann. Also alle Felder definieren und als erste Auswahl "Geschäftskunde vs Privatkunde" und dann bei allen Felder zu hinterlegen, dieses Feld anzeigen wenn ich ein Geschäftskunde bin und diese wenn ich Privatkunde bin.


    Um eigenes Programmieren wird man nicht herum kommen, DirektPHP ist bestimmt für einige Zwecke geeignet an dieser Stelle sehe ich es nicht da es hier schon um etwas mehr geht als nur um ein bisschen PHP code zur Ausgabe.

  • Und als kleine Anmerkung zu Tobias fantastischer Erläuterung:

    Wenn die Overrides richtig gelöst sind, kann man Felder vorausfüllen lassen, indem man z.B. URL-Parameter mitgibt. Da dies aber relativ unschön aussieht wäre nun der Clou, die Weiterleitungskomponente zu verwenden, indem man z.B. als URL "/kundenanmeldung" anlegt und dann intern auf die parametrisierte URL weiterleitet. (siehe auch hier)

    Dann bekommt die ganze Lösung auch ein super Gesicht.


    Mittels Overrides sind viele Sachen nur mit der Core-Registrierung möglich, z.B.: