web-dev-qa-db-fra.com

Créer un formulaire Web qui crée un compte utilisateur

Je cherche à créer un formulaire d'inscription utilisateur sur un site Drupal 8 qui a plusieurs sections clairement définies (éventuellement sur des pages séparées).

J'ai exploré cela avec les outils de construction de formulaires d'enregistrement standard Drupal dans les paramètres du compte, mais il ne semble pas possible de créer un formulaire avec une telle mise en page en utilisant uniquement les paramètres du compte (corrigez-moi si je je me trompe).

Le module de formulaire Web me permet de créer un formulaire dont le style est exactement celui que je souhaite, mais je ne sais pas comment créer un compte d'utilisateur avec des données entrées dans un formulaire Web. Y a-t-il un autre module que je peux utiliser pour cela ou puis-je le faire à partir du module de formulaire Web?

6
Robert Nixon

Donc, comme je l'ai mentionné dans mon commentaire, la bonne façon d'y parvenir est d'utiliser la fonctionnalité Handlers dans Webform, pour cela nous avons besoin d'un module personnalisé pour que notre Handler apparaisse dans admin/structure/webform/manage/[WebformName]/handlers

Une chose dont vous devez vous assurer est correcte, c'est la structure du dossier du module, afin que le formulaire Web le lise comme un handler, nous supposons que le nom du module est ici: webform_handler_user_creation donc la structure ressemblerait à ceci: webform_handler_user_creation>src>Plugin>WebformHandler>UserCreationHandler.php avec un webform_handler_user_creation.info.yml fichier à la racine du répertoire du module.

Cela dit, voici un exemple du module sur ma page github

Donc, ce que nous devons faire en premier est de nous assurer de faire notre travail après avoir enregistré la soumission du formulaire Web, puis de charger les valeurs de soumission et de les utiliser en fonction de leurs noms de machine pour remplir notre truc de création d'utilisateur, voici le code:

<?php
namespace Drupal\webform_handler_user_creation\Plugin\WebformHandler;

use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\WebformSubmissionInterface;
use Drupal\webform\Entity\WebformSubmission;
/**
 * Webform submission action handler.
 *
 * @WebformHandler(
 *   id = "usercreate",
 *   label = @Translation("User Create"),
 *   category = @Translation("Action"),
 *   description = @Translation("Creates a user after submission"),
 *   cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_UNLIMITED,
 *   results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
 *   submission = \Drupal\webform\Plugin\WebformHandlerInterface::SUBMISSION_OPTIONAL,
 * )
 */

class UserCreationHandler extends WebformHandlerBase {
  /**
   * {@inheritdoc}
   */
  public function postSave(WebformSubmissionInterface $webform_submission, $update = TRUE) {
        $user = \Drupal\user\Entity\User::create();
        $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
        $user_name = $webform_submission->getElementData('user_name');
        // Mandatory user creation settings
        $user->enforceIsNew();
        $user->setPassword('testPassword');
        $user->setEmail('[email protected]');
        $user->setUsername($user_name); // This username must be unique and accept only a-Z,0-9, - _ @ .
        $user->set("langcode", $language);
        // Optional settings
        $user->set("init", 'email');
        $user->set("preferred_langcode", $language);
        $user->set("preferred_admin_langcode", $language);
        $user->activate();
        // Add a custom role in case you need one
        $user->addRole('CustomRoleName');
        //Save user
        $user->save();

  }
}

notez également l'espace de noms au début du fichier, c'est là qu'il est chargé dans la zone d'administration d'un formulaire Web comme l'image suivante: enter image description here

Notez que dans cet exemple, nous utilisons $user_name comme le seul champ qui est rempli dynamiquement à partir de la soumission du formulaire Web, vous devez remplacer le reste en fonction des noms de machine de vos champs de formulaire Web

2
Sohail
There is a module for that.

Forms Steps fournit une interface utilisateur pour créer des workflows de formulaires à l'aide des modes de formulaires. Il crée des formulaires en plusieurs étapes rapides et configurables.

3
jrockowitz

Bienvenue dans Drupal Answers!

Si le style est la seule préoccupation ici, je recommande fortement de ne pas utiliser le formulaire Web sur le processus d'enregistrement par défaut de Drupal. Vous pouvez simplement ajouter plus de champs à l'utilisateur à partir des paramètres du compte et les faire afficher lors de l'inscription. Avantages:

  1. Les données restent attachées à l'entité utilisateur même après l'enregistrement, ce qui signifie que les utilisateurs auront la possibilité de modifier les valeurs fournies lors de l'enregistrement.
  2. Vous pouvez les utiliser facilement pour créer les pages de profil si vous le souhaitez.
  3. Vous pouvez utiliser ces champs comme filtres sur la page de liste des utilisateurs.
  4. Beaucoup d'autres cas selon le site.

En ce qui concerne le thème du formulaire, j'ai fait une recherche rapide et trouvé des liens utiles:

  1. Drupal 8: Comment thématiser n'importe quelle forme .
  2. Envoyez un formulaire à twig template .
  3. Comment puis-je créer un thème pour un formulaire personnalisé?
  4. Thème des éléments de formulaire dans Drupal 8 .
2
AjitS

J'ai pu le faire sur plusieurs sites Drupal 8 et j'ai pu créer des utilisateurs sur les deux Drupal & civicrm. J'ai utilisé du code personnalisé pour créer un utilisateur dans Drupal en prenant les valeurs soumises.

Voici un fil mais il est ancien et peut avoir une approche différente avec Drupal 8.6.x

https://www.drupal.org/forum/support/module-development-and-code-questions/2015-03-04/how-to-programmatically-create-a-user

Il s'agit de créer des utilisateurs dans le code après la soumission du formulaire Web. Pour le modèle, vérifiez ceci: https://www.drupal.org/docs/8/theming/twig

0
Bhavin Joshi