2012-03-09 96 views
0

我試圖在Drupal 7中設計一個塊,並且我很難搞清楚事情!Drupal 7中的樣式菜單塊的菜單鏈接

我已經使用menu_block模塊從主菜單中獲取所有鏈接。它產生一個帶有ul鏈接的塊,我想以每個菜單樹的div爲主題。

樣式本身應該很容易,但我真的很難找到我應該用它來設計主題鉤子/模板文件名。

我試圖掛鉤到theme_menu_treetheme_menu_link,但他們主題太多的地方,我看不到我的造型。我試過menu-tree--menu-block--main-menu.tpl.php,但這些變量並不是我所需要的。

我的想法是,我需要在block.tpl.php中設置$content變量的樣式,但我無法弄清楚如何爲特定塊執行此操作。如果我想在顯示塊(塊類型)時顯示菜單點(在頁腳中),我該在哪裏插入?

回答

2

我認爲最簡單的(不一定是最好的)的地方,在hook_block_view_alter()

function MYMODULE_block_view_alter(&$data, $block) { 
if ($block->module == 'menu_block') { 
    // Extract the links from the available data 
    $links = element_children($data['content']['#content']); 
    $content = ''; 

    // Loop through the links and build up the required output. 
    foreach ($links as $link) { 
     $content .= '<div class="something">' . l($link['#title'], $link['#href']) . '</div>'; 
    } 

    // Assign the new output to the block content...done :) 
    $data['content'] = $content; 
    } 
} 

Devel module做到這一點,它的方便dpm()功能在這裏你最好的朋友......他們會告訴你檢查任何PHP在標準消息區域以一種很好的結構化格式變量。如果你還沒有安裝它,我建議這樣做,這對於Drupal開發來說絕對是必須的。

不要忘記清理Drupal的緩存,一旦你已經實現了該鉤子或系統不會撿起它。

+0

非常感謝!這樣做的工作:)但重寫$ data ['content']的內容似乎很危險。如果另一個模塊做同樣的事情,那麼我的代碼可能會破壞:S你說這不一定是最好的方法。你有其他的想法如何解決它? – 2012-03-11 12:35:54

+1

思考我不確定是否有更好的方法,它只是覺得應該在那個時候:)你可以確保你的鉤子在過程中被稱爲最後一個通過設置你的模塊的「weight」列爲「系統」表中的數字很大......這將確保您的被覆蓋的內容將總是「贏」,可以這麼說。 – Clive 2012-03-13 19:31:53

2

我有一個非常類似的問題,試圖找出如何正確命名我的模板和掛鉤。谷歌搜索並沒有幫助(太多的噪音),但最終我試過Menu Block module documentation上drupal.org,它使我在正確的方向...

模板:menu-block-wrapper--main-menu.tpl.php

<nav role="navigation" id="siteNavigation"> 
<?php echo render($content); ?> 
</nav> 

鉤:THEMENAME_menu_tree__menu_block__MENUNAME()THEMENAME_menu_link__menu_block__MENUNAME()

function THEME_menu_tree__menu_block__main_menu($vars) { 
    return '<ul class="my-custom-menu-wrapper">' . $vars['tree'] . '</ul>'; 
} 

function THEME_menu_link__menu_block__main_menu($data) { 

    $el = $data['element']; 

    // ... render any classes or other attributes that need to go in this <li> 
    $attr = drupal_attributes($el['#attributes']); 

    // ... render the menu link 
    $link = l($el['#title'], $el['#href'], $el['#localized_options']); 

    // ... and render any submenus 
    $sub_menu = drupal_render($el['#below']); 

    return sprintf("\n<li %s>%s %s</li>", $attr, $link, $sub_menu); 
} 
0

使用打印主題,你可以把CSS樣式的< UL>

print theme('links', array('links' => menu_navigation_links($your_menu_name), 'attributes' => array('class'=> array('ul_class'))));