[Résolu] envoyer un drupal_set_message sur la page d'après

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

j'ai un petit soucis, je souhaiterai envoyer un message via drupal_set_message() dans la page d'après.

Je m'explique :

Je souhaiterai que lorsque l'utilisateur clique sur un lien donné .. il soit redirigé vers la page , jusqu’à normal .. mais je souhaiterai lui ajouter un petit message perso ...

voili - voilou

Version de Drupal : 

Bonjour Damien,

Pour être un peu plus précis ..
J'ai un site multi-langue (fr / en) avec du contenu qui peut être traduit ou non (cela dépend des contenus) , j'utilise le block language_switch_links distribué dans module/translation/translation.module (disponnible dans la version 7.17 de drupal) pour afficher en bas de mes pages un block avec dedans un drapeau fr et un drapeau en qui me permettent lorsque je suis sur mon contenu d'acceder à la version traduite du contenu.

Le module translation Implements hook_language_switch_links_alter(). de telle manière à ce que lorsqu'il n'y à pas de traduction disponible pour le contenu le drapeau (anglais) soit barré .. on ne peut donc pas y cliquer dessus

<?php
foreach ($links as $langcode => $link) {
      if (isset(
$translations[$langcode]) && $translations[$langcode]->status) {
       
// Translation in a different node.
       
$links[$langcode]['href'] = 'node/' . $translations[$langcode]->nid . $matches[2];
      }
      else {
       
// No translation in this language, or no permission to view.
       
unset($links[$langcode]['href']);
       
$links[$langcode]['attributes']['class'][] = 'locale-untranslated'; // on barre le drapeau
     
}
?>

Ce que j'ai fait c'est que j'ai modifié cette fonction pour non pas affiché le drapeau barré , mais autorisé le Click dessus, et dans le cas ou il n'y à pas de contenu je redirige vers la page d'acceuil et je souhaite affiché un message du style 'This content has no translation ... sorry'

j'ai donc modifié la fonction précédente comme suit

<?php
foreach ($links as $langcode => $link) {
      if (isset(
$translations[$langcode]) && $translations[$langcode]->status) {
       
// Translation in a different node.
       
$links[$langcode]['href'] = 'node/' . $translations[$langcode]->nid . $matches[2];
      }
      else {
       
// No translation in this language, or no permission to view.
        //unset($links[$langcode]['href']);
        //$links[$langcode]['attributes']['class'][] = 'locale-untranslated';
       
$links[$langcode]['href'] = '';
      
drupal_set_message('This content has no  translation ... sorry');
      }
?>

Simplement lorsque j'ouvre ma page sur le contenu lui même le message s'affiche ..

Je souhaiterai qu'il s'affiche uniquement lorsque l'utilisateur clique sur le lien et qu'il est redirigé vers la page d'accueil.

Pour faire simple :

/
* Implements hook_menu();
*/
function hook_menu() {
$items = array();
$items['no-tranlation'] = array(
    'title'            => t('No translation'),
    'page callback'    => 'MON_MODULE_no_translation_callback',
    'access arguments' => array('access content'),
    'type'             => MENU_CALLBACK,
);
return $items;
}

/
* Callback menu "no-translation"
*/
function MON_MODULE_no_translation_callback(){
    drupal_set_message(t('This content has no  translation ... sorry'),'warning');
    drupal_goto('');
}

Ne pas oublier de modifier la variable $links[$langcode]['href'] = ''; en $links[$langcode]['href'] = 'no-translation';