Rediriger l'utilisateur après l'ajout / modification d'un nœud

13

Je souhaite rediriger les utilisateurs vers une page personnalisée, après avoir créé un nœud ou l'éditer.

ousneo
la source

Réponses:

6

Vous pouvez utiliser hook_form_alterpour ajouter un gestionnaire d'envoi personnalisé dans lequel vous pouvez définir le chemin de redirection.

Voir le FAPI pour plus de détails sur la redirection de formulaires.

googletorp
la source
1
Merci pour votre réponse ! j'ai lu sur le FAPI mais j'ai encore une question à poser: où dois-je mettre la fonction hook_form_alter?
ousneo
2
@ousneo Dans drupal 7, vous pouvez le mettre dans votre thème ou dans un module personnalisé que vous créez.
googletorp
1
s'il vous plaît voir @Dmitry Vyal réponse
Capi Etheriel
1
Voici un module qui fait une redirection après l'enregistrement. drupal.org/project/node_save_redirect
polyclick
1
Bien qu'acceptée, cette réponse est trop brève pour être utile. La façon dont vous ajoutez votre gestionnaire d'envoi personnalisé est vraiment importante , et cette réponse est muette à ce sujet. La meilleure réponse à mon humble avis est celle de @leymannx (mais voir en commentant le cas d'utilisation de l'édition).
Radical gratuit du
4

Vous pouvez créer une règle qui redirige l'utilisateur vers n'importe quelle page lorsqu'il crée ou modifie un type de contenu spécifique. Lorsque vous ajoutez une règle, sélectionnez "Après la création de nouveau contenu", ajoutez également une condition de "Contenu de type". La section You Do vous donnera la possibilité de rediriger un utilisateur vers la page de votre choix.

Pour une redirection après avoir modifié un nœud, créez simplement une nouvelle règle et sélectionnez "Après la mise à jour du contenu existant" comme première option.

kiamlaluno
la source
J'ai utilisé des règles pour rediriger après avoir créé un contenu spécifique, mais l'utilisateur ne reçoit aucun commentaire maintenant. Je veux montrer à l'utilisateur que "Votre contenu est créé". Comment puis-je améliorer cela?
wallace740
1
Ajoutez une autre action après l'action de redirection vers "Afficher un message configurable sur le site" et ajoutez votre message personnalisé à partir de là.
J'ai ajouté une autre règle mais je pense que je manque quelque chose dans mon thème personnalisé car le message n'est pas affiché sur ma page d'accueil. J'utilise un module «Meilleurs messages» pour afficher ce genre de messages dans une popup! config de règles
wallace740
D'après mon expérience, la superposition enfreint les règles de redirection, méfiez-vous.
Capi Etheriel
Dans mon cas, le formulaire d'ajout de nœud a été intégré à l'intérieur d'un panneau. hook_form_alter ne l'a pas saisi. Mais les règles ont très bien fonctionné!
Druvision
2

Lors de cette opération, assurez-vous également de ne pas définir une destination existante possible qui est normalement ajoutée à l'URL lorsque vous cliquez sur le bouton Modifier pour modifier un nœud existant.

Remplacer articledans MYMODULE_form_article_node_form_alteravec le nom de la machine de votre type de contenu.

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function MYMODULE_form_article_node_form_alter(&$form, &$form_state, $form_id) {

  $form['actions']['submit']['#submit'][] = '_MYMODULE_node_form_redirect';
}

/**
 * Submit callback.
 */
function _MYMODULE_node_form_redirect($form, &$form_state) {

  // Unset destination first.
  unset($_GET['destination']);
  unset($_REQUEST['edit']['destination']);

  $form_state['redirect'] = 'FOO/BAR';
}
leymannx
la source
Cela fonctionne pour les redirections après avoir ajouté un nœud, mais pas après l'avoir modifié. Je comprends que les appels à unsetl' destinationest censé gérer l'utilisation de modifier le cas, mais ils ont aucun effet sur mon site Drupal 7.
Radical gratuit du
@FreeRadical - Vous avez raison. J'ai mis à jour la réponse pour utiliser hook_form_BASE_FORM_ID_alter à la place, qui cible à la fois - ajouter et modifier.
leymannx
@FreeRadical - Informations supplémentaires: différence entre créer un nouveau nœud et modifier un nœud dans le formulaire .
leymannx
1

La documentation n'est pas très claire à ce sujet, mais vous devez modifier la $_GET['destination']variable, pas $_REQUESTou $form_state['redirect'].

Dmitry Vyal
la source
1
La modification de $ form_state ['redirect'] fonctionne très bien dans Drupal 7 ...
Felix Eve
1

dans Drupal 7, vous pouvez modifier le formulaire d'édition de nœud pour 'attacher' votre propre fonction d'envoi, dans laquelle vous pouvez modifier form_state du formulaire de confirmation de suppression de nœud pour inclure le paramètre 'destination' ... venez de le faire dans un thème personnalisé i ' ai été développé comme un sous-thème du thème d'administration «sept» ...

Documentation pour hook_form_FORM_ID_alter

Vous pouvez ajouter ce crochet à un modèle / thème, pas seulement aux modules.

donc dans votre thème template.php, ajoutez ce formulaire alter hook:

function yourtheme_node_delete_form_submit( &$form, &$form_state ) {
    $form_state[ 'redirect' ][ 1 ][ 'query' ][ 'destination' ] = "admin/content";
}

et puis, le tour est joué. n'est plus redirigé vers la page d'accueil après la suppression d'un nœud.

kris
la source