2011-08-23 11 views
6

Chciałbym dodać potoki ("|") pomiędzy pozycjami menu dla jednego z menu na mojej stronie Drupala 7 (nazwa motywu to "thompson"). Pomyślałem, że najlepszym sposobem, aby to zrobić, jest utworzenie funkcji w moim pliku template.php o nazwie thompson_menu_link. Zrobiłem to i z powodzeniem modyfikuję menu, ale zmienia ono wszystkie menu. Czy jest sposób, w jaki mogę to zrobić w przypadku jednego menu na mojej stronie?Czy mogę zmodyfikować opcję theme_menu_link dla określonego menu?

Obecnie użyłem stron administracyjnych, aby dodać moje stopki menu (ścieżka URL: menu-stopka-menu) do bloku stopki. Czy powinienem to nazwać inaczej?

+0

Dodana część dotycząca przyjętego rozwiązania powinna zostać napisana jako odpowiedź. Jeśli napisałeś to jako odpowiedź, głosowałbym w górę. ':-)' – kiamlaluno

+0

Przepraszamy, nowy tutaj. Nie wiedziałem, czy to była zła forma, aby odpowiedzieć na moje własne pytanie i zaakceptować to. –

Odpowiedz

2

Najwyraźniej rdzeń Drupala zapewnia możliwość theme menu links by menu name. Do menu głównego motywu poniższa funkcja powinna działać

THEMENAME_menu_link__main_menu() 

Alternatywnie można użyć modułu Menu Block tworzyć bloki menu. Między innymi moduł tworzy dodatkowe sugestie tematów. Z modułu README:

Blok menu wykorzystuje funkcje menu głównego Drupala. Jednak także dostarcza sugestii przechwytywania motywów, które mogą być użyte do zastąpienia dowolnej z funkcji motywu przez nią wywołanej. ...

  • theme_menu_link() może być zastąpiona przez utworzenie jednego:
    • [tematu] _menu_link __ [nazwa menu]()
    • [tematu] _menu_link__menu_block()
    • [tematu] _menu_link__menu_block __ [nazwa menu]()
    • [motyw] _menu_link__menu_block __ [bloku Nr id]()
+0

To powinna być zaakceptowana odpowiedź. Rekwizyty @daniels –

0

najlepszym sposobem można je instaluje następujący moduł:

http://drupal.org/project/menu_attributes

Moduł ten umożliwia dodawanie specjalnych klas dla niektórych pozycji menu, więc po prostu trzeba dodać klasę rightpipe i określić, że klasa jak:

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

lub

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

Połączyłem trochę z funkcją thompson_menu_link(). Nie podoba mi się, jak to zrobiłem, ale to się udało. Zasadniczo odczytuje w nazwie menu i używa warunku, aby później zwrócić element <li> z rurą. Oto cały blok:

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

Masz błąd, jeśli ($ menuName == "menu-stopka-menu" &&! In_array ("last", $ element ['# attributes'] ['class']) {. Wymaga innego) na końcu. – canadiancreed

Powiązane problemy