Anpassen der Menü-Link-Ausgabe

7

Wie kann ich in Drupal 7 das Rendern von Menüs in template.php abfangen und Pipes nach Menüverknüpfungen hinzufügen?

Ich habe versucht, template_preprocess_menu_tree zu verwenden, aber ich glaube nicht, dass ich danach suche. Ich möchte die HTML-Struktur einiger Menüs ändern.

Kevin
quelle
Sprechen Sie von einem Menü-Link oder nur von den lokalen Aufgaben-Links des Menüs?
Kiamlaluno
Benutzerdefinierte Menüs, Hauptmenü, keine lokalen Aufgaben.
Kevin
Mein Kommentar vom 27. September 13 Die Verwendung von HTML in einer Menüoption wäre auch für ein Modul sehr nützlich, dh das Einfügen eines Bildes als Menüoption. Gibt es eine Möglichkeit Gebrauch so etwas wie zu tun function MODULE_preprocess_menu_link(&$variables). PS: Ich werde dies auch als separate Frage stellen.
Gabriel R. vor

Antworten:

5

Dies kann hilfreich sein. Sie können Vorverarbeitungsfunktionen verwenden, um den Menülink zu ändern oder etwas hinzuzufügen.

function THEME_preprocess_menu_link(&$variables) {
  $variables['element']['#below']['#markup'] = ' <span>→</span>';
}

In diesem Code wird jedem Navigationslinkelement eine Spanne hinzugefügt.

Kalabro
quelle
5

Persönlich würde ich die Pipe nur mit CSS hinzufügen - Sie möchten die Pipes nicht wirklich in Ihrem Markup haben, da sie rein präsentativ sind:

.breadcrumb li:after {
  content: "|";
  margin: 0 5px; // optional styling nicety
}

.breadcrumb li:last-child::after {
  content: "";
}
Danbohea
quelle
1

Menüs sind mit der Funktion theme_links thematisiert. Sie möchten eine Kopie in Ihrem [Themenordner] /MYTHEME/template.php erstellen und in MYTHEME_links umbenennen. Die Standardfunktion für Drupal 7 finden Sie unter: http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_links/7

Jetzt können Sie anpassen, wie die Menüs in der Datei template.php aussehen.

Gelus
quelle
Das funktioniert auch nicht. Es werden nur die Kontextlinks ausgegeben (mit krumo und var_dump für $ Variablen). Dies ist, was ich in D6 ziemlich sicher verwendet habe, aber es scheint, Menüs in einem Menüblock nicht zu berühren.
Kevin
Ich musste dies nur für bestimmte Menüs tun, diese Antwort half. theme_menu_link enthält ein Array über das Menü, in dem es sich befindet, sodass ich die Ausgabe anpassen kann, wenn es sich um ein bestimmtes Menü handelt. stackoverflow.com/questions/2317462/…
Kevin
0

Ich empfehle dafür ein Plugin zu verwenden. Vollständiges Tutorial hier: Erstellen Sie einen Menülink mit HTML-Markup in 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;
  }

}
Stef Van Looveren
quelle