2009-08-25 58 views
0

我在Drupal主题中有点新手,我无法在论坛模块主题中获得一个细节。模块中的Drupal主题功能工作流程

forum.module文件包含控制该模块是如何主题 并拥有这条线

function forum_theme() { 
...... 
'forum_list' => array(
    'template' => 'forum-list', 
    'arguments' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL), 
), 

我也看到forum-list.tpl.php文件目录论坛功能forum_theme,所以我开始怀疑,当这个文件被调用,它从哪里获取数据,但是我可以在forum.module中找到这个函数。

function template_preprocess_forum_list(&$variables) 

我错过了什么吗?所以一般来说,我的问题是谁和何时调用自定义注册的主题功能,如forum_list

回答

0

简单的答案是,如果你在你的主题目录中放置mytheme-forum-list.tpl.php(其中mytheme是你的主题的名称)并定制它,drupal应该选择它(首先清除缓存)。

这条线template_preprocess_forum调用Drupal主题功能

$variables['forums'] = theme('forum_list', 
           $variables['forums'], 
           $variables['parents'], 
           $variables['tid']); 

这将参考线forum_theme()

'forum_list' => array(
     'template' => 'forum-list', 
     'arguments' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL), 
    ), 

它告诉模板enging找论坛,list.php的和提供参数。

如果您安装devel module并打开主题开发者模块。这将向您展示Drupal在呈现内容时将查找的所有候选模板和函数。

一般来说(但有特殊的例外情况),Drupal会寻找最佳匹配模板并回退到预先定义的函数。

如果没有匹配的东西。看看theme guide,并在具体的Overriding themable output部分,你也可能会发现hook_theme的利益。