Dans Drupal 7, comment puis-je intercepter le rendu de menu dans template.php et ajouter des tuyaux après les liens de menu?
J'ai essayé d'utiliser template_preprocess_menu_tree mais je ne pense pas que ce soit ce que je recherche. Je veux changer la structure HTML de quelques menus.
theme_menu_link () a fait l'affaire. Il contient un tableau sous l'élément de #original_link
qui contient le nom du menu. En utilisant cela, je peux ajouter des liens délimités par des tuyaux à certains menus.
http://api.drupal.org/api/drupal/includes--menu.inc/function/theme_menu_link/7
Cela peut être utile. Vous pouvez utiliser les fonctions de prétraitement pour modifier ou ajouter quelque chose au lien du menu.
function THEME_preprocess_menu_link(&$variables) {
$variables['element']['#below']['#markup'] = ' <span>→</span>';
}
Dans cette plage de code ajoutée à chaque élément de lien de navigation.
Personnellement, je voudrais simplement ajouter le canal avec CSS - vous ne voulez pas vraiment les canaux dans votre balisage car ils sont purement présentationnels:
.breadcrumb li:after {
content: "|";
margin: 0 5px; // optional styling nicety
}
.breadcrumb li:last-child::after {
content: "";
}
Les menus ont pour thème la fonction theme_links. Vous voudrez créer une copie dans votre [dossier de thèmes] /MYTHEME/template.php et la renommer en MYTHEME_links. Vous pouvez trouver la fonction par défaut pour drupal 7 en visitant: http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_links/ 7
Vous pouvez maintenant personnaliser l'apparence des menus à partir du fichier template.php.
Je recommande d'utiliser un plugin pour cela. Tutoriel complet ici: Créer un lien de menu avec un balisage html dans drupal 8
namespace Drupal\MYMODULE\Plugin\Menu;
use Drupal\Core\Menu\MenuLinkDefault;
/**
* A menu link that displays number of points.
*/
class MyMessagesMenuLink extends MenuLinkDefault {
/**
* {@inheritdoc}
*/
public function getTitle() {
$count = 0;
if(\Drupal::currentUser()->isAuthenticated()) {
// Load in your count here
...
}
return $this->t('My messages <span class="badge badge-dark">@count</span>', ['@count' => $count]);
}
/**
* {@inheritdoc}
*/
public function getCacheMaxAge() {
return 0;
}
}
L'utilisation de HTML dans une option de menu serait également très utile à partir d'un module, c'est-à-dire l'insertion d'une image comme option de menu. Existe-t-il un moyen d'utiliser quelque chose comme function MODULE_preprocess_menu_link(&$variables)
.
PS: Je vais aussi poser cette question séparément.