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?
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:
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
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.
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:
En ce qui concerne le thème du formulaire, j'ai fait une recherche rapide et trouvé des liens utiles:
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
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