本文參考自這幾篇
Using the theme layer (Drupal 7.x)
Using template (.tpl.php) files in your own module
依照參考資料,雖然實務上我們也可以在template樣版檔中進行如資料庫讀寫的動作,但theme 以及 module 的角色上應該是分工明確的,theme處理的是外觀表現上的架構,而module則主要是提供theme所需要的資料。這樣當網站規模越來越龐大的時候,較能有效率的管理。
那麼兩者透過什麼連結起來呢? 就是hook_theme()這個函數。透過實例來說明怎麼應用。
我們可以透過taxonomy_term_theme() 這個函數名稱,來與taxonomy-term.tpl.php進行掛勾(hook),不過為免與系統函數混淆,taxonomy_term_theme() 的函數名稱需要取為 my_module_name_taxonomy_term_theme() ,其中 my_module_name代表的是目前撰寫模組的名稱
function forum_theme() { return array( 'forums' => array( //取用forums.tpl.php這個樣版檔 'template' => 'forums', //六個要傳遞給樣版檔的預設值 'variables' => array('forums' => NULL, 'topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL), ), //... ); }
我們再看看forums.tpl.php這個檔案
<?php if ($forums_defined): ?> <div id="forum"> <?php print $forums; ?> <?php print $topics; ?> </div> <?php endif; ?>
可以注意到這個樣板檔中取用了三個變數 $forums_defined, $forums, $topics。
基本上完成以上兩件事情,之後就可以利用theme("forums",array(...))來快速產生輸出內容了。