【问题标题】:Drupal: How do I invoke a template in a module?Drupal:如何在模块中调用模板?
【发布时间】:2010-11-10 19:52:14
【问题描述】:

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

我想我可以这样做:

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

...然后在活动主题文件夹中创建一个verysmallsnippet.tpl.php 文件,然后期望 Drupal 找到模板文件并使用传递给主题函数的参数评估模板。这是对模板引擎如何工作的过度简单化的解释——还是我需要先设置主题注册表?要不然是啥?

我查看了this question,以及theme 文档,有点迷茫。

【问题讨论】:

    标签: templates drupal-6


    【解决方案1】:

    是的,有点过于简单化了;)

    要获得比您链接的 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() 实现时都需要触发主题注册表的重建,否则您的更改将不会生效。

    【讨论】:

    • 哦,其实这把很多部分放在了我的脑海中,特别是模板文件如何“知道如何命名变量”在模板中。我将调查主题指南。我看到的东西比我列出的两件事更清楚,但在搜索时无法再次找到它。非常感谢!
    • 如果我在这里错了,请纠正我,但要“告诉主题注册表我的 hook_theme 实现更改”,我应该通过管理菜单或使用 drupal_rebuild_theme_registry() 调用清除缓存——对?
    • @altCognito:很高兴能帮上忙。至于模板部分中的“知道如何命名变量”,您可能需要特别查看文档中 template_preprocess() 函数的概念 - 这些基本思想是您传递最少的所需数据到您的初始主题()调用,预处理函数负责将其“扩展”为模板中所需的所有不同变量(换句话说,将编码逻辑保留在模板之外并将其放入预处理函数中,例如例如,从路径创建适当的链接、计算寻呼机信息等)
    • @altCognito:抱歉,没有及时注意到您的第二条评论。是的,通过管理菜单清除缓存是开发过程中最简单的方法(drupal_rebuild_theme_registry() 是从代码中执行此操作的方法,这是清除缓存时管理菜单使用的方法)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多