it-swarm.com.de

Wie entferne und / oder ändere ich das Feld "Name" im Registrierungsformular, damit ich Vor- und Nachnamen getrennt abfragen kann?

Ich habe ein Plugin entwickelt, mit dem ich ein benutzerdefiniertes Benutzerprofil erstellen kann. Es funktioniert und ich kann Felder nach Bedarf hinzufügen/entfernen.

Das Problem, mit dem ich konfrontiert bin, ist: Wie entferne und/oder ändere ich das Feld "Name" im Registrierungsformular, damit ich nach Vor- und Nachnamen getrennt fragen kann?

Da die Benutzerdatenbank einen Namen enthält, weiß ich, dass ich die Datei nicht einfach löschen kann. Daher dachte ich, es wäre am besten, den Vor- und Nachnamen in das Feld "Name" für den Eintrag in die Datenbank einzutragen. Bei dem Versuch, dies umzusetzen, stieß ich jedoch auf Probleme.

Um das Feld "Name" aus dem Registrierungsformular zu entfernen, habe ich die Funktion onContentPrepareForm () in meinem Profil-Plugin wie folgt ergänzt:

$ form-> removeField ('name');

Dadurch wird das Feld erfolgreich entfernt. Allerdings muss ich jetzt an anderer Stelle name = Vorname + Nachname setzen. Ich habe in diesen Foren gelesen, dass ich die Daten in der Funktion onUserBeforeSave () ändern könnte. Leider wird dies nicht aufgerufen, bevor eine Bestätigungsfehlermeldung angezeigt wird, die besagt, dass die Registrierung fehlgeschlagen ist und ich einen Namen eingeben muss. Ich habe dann versucht, erforderlich in der registration.xml -Datei auszuschalten. Das hat nicht funktioniert (oder ich habe die falsche Datei geändert).

Ich dachte dann, dass ich es vielleicht in die Funktion onContentPrepareData () setzen könnte. Das Problem, auf das ich hier gestoßen bin, ist, dass der Name aus dem Formular entfernt wurde und nicht im $ data-Array enthalten ist.

Was sollte ich tun? Was ist der richtige Weg, um dies zu beheben?

Vielen Dank im Voraus für Ihre Hilfe.

2
nimble

Lassen Sie mich zunächst sagen, dass ich diese Methode nicht gutheiße. Wenn Sie Joomla das nächste Mal aktualisieren, besteht eine hohe Wahrscheinlichkeit, dass Sie diese Änderungen vollständig rückgängig machen.

Dies ist jedoch eine Arbeitsmethode, um das zu tun, was Sie erreichen möchten.

Bearbeiten Sie die Dateikomponenten> com_users> models> forms> registration.xml

Kommentieren Sie das Namensfeld aus

<!--<field
    name="name"
    type="text"
    description="COM_USERS_REGISTER_NAME_DESC"
    filter="string"
    label="COM_USERS_REGISTER_NAME_LABEL"
    required="true"
    size="30"
/>-->

Fügen Sie diese 2 Felder hinzu

<field
    name="firstname"
    type="text"
    description="Users First Name"
    filter="string"
    label="First Name"
    required="true"
    size="30"
/>

<field
    name="lastname"
    type="text"
    description="Users First Name"
    filter="string"
    label="First Name"
    required="true"
    size="30"
/>

In der Datei Komponenten> com_users> Controller> registration.php

Fügen Sie diese Codezeile in die Zeile 127 ein:

$requestData['name'] = $requestData['firstname'].' '.$requestData['lastname'];

Gleich nach

$requestData = $this->input->post->get('jform', array(), 'array');

Dadurch werden Ihre Vor- und Nachnamenfelder mit dem für die Joomlas-Registrierung erforderlichen Namensfeld verknüpft.

Bei der anderen Methode können Sie einfach Community Builder installieren, alle gewünschten benutzerdefinierten Felder einrichten und CB die Registrierung für Sie übernehmen lassen, anstatt com_users. Auf diese Weise können Sie auch zu einem späteren Zeitpunkt benutzerbezogene Felder in der Datenbank abfragen, indem Sie die CB-Tabellen in der Datenbank mit der Benutzer-ID als Filter abfragen.

2
Terry Carter

Sie können einen anderen Registrierungscontroller erstellen und das Verhalten von register () überschreiben.

<?php
class UsersControllerRegistration2 extends UsersController
{
    public function register()
    {
        ...
        $requestData = $this->input->post->get('jform', array(), 'array');
        $requestData['name'] = $requestData['firstname'].' '.$requestData['lastname'];
        ...
        $data   = $model->validate($form, $requestData);
        ...
    }
}
?>

Sie können die fehlenden Teile dieser register () -Methode in der ursprünglichen Methode sehen. Nennen Sie diese neue Controller-Datei registration2.php und speichern Sie sie im Verzeichnis components/com_users/controllers /.

In Ihrem Registrierungsformular müssen Sie das Aktionsziel und die Aufgabeneingabe ändern (indem Sie die Registrierungsansicht in Ihrer Vorlage überschreiben).

 <form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration2.register'); ?>" method="post" class="form-validate form-horizontal well" enctype="multipart/form-data">
 ...
  <input type="hidden" name="task" value="registration2.register" />
 ...
 </form>

Wenn ich die Details nicht vergesse, sollte es funktionieren und keine Kerndateien modifizieren.

1
titchagcreation