2011-08-23 15 views
6

Vorrei aggiungere pipe ("|") tra le voci di menu per uno dei menu sul mio sito Drupal 7 (il nome del tema è "thompson"). Ho capito che il modo migliore per farlo è creare una funzione nel mio file template.php chiamato thompson_menu_link. L'ho fatto e sta modificando con successo i menu, ma sta cambiando tutti i menu. C'è un modo per farlo per un solo menu sul mio sito?Posso modificare theme_menu_link per un menu specifico?

Attualmente, ho usato le pagine di amministrazione per aggiungere il mio menu footer (percorso url: menu-footer-menu) al blocco Piè di pagina. Dovrei chiamarlo in un modo diverso?

+0

La parte che hai aggiunto sulla soluzione che hai adottato dovrebbe essere scritta come risposta. Se lo scriveste come risposta, lo voterei. ':-)' – kiamlaluno

+0

Siamo spiacenti, nuovo qui. Non sapevo se era una cattiva forma rispondere alla mia stessa domanda e accettarla. –

risposta

2

Apparentemente Drupal core fornisce la possibilità di theme menu links by menu name. Per il menu principale la funzione seguente tema dovrebbe funzionare

THEMENAME_menu_link__main_menu() 

In alternativa è possibile utilizzare il modulo Menu Block per creare blocchi di menu. Tra le altre cose il modulo crea ulteriori suggerimenti sui temi. Dal README del modulo:

Il blocco di menu utilizza le funzioni del tema del menu di Drupal core. Tuttavia, anche fornisce suggerimenti di hook del tema che possono essere utilizzati per sovrascrivere qualsiasi delle funzioni del tema chiamate da . ...

  • theme_menu_link() può essere sovrascritto con la creazione di uno dei seguenti:
    • [tema] _menu_link __ [nome del menu]()
    • [tema] _menu_link__menu_block()
    • [tema] _menu_link__menu_block __ [nome del menu]()
    • [tema] _menu_link__menu_block __ [blocco numero id]()
+0

Questa dovrebbe essere la risposta accettata. Puntelli @ Daniel –

0

il modo migliore che si può fare è installare il seguente modulo:

http://drupal.org/project/menu_attributes

Questo modulo consente di aggiungere classi speciali per alcune voci di menu, in modo da avere solo per aggiungere una classe rightpipe e definire quella classe come:

.rightpipe { border-right: 1px solid black } 

o

.rightpipe { background: url(1pixel_line_separator.png) no-repeat center right } 
2

Ho un po 'incasinato la funzione thompson_menu_link(). Non mi piace come l'ho fatto, ma ha fatto il lavoro. Fondamentalmente, legge nel nome del menu, e usa un condizionale per restituire l'elemento <li> con un pipe in seguito. Ecco l'intero blocco:

function thompson_menu_link(array $variables) { 
    $element = $variables['element']; 
    $menuName = $variables['element']["#original_link"]["menu_name"]; 
    $sub_menu = ''; 

    if ($element['#below']) { 
    $sub_menu = drupal_render($element['#below']); 
    } 

    $output = l($element['#title'], $element['#href'], $element['#localized_options']); 

    if ($menuName == "menu-footer-menu" && !in_array("last",$element['#attributes']['class']) { 
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>|\n"; 
    } 
    else { 
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n"; 
    } 

    return $finalString; 
} 
+1

Hai un errore in if ($ menuName == "menu-footer-menu" &&! In_array ("last", $ element ['# attributes'] ['class']) {. Ne necessita un'altra) alla fine. – canadiancreed

Problemi correlati