Rediriger vers une page personnalisée après l'ajout ou la modification d'un nœud
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';
}
- L'ID du formulaire ne contient pas de tirets. L'ID du formulaire est le nom de la fonction PHP qui génère le formulaire (a.k.a. le générateur de formulaire), et une fonction PHP ne peut pas contenir de tirets dans son nom).
- L'ID de formulaire est transmis aux implémentations de hook_form_alter () , hook_form_BASE_FORM_ID_alter () et hook_form_FORM_ID_alter () .
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. - La première fonction est l'implémentation de hook_form_BASE_FORM_ID_alter () ; dans ce cas, l'ID du formulaire de base est "node_form" qui est le formulaire de base pour le formulaire d'édition de nœud.
- Le formulaire d'édition de nœud contient
$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. - La modification de
$form_state['redirect']
À partir dehook_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.