_hook_form_alter
_を使用して、作成または編集されたノードの代わりにノードを作成または編集した後、ユーザーをカスタムページにリダイレクトするにはどうすればよいですか?
hook_form_alter()
の現在のコードは次のとおりです。
_function custom_form_alter(&$form, &$form_state, $form_id) {
if ($form['#id'] == 'custom-node-form') {
$form['actions']['submit']['#value'] = t('Add Entry');
$form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
}
}
_
_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';
}
_
hook_form_FORM_ID_alter()
は特定のフォームに対して呼び出されるため、実際には必要ありませんが、他の2つのフックは複数のフォームに対して呼び出されます。$form['#node']
_が含まれています。 「カスタム」は、ユーザーがノードを編集した後にユーザーをリダイレクトするコンテンツタイプの短いIDです。$form_state['redirect']
_をhook_form_alter()
から変更しても効果はありません。送信ハンドラから設定する必要があります。このコードはDrupal 7サイトで動作します。
/**
* Implements hook_form_alter()
*/
function custom_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'article_node_form') {
$form['actions']['submit']['#submit'][] = 'mysubmit_node_submit';
}
}
function mysubmit_node_submit($form, &$form_state) {
$form_state['redirect'] = '/homepage';
}
これは、たとえば次のいずれかの行を使用して、_$form_state['redirect']
_を設定することで実行できます。
_$form_state['redirect'] = "some-internal-path";
_
_$form_state['redirect'] = array($path, $options_array, $http_code);
_
drupal_goto()
に渡す引数と同じです。
これがオプションであるかどうかはわかりませんが、これがコンテンツタイプの場合は、特定のコンテンツタイプの更新または作成時にトリガーされるルールを設定することにより、Rulesモジュールを使用してこれをかなり迅速に達成できます。