it-swarm.it

Personalizzazione dell'output del collegamento al menu

In Drupal 7, come posso intercettare il rendering dei menu in template.php e aggiungere pipe dopo i collegamenti ai menu?

Ho provato ad usare template_preprocess_menu_tree ma non credo sia quello che sto cercando. Voglio cambiare la struttura HTML di un paio di menu.

7
Kevin

theme_menu_link () ha fatto il trucco. Contiene un array sotto l'elemento di #original_link che contiene il nome del menu. Usando quello, posso aggiungere collegamenti delimitati da pipe ad alcuni menu.

http://api.drupal.org/api/drupal/includes--menu.inc/function/theme_menu_link/7

7
Kevin

Questo può essere utile. È possibile utilizzare le funzioni di preelaborazione per modificare o aggiungere qualcosa al collegamento al menu.

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

In questo intervallo di codice aggiunto ad ogni elemento del collegamento di navigazione.

5
kalabro

Personalmente aggiungerei semplicemente la pipe con CSS - non vuoi davvero che le pipe nel tuo markup siano puramente presentazionali:

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

.breadcrumb li:last-child::after {
  content: "";
}
5
danbohea

I menu sono a tema con la funzione theme_links. Ti consigliamo di creare una copia nella tua [cartella temi] /MYTHEME/template.php e rinominarla in MYTHEME_links. Puoi trovare la funzione predefinita per drupal 7 visitando: http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_links/ 7

Ora sarai in grado di personalizzare l'aspetto dei menu dal file template.php.

1
Gelus

Raccomando di usare un plugin per questo. Tutorial completo qui: Crea un collegamento di menu con markup html 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;
  }

}
0

L'uso dell'HTML in un'opzione di menu sarebbe molto utile anche da un modulo, ovvero l'inserimento di un'immagine come opzione di menu. C'è un modo per usare qualcosa come function MODULE_preprocess_menu_link(&$variables).

PS: Lo farò anche come una domanda separata.

0
Gabriel R.