2011-08-23 27 views
6

Tôi muốn thêm các đường ống ("|") giữa các mục menu cho một trong các menu trên trang web Drupal 7 của tôi (tên chủ đề là "thompson"). Tôi đã tìm ra cách tốt nhất để làm điều này là tạo một hàm trong tệp template.php của tôi có tên là thompson_menu_link. Tôi đã làm điều đó và nó là thành công sửa đổi các menu, nhưng nó thay đổi tất cả các menu. Có cách nào tôi có thể thực hiện việc này chỉ với một menu trên trang web của mình không?Tôi có thể sửa đổi theme_menu_link cho một menu cụ thể không?

Hiện tại, tôi đã sử dụng các trang quản trị để thêm menu chân trang của mình (đường dẫn url: menu-footer-menu) vào khối Chân trang. Tôi có nên gọi nó theo một cách khác?

+0

Phần bạn đã thêm về giải pháp bạn đã chấp nhận phải được viết dưới dạng câu trả lời. Nếu bạn viết câu trả lời đó, tôi sẽ bỏ phiếu. ':-)' – kiamlaluno

+0

Xin lỗi, mới đây. Không biết nếu nó là hình thức xấu để trả lời câu hỏi của riêng tôi và chấp nhận nó. –

Trả lời

2

Dường như lõi Drupal cung cấp khả năng theme menu links by menu name. Đối với menu Chính, chức năng chủ đề sau đây sẽ hoạt động

THEMENAME_menu_link__main_menu() 

Hoặc bạn có thể sử dụng mô-đun Menu Block để tạo khối menu. Trong số những thứ khác, mô-đun tạo thêm đề xuất chủ đề. Từ README của mô-đun:

Khối menu sử dụng chức năng chủ đề menu của lõi Drupal. Tuy nhiên, nó cũng cung cấp đề xuất móc chủ đề có thể được sử dụng để ghi đè bất kỳ hàm nào trong số các chức năng chủ đề được gọi bởi nó. ...

  • theme_menu_link() có thể được ghi đè bằng cách tạo ra một trong số:
    • [chủ đề] _menu_link __ [tên menu]()
    • [chủ đề] _menu_link__menu_block()
    • [chủ đề] _menu_link__menu_block __ [tên menu]()
    • [chủ đề] _menu_link__menu_block __ [khối số id]()
+0

Đây phải là câu trả lời được chấp nhận. @ Chuyên ngành kỹ thuật –

0

cách tốt nhất bạn có thể làm cho nó được cài đặt các module sau:

http://drupal.org/project/menu_attributes

Module này cho phép bạn thêm các lớp học đặc biệt đối với một số mục trình đơn, vì vậy bạn chỉ cần thêm một lớp rightpipe và xác định rằng lớp như:

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

hoặc

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

Tôi đã sai với chức năng thompson_menu_link() một chút. Tôi không thích làm thế nào tôi đã làm nó, nhưng nó đã hoàn thành công việc. Về cơ bản, nó đọc trong tên menu, và sử dụng một điều kiện để trả về phần tử <li> với một đường ống sau đó. Đây là toàn bộ khối:

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

Bạn có lỗi trong if ($ menuName == "menu-footer-menu" &&! In_array ("last", $ element ['# attributes'] ['class']) {. Cần một cái khác) ở cuối. – canadiancreed

Các vấn đề liên quan