Drupal 8サイトに複数の明確に定義されたセクション(おそらく別のページ)がある)にユーザー登録フォームを作成しようとしています。
私はこれをアカウント設定で標準のDrupal登録フォーム構築ツールで実行してみましたが、アカウント設定だけを使用してそのようなレイアウトでフォームを作成することはできないようです(私が間違っている)。
Webformモジュールを使用すると、希望どおりのスタイルのフォームを作成できますが、webformに入力されたデータを使用してユーザーアカウントを作成する方法がわかりません。これに使用できる別のモジュールはありますか、それともwebformモジュール内から実行できますか?
コメントで述べたように、これを実現する適切な方法は、Handlers
をadmin/structure/webform/manage/[WebformName]/handlers
に表示するためのカスタムモジュールが必要なため、WebformのHandler
機能を使用することです。
正しいことを確認する必要があることの1つは、モジュールフォルダーの構造です。これにより、webformはそれをhandler
として読み取ります。ここでは、モジュール名はwebform_handler_user_creation
であると想定しているため、構造は次のようになります。 this:webform_handler_user_creation>src>Plugin>WebformHandler>UserCreationHandler.php
with the webform_handler_user_creation.info.yml
file in the root of the module directory.
以上のことから、 これは私のgithubページにあるモジュールの例です
したがって、最初に行う必要があるのは、Webフォームの送信を保存した後で確実に実行し、送信値をロードし、マシン名に基づいてそれらを使用してユーザー作成のものに入力することです。これがコードです。
<?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();
}
}
また、ファイルの先頭にある名前空間にも注意してください。これは、次の画像のように、Webフォームの管理領域に読み込まれる場所です。
この例では、Webフォームの送信から動的に入力される唯一のフィールドとして$user_name
を使用していることに注意してください。Webフォームフィールドのマシン名に従って残りを置き換える必要があります。
There is a module for that.
フォームステップ は、フォームモードを使用してフォームワークフローを作成するためのUIを提供します。それは迅速かつ構成可能なマルチステップフォームを作成します。
Drupal Answersへようこそ!
ここでスタイリングが唯一の懸念事項である場合、Drupalのデフォルトの登録プロセスではなくWebフォームを使用しないことを強くお勧めします。アカウント設定からユーザーにフィールドを追加するだけで、登録時にそれらのフィールドを表示できます。利点:
フォームのテーマについては、簡単な検索を行ったところ、いくつかの便利なリンクが見つかりました。
複数のDrupal 8サイトでこれを達成でき、Drupalとcivicrmの両方でユーザーを作成できました。いくつかのカスタムコードを使用して、送信された値を取得することにより、Drupalでユーザーを作成しました。
これはスレッドですが、古く、Drupal 8.6.xとは異なるアプローチをとっている可能性があります
これは、Webフォームが送信された後にコードでユーザーを作成することです。テンプレートについては、これを確認してください: https://www.drupal.org/docs/8/theming/twig