2010-11-10 26 views
2

我有一些非节点数据在我的自定义模块中,我想要调用一个模板来显示数据。这个模板可能会重用于电子邮件输出,我想基本上只是引导Drupal并根据需要使用模板。Drupal:我如何在模块中调用模板?

我想我可能只是这样做:

$html = theme('verysmallsnippet', $my_fancy_data_structure); 

...然后创建一个verysmallsnippet.tpl.php文件中的活动主题文件夹,然后期望的Drupal找到模板文件,并评估与传递参数的模板主题功能。这是对模板引擎如何工作的巨大过度简单的解释 - 或者我需要首先设置主题注册表?或者是什么?

我看着this question,以及theme文件,我有点失落。

回答

3

是啊,稍微过于简单;)

对于比你链接的API文档更好的介绍,开始与Theming Guide,并为您的具体需要,检查Using the theme layer (Drupal 6.x)

为了让您的示例工作,你需要通过实施hook_theme()讲述您的模板主题注册表:

function yourModule_theme($existing, $type, $theme, $path) { 
    $items = array(); 
    $items['verysmallsnippet'] = array(
    'arguments' => array('my_fancy_data_structure' => array()), // Change array() to a fitting default 
    'template' => 'verysmallsnippet', 
); 

    return $items; 
} 

您可以在挂机定义更多的细节,但是这是你为了所需要的最低限度获取一个使用的模板文件(引擎将在您查找文件时添加'tpl.php'部分)。

注意:每次添加或更改hook_theme()实现时,都需要触发重建主题注册表,否则您的更改将不会生效。

+0

哦,实际上,这使得我的脑海里放了很多东西,特别是模板文件如何在模板中“知道如何命名变量”。我将调查主题指南。我看到了比我列出的两件事情更清楚的事情,但在搜索时无法再找到它。非常感谢你! – cgp 2010-11-10 20:20:46

+0

如果我在这里错了,请纠正我,但要“告诉主题注册表关于我的hook_theme实现更改”我应该通过管理菜单或使用drupal_rebuild_theme_registry()调用清除缓存 - 对吗? – cgp 2010-11-10 20:28:30

+0

@altCognito:很高兴有帮助。至于模板部分中的“知道如何命名变量”,您可能需要特别关注文档中的'template_preprocess()'函数的概念 - 其基本思想是您只需传递最少的将需要的数据添加到您的初始theme()调用中,并且预处理函数负责将模板“扩展”到模板中所需的所有不同变量中(换句话说,将编码逻辑放在模板之外并将其放入预处理函数,比如,例如从路径创建适当的链接,计算寻呼机信息等) – 2010-11-10 20:40:23