web-dev-qa-db-fra.com

Comment puis-je supprimer et / ou modifier le champ 'Nom' du formulaire d'inscription afin de pouvoir demander le prénom et le nom séparément?

J'ai développé un plugin qui me permet de créer un profil utilisateur personnalisé. Cela fonctionne et je peux ajouter/supprimer des champs si nécessaire.

Le problème auquel je suis confronté est le suivant: Comment puis-je supprimer et/ou modifier le champ "Nom" du formulaire d'inscription afin de pouvoir demander le nom et le prénom séparément?

Parce que la base de données des utilisateurs contient un nom, je sais que je ne peux pas simplement laisser tomber le fichier. Donc, je pensais qu'il serait peut-être préférable de concaténer le prénom et le nom de famille dans le champ 'nom' pour les entrer dans la base de données. Cependant, en essayant de mettre cela en œuvre, j'ai rencontré des problèmes.

Pour supprimer le champ 'nom' du formulaire d'inscription, j'ai ajouté ce qui suit à la fonction onContentPrepareForm () dans mon plugin de profil:

$ form-> removeField ('name');

Cela supprime le champ avec succès. Cependant, je dois maintenant définir nom = prénom + nom de famille ailleurs. J'ai lu sur ces forums que je pouvais changer les données dans la fonction onUserBeforeSave (). Malheureusement, ce n'est pas appelé avant que je reçois un message d'erreur de validation disant que l'enregistrement a échoué et que je dois entrer un nom. J'ai ensuite essayé de désactiver les éléments requis dans le fichier registration.xml. Cela n'a pas fonctionné (ou j'ai changé le mauvais fichier).

J'ai alors pensé que je pourrais peut-être le mettre dans la fonction onContentPrepareData (). Le problème que j'ai rencontré ici est que 'nom' a été supprimé du formulaire et que ce n'est pas dans le tableau $ data.

Que devrais-je faire? Quelle est la bonne façon de résoudre ce problème?

Merci d'avance pour votre aide.

2
nimble

Permettez-moi de commencer par dire que je ne tolère pas cette méthode. Lors de la prochaine mise à jour de Joomla, il est très probable que vous annuleriez complètement ces modifications.

C'est cependant une méthode de travail pour faire ce que vous essayez d'accomplir.

Editez les composants du fichier> com_users> modèles> formulaires> registration.xml

Commentez le champ du nom

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

Ajouter ces 2 champs

<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"
/>

Dans le fichier composants> com_users> contrôleurs> registration.php

Ajoutez cette ligne de code autour de la ligne 127:

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

Juste après

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

Cela concaténera vos champs prénom et nom de famille dans le champ du nom requis par l'enregistrement Joomlas.

L’autre méthode consiste simplement à installer Community Builder, à configurer les champs personnalisés de votre choix et à laisser CB gérer votre inscription à la place de com_users. Cela vous permettrait également d'interroger ultérieurement les champs liés à l'utilisateur de la base de données si vous avez besoin d'interroger les tables CB de la base de données en utilisant l'ID utilisateur comme filtre.

2
Terry Carter

Vous pouvez créer un autre contrôleur d'enregistrement et remplacer le comportement de register ().

<?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);
        ...
    }
}
?>

Vous pouvez voir les parties manquantes de cette méthode register () dans la méthode d'origine. Nommez ce nouveau fichier contrôleur registration2.php et placez-le dans le répertoire components/com_users/controllers /.

Dans votre formulaire d'inscription, vous devez modifier la cible de l'action et la saisie de la tâche (modifiez-la en remplaçant la vue d'enregistrement sur votre modèle).

 <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>

Si je n'ai pas oublié les détails, cela devrait fonctionner sans modifier aucun fichier de base.

1
titchagcreation