function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form['#node']->type == 'custom') {
$form['actions']['submit']['#value'] = t('Add Entry');
$form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
$form['#submit'][] = 'custom_node_submit';
}
}
function custom_node_submit($form, &$form_state) {
$form_state['redirect'] = 'choose/your/path';
}
コードは、フォームを送信するためにクリックされたボタンとは別にフォームをリダイレクトします。特定の送信ボタンがクリックされたときにのみフォームをリダイレクトする場合は、次のコードを使用する必要があります。
function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form['#node']->type == 'custom') {
$form['actions']['submit']['#value'] = t('Add Entry');
$form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
$form['actions']['submit']['#submit'][] = 'custom_node_submit';
}
}
function custom_node_submit($form, &$form_state) {
$form_state['redirect'] = 'choose/your/path';
}
- フォームIDにはハイフンは含まれません。フォームIDは、フォーム(別名フォームビルダー)を生成するPHP関数の名前であり、PHP関数の名前にハイフンを含めることはできません。
- フォームIDは、hook_form_alter()、hook_form_BASE_FORM_ID_alter()、およびhook_form_FORM_ID_alter()の実装に渡されます。
hook_form_FORM_ID_alter()
他の2つのフックは複数のフォームに対して呼び出されますが、特定のフォームに対して呼び出されるため、実際には必要ありません。
- 最初の関数はhook_form_BASE_FORM_ID_alter()の実装です; この場合、基本フォームIDは「node_form」であり、これはノード編集フォームの基本フォームです。
- ノード編集フォームには
$form['#node']
、編集中のオブジェクトのノードオブジェクトであるが含まれています。「カスタム」は、ユーザーがノードを編集した後にユーザーをリダイレクトするコンテンツタイプの短いIDです。
- 変更すること
$form_state['redirect']
からしてhook_form_alter()
も効果はありません。送信ハンドラから設定する必要があります。