2015-03-30 45 views
1

我正在drupal的第一個網站上工作,並且還閱讀了主題和模塊開發的一些基礎知識。現在,我創建(壓倒一切的主題鮮明的)我自己的主題,即page.tpl.php中並沒有要求輸出主菜單項的主題()函數:爲什麼要在page.tpl.php中使用theme()函數?

<?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?> 

我大致瞭解該功能是什麼,但爲什麼我應該在這種情況下使用它?如果從模塊輸出數據 - 通過選定的主題風格化輸出,這將是有意義的。但在這種情況下,我需要的所有東西都直接在$main_menu數組中,我可以將其設置爲無論如何,但是我想要什麼,theme()函數在page.tpl.php中有什麼用處?

回答

3

爲什麼要在page.tpl.php中使用theme()函數?

您不應該。在你的page.tpl.php中

/** 
* Implements hook_preprocess_page(). 
*/ 
function yourtheme_preprocess_page(&$vars) { 
    $vars['main_menu'] = theme('links__system_main_menu', array('links' => $vars['main_menu'], 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); 
} 

,然後簡單地print $main_menu;

爲了避免調用主題()函數在你的頁面模板,你可以在你的template.php做到這一點。

+1

答案可能不會提供OP要求的內容,但他現在需要知道的內容。加1指出Drupal的良好實踐。 – D34dman 2015-03-31 10:32:34

+0

它不起作用 - 我將該函數添加到template.php,並且print $ main_menu正在返回「Array」字符串。順便說一句。 $ main_menu已經在page.tpl.php中定義了,註釋如下:* - $ main_menu(array):一個包含 – Incredible 2015-03-31 11:11:53

+0

的主菜單鏈接的數組你可以在你的template.php中搜索main_menu嗎?它應該在那裏定義,因爲這個變量在你的page.tpl.php中可用。你應該找到它的定義,並覆蓋它。 – 2015-03-31 16:11:17

0

的一點是,如果你走線槽Drupal的主題系統,它提供了一個機會,其他安裝的模塊做了改變 - 他們的鉤子函數將被調用:

https://www.drupal.org/node/933976

換句話說,如果你不要做「乾淨」的方式,可能會發生某些其他模塊功能無法使用的情況。

1

使用theme('links__system_main_menu', ...)的要點是要重新使用現有的通用links主題實現的主題。 system_main_menu後綴(後兩個_),允許您提供通用links的更具體的實現。如果您然後覆蓋首頁(即page-front.tpl.php)和nodes of a specific content的頁面模板,則不必複製HTML代碼。這使得更容易維護,因爲您不必將更改複製到多個文件。

+0

有道理,謝謝.. – Incredible 2015-04-02 10:12:44

相關問題