web-dev-qa-db-ja.com

フォーム送信でノードIDを取得する

私は私のuser_register_form_submitでノードIDを取得する方法に苦労しています。私のフォームがあるノードのノードIDを取得する必要があります。説明しましょう:

特別なコンテンツタイプのノードに印刷するために、ユーザー登録フォームのtplを作成しました。これらのノードはフォームに事前入力され、ユーザーの作成に役立ちます。フォームを送信した後にノードを削除するには、このノードIDが必要です。ユーザーが作成された後のノード。

ここに私のフックがあります:

    function hook_form_alter(&$form, &$form_state, $form_id) {
        if($form_id == 'user_register_form'){
            $form['#submit'][] = 'user_register_form_submit';
        }
    }

    function user_register_form_submit($form, &$form_state) {
    // print the node id
    }

最後に、Drupal 7.で作業しています。ありがとうございます。

ユーザー登録フォーム埋め込みコードの下に1行追加します。

$form = drupal_get_form('user_register_form'); 
print drupal_render($form);

echo "<script>
  jQuery(document).ready(function() {
    jQuery('#user-register-form').append('<input type=\"hidden\" name=\"nid\" value=".arg(1).">');
  });
</script>";

次に、次のようなユーザー登録送信関数内のノードのnidを取得します。

function user_register_form_submit($form, &$form_state) {
  // print the node id
  echo $form_state['input']['nid'];
}

また、hook_form_alter。 1つの非表示フィールドを追加し、その値としてnidを割り当てます。

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register_form') {
    $form['#submit'][] = 'user_register_form_submit';
    $form['nid'] = array(
      '#value' => arg(1),
      '#type' => 'hidden',
    );
  }
}
1
ARUN

Drupal 8の場合:カスタム送信ハンドラを次の形式で追加します。

$form['actions']['submit']['#submit'][] = '_custom_node_form_submit';

そしてカスタム送信ハンドラを追加します:

function _custom_node_form_submit($form, \Drupal\Core\Form\FormStateInterface $form_state) {
  echo $form_state->getValue('nid');
}

Niks の答えを拡張します。

function custom_module_form_validate(&$form, &$form_state) {
  // This will print the node id.
  var_dump(arg(1)); 
}

これを実際に試してみるまで、実際にはわかりませんでした。クレジットはニクスに行く必要があります。

注意; Drupal docs arg()から、「現在のDrupalパスのコンポーネントを返します。」この場合は2番目です。つまり、これはすべてのフォームがノードパスを使用するわけではないため、すべてのフォームで機能しません

編集:以下のMPDのコメントからの情報の組み込み結果のコードが読みにくいため、この関数の使用は可能な限り避けてください。メニューのコールバック関数で、名前付き引数を使用してみてください。引数を取るコールバックの作成方法については、menu.incの説明を参照してください。この関数を使用して現在のパスから要素をロードしようとしたとき。ノードをノードページにロードするには、代わりに menu_get_object ()を使用します。

0
Christian