web-dev-qa-db-ja.com

1つのフォームでノードとユーザーを作成する

コンテンツタイプ「A」があります。次に、ユーザー登録フォームフィールドと「A」作成フォームフィールドを含むフォームが必要です。したがって、ユーザー(匿名)がこのフォームを送信すると、ユーザーと、情報が入力されたタイプ「A」のノードが作成されます。

私は今これを持っています:

function my_module_menu() {
  $items['create_node_and_user'] = array(
    'page callback' => 'user_and_node_creation_form',
    'type' => MENU_CALLBACK,
    'access callback' => TRUE,
  );

  return $items;
}

function user_and_node_creation_form() {
  module_load_include('inc', 'node', 'node.pages');
  $output = array();
  $output['user'] = drupal_get_form('user_register_form');
  $output['node_type_a'] = node_add('node_type_a');

  return $output;
}

フォームは正常に表示されますが、ユーザーの登録後にノード作成を管理する送信ハンドラを追加するにはどうすればよいですか?

2
Alfonso_MA

モジュールの作成と登録 は、contribモジュールの使用を気にしない場合にこれを行います。プロジェクトページから...

このモジュールは「遅延登録」を作成します。これは、ユーザーが最初にコンテンツを作成し、これがサイトにログインまたは登録した後に行われることを意味します。

プロセス

  1. 匿名ユーザーがコンテンツを作成する
  2. ノードの作成が完了した後、ユーザーはログインページにリダイレクトされます(設定フォームで設定した場合)。
  3. ユーザーが登録またはログインする
  4. 作成されたノードは、ログイン後にユーザーに割り当てられます
3
Shawn Conn

hook_form_alter() を使用して元のDrupal登録フォーム(フォームid: 'user_register_form')を変更)すると、ユーザー登録フォームのフィールドを変更できます。

次に、このフォームの送信ハンドラを追加して、ノードの作成など、何か特別なことを行います。

$form['actions']['submit'][]='my_own_submit';

あなた自身の送信機能で:

function my_own_submit($form, &$form_state){
  //create a node
  $node = new stdClass();
  $node->title = "YOUR TITLE";
  $node->type = "YOUR_NODE_TYPE";
  node_object_prepare($node); // Sets some defaults. Invokes hook_prepare() and hook_node_prepare().
  $node->language = LANGUAGE_NONE; // Or e.g. 'en' if locale is enabled
  $node->status = 1; //(1 or 0): published or not
  $node->promote = 0; //(1 or 0): promoted to front page
  $node->comment = 1; // 0 = comments disabled, 1 = read only, 2 = read/write
  $node = node_submit($node); // Prepare node for saving
  node_save($node);
}
2
Tim Yao

また、有望に見える インライン登録 もあります。

  • ユーザーがログインしていない場合、user_register()フォームをノード/追加ページに追加します
  • 新しいコンテンツを新しいユーザーに関連付けます
  • ユーザー登録設定に応じて、ノード作成後にユーザーをログインできます
  • モジュールとの互換性:email_registration、logintoboggan、registration_toboggan、その他
1
donquixote