私は私の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',
);
}
}
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 ()を使用します。