web-dev-qa-db-fra.com

Changer le titre du lien du menu dynamiquement?

J'essaie de modifier le texte d'un élément de menu dynamiquement en fonction de certaines variables.

J'utilise hook_menu_alter comme ceci:

function mymodule_menu_alter(&$items) {
  $items['toggle-review-process']['title'] = 'asdf';
}

Le problème est que cela ne fait rien. Cette entrée de menu est là, mais elle n'a normalement pas de titre, et l'ajout de la clé ne fait rien. Comment puis-je modifier dynamiquement le texte de cet élément de menu?

5
Joren

Assurez-vous également de comprendre le fonctionnement du système de menus. La structure du menu n'est créée qu'une fois à chaque effacement du cache. C'est à ce moment que hook_menu_alter() sera appelé. Les résultats sont ensuite stockés dans la base de données. Il ne suffit donc pas d'implémenter ce hook pour créer des titres de menu dynamiques. Vous pouvez cependant l'utiliser pour ajouter un rappel de titre qui sera appelé à chaque fois qu'un lien vers l'élément de menu sera rendu. Pour plus de détails, consultez http://drupal.org/node/140311 (D6, mais la logique de base s'applique toujours à D7).

Du haut de ma tête:

function mymodule_menu_alter(&$items) {
    $items['toggle-review-process']['title callback'] = 'mymodule_title_callback';
    $items['toggle-review-process']['title arguments'] = array(1, 'some string');
}

function mymodule_title_callback($arg1, $arg2) {
    $title = 'create the title';
    return $title;
}
3
berliner

S'il s'agit d'un élément de menu que vous avez défini dans hook_menu(), vous pouvez simplement ajouter une déclaration title callback Et, si nécessaire, title arguments Pour lui passer.

Si l'élément de menu a été créé ailleurs, j'ai trouvé que l'implémentation de hook_preprocess() vous permet de modifier le texte du menu via le gigantesque tableau $variables.

Cela ne fonctionnera que pour les éléments de menu sur les pages non mises en cache; sinon, le premier titre affiché est mis en cache avec la page.

2
scronide

Pour créer/modifier le menu dynamique, vous pouvez utiliser le module Token Men .

Le module Menu Token fournit des jetons, qui peuvent être utilisés dans le titre ou dans le chemin des éléments de menu (liens). Par exemple, si vous créez un élément de menu avec le chemin: "utilisateur/[utilisateur actuel: uid]", l'URL sera modifiée "à la volée" en: "utilisateur/1" (en supposant que vous êtes l'utilisateur 1).

Il dépend du module Token .

1
user12068