web-dev-qa-db-fra.com

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');
  }
}
14
Citricguy
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 de hook_form_alter() n'a aucun effet; il doit être défini à partir d'un gestionnaire de soumission.
16
kiamlaluno

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';
}
9
sea26.2

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() .

4
Shoaib Nawaz

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.

2
Aaron Ortega