it-swarm.com.de

Erstellen Sie ein Webformular, mit dem ein Benutzerkonto erstellt wird

Ich möchte ein Benutzerregistrierungsformular auf einer Drupal 8-Site erstellen, die mehrere klar definierte Abschnitte enthält (möglicherweise auf separaten Seiten).

Ich habe dies mit den Standardwerkzeugen zum Erstellen von Registrierungsformularen Drupal in den Kontoeinstellungen untersucht, aber es scheint nicht möglich zu sein, ein Formular mit einem solchen Layout nur mit Kontoeinstellungen zu erstellen (korrigieren Sie mich, wenn ich falsch liege ).

Mit dem Webformularmodul kann ich ein Formular erstellen, das genau so gestaltet ist, wie ich es möchte. Ich bin mir jedoch nicht sicher, wie ich ein Benutzerkonto mit in ein Webformular eingegebenen Daten erstellen soll. Gibt es ein anderes Modul, das ich dafür verwenden kann, oder kann ich es innerhalb des Webform-Moduls tun?

6
Robert Nixon

Wie ich in meinem Kommentar erwähnt habe, besteht der richtige Weg, dies zu erreichen, darin, die Handlers -Funktionalität in Webform zu verwenden. Dazu benötigen wir ein benutzerdefiniertes Modul, damit unser Handler in admin/structure/webform/manage/[WebformName]/handlers

Eine Sache, die Sie sicherstellen müssen, ist die Struktur des Modulordners, damit das Webformular ihn als handler liest. Wir gehen davon aus, dass der Modulname hier lautet: webform_handler_user_creation Die Struktur wäre ungefähr so: webform_handler_user_creation>src>Plugin>WebformHandler>UserCreationHandler.php mit einer webform_handler_user_creation.info.yml - Datei im Stammverzeichnis des Modulverzeichnisses.

Nach alledem hier ist ein Beispiel für das Modul auf meiner Github-Seite

Was wir also zuerst tun müssen, ist sicherzustellen, dass wir unser Ding nach dem Speichern der Webformular-Übermittlung machen, dann die Übermittlungswerte laden und sie basierend auf ihren Computernamen verwenden, um unser Benutzererstellungs-Ding auszufüllen. Hier ist der 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();

  }
}

beachten Sie auch den Namespace am Anfang der Datei. Hier wird er in den Verwaltungsbereich eines Webformulars geladen, wie im folgenden Bild dargestellt: enter image description here

Beachten Sie, dass in diesem Beispiel $user_name Als einziges Feld verwendet wird, das dynamisch aus der Übermittlung des Webformulars ausgefüllt wird. Sie müssen den Rest gemäß den Computernamen Ihrer Webformularfelder ersetzen

2
Sohail
There is a module for that.

Forms Steps bietet eine Benutzeroberfläche zum Erstellen von Formularworkflows mithilfe von Formularmodi. Es werden schnelle und konfigurierbare mehrstufige Formulare erstellt.

3
jrockowitz

Willkommen bei Drupal Answers!

Wenn das Styling hier das einzige Problem ist, würde ich dringend empfehlen, kein Webformular über den Standardregistrierungsprozess von Drupal zu verwenden. Sie können dem Benutzer einfach weitere Felder aus den Kontoeinstellungen hinzufügen und diese bei der Registrierung anzeigen lassen. Leistungen:

  1. Die Daten bleiben auch nach der Registrierung an die Benutzerentität angehängt, was bedeutet, dass die Benutzer die Möglichkeit haben, die bei der Registrierung angegebenen Werte zu bearbeiten.
  2. Sie können sie bei Bedarf problemlos zum Erstellen der Profilseiten verwenden.
  3. Sie können diese Felder als Filter auf der Seite mit den Benutzerlisten verwenden.
  4. Viele andere Fälle je nach Standort.

Zum Thema des Formulars habe ich eine schnelle Suche durchgeführt und einige nützliche Links gefunden:

  1. Drupal 8: Wie man eine Form thematisiert .
  2. Senden Sie ein Formular an twig Vorlage .
  3. Wie gestalte ich ein benutzerdefiniertes Formular?
  4. Theming-Formularelemente in Drupal 8 .
2
AjitS

Ich konnte dies auf mehreren Drupal 8-Sites erreichen und Benutzer sowohl auf Drupal als auch auf civicrm erstellen. Ich habe einen benutzerdefinierten Code verwendet, um einen Benutzer in Drupal zu erstellen, indem ich die übermittelten Werte verwendet habe.

Hier ist ein Thread, aber er ist alt und hat möglicherweise einen anderen Ansatz mit Drupal 8.6.x.

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

Hier geht es darum, Benutzer im Code zu erstellen, nachdem das Webformular gesendet wurde. Überprüfen Sie die Vorlage wie folgt: https://www.drupal.org/docs/8/theming/twig

0
Bhavin Joshi