En utilisant hook_form_alter
, Comment puis-je rediriger un utilisateur vers une page personnalisée après avoir créé ou modifié un nœud au lieu du nœud qui a été créé ou modifié?
Le code actuel de hook_form_alter()
est le suivant:
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';
}
Le code redirige le formulaire indépendamment du bouton cliqué pour soumettre le formulaire. Si vous souhaitez rediriger un formulaire uniquement lorsque vous cliquez sur un bouton de soumission spécifique, vous devez utiliser le code suivant.
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()
n'en a pas vraiment besoin, car il est appelé pour un formulaire spécifique, tandis que les deux autres hooks sont invoqués pour plus d'un formulaire.$form['#node']
, Qui est l'objet nœud de l'objet en cours de modification; "personnalisé" est l'ID court du type de contenu que vous souhaitez rediriger les utilisateurs une fois qu'ils ont modifié un nœud.$form_state['redirect']
À partir de hook_form_alter()
n'a aucun effet; il doit être défini à partir d'un gestionnaire de soumission.Ce code fonctionne sur un site 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';
}
Cela peut être fait en définissant $form_state['redirect']
, Par exemple en utilisant l'une des lignes suivantes.
$form_state['redirect'] = "some-internal-path";
$form_state['redirect'] = array($path, $options_array, $http_code);
Ce sont les mêmes arguments que vous passeriez à drupal_goto()
.
Je ne sais pas si c'est une option pour vous, mais s'il s'agit d'un type de contenu, vous pouvez y parvenir assez rapidement en utilisant le module Règles en définissant une règle à déclencher lors de la mise à jour ou de la création d'un certain type de contenu.