web-dev-qa-db-fra.com

Personnalisation de la sortie du lien de menu

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.

7
Kevin

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

7
Kevin

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.

5
kalabro

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: "";
}
5
danbohea

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.

1
Gelus

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;
  }

}
0
Stef Van Looveren

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.

0
Gabriel R.