如何从自定义Drupal模块将变量注入页面模板?

时间:2010-05-05 21:12:59

标签: drupal drupal-6 drupal-modules drupal-theming

我们已经创建了一个自定义模块,用于组织和发布我们的简报内容。

我现在遇到的问题 - 我是主流和Drupal模块开发的新手,所以它可能只是一个知识问题,而不是Drupal问题 - 是如何让每个时事通讯主题化。< / p>

此时我们的简报的URL结构将是:

/ newsletters / {newsletter-name} / {edition-name} / {issue-date}这意味着我们可以使用诸如page-newsletters- {newsletter-name}之类的文件名在我们的主题中创建模板文件 - {edition- name} .tpl.php,太棒了。我遇到的一个问题是所有内容都来自主题的$ content变量。我想让它通过不同的变量来实现(这样我就可以在主题内部将某些内容放在某些区域。)

有没有正确的方法呢?

编辑:回答一些问题:问题是一个节点(有问题,版本和简报节点),并且使用带有通配符和路由器的hook_menu设置路径。

3 个答案:

答案 0 :(得分:1)

我能找到的最佳答案是在phptemplate_preprocess_page中添加一个检查,将vars发送回模块并让它们更新。

像这样:

function phptemplate_preprocess_page(&$vars) {
    if (module_exists('test_module')) {
        _test_module_injector($vars);
    }
}

然后在我的test_module.module文件中创建了这个函数:

function _test_module_injector(&$vars) {
    $vars[] = call_to_other_functions_to_load_vars();
}

似乎有效。我希望有一种方法可以做到这一点,而无需触摸主题的template.php文件,但除此之外这很有用。

答案 1 :(得分:0)

如果有更好的模板预处理函数文档,Drupal将更容易访问 - 因为它是,您需要将来自许多不同解释的信息拼凑在一起。一个开始的地方是:

http://drupal.org/node/223430

但是如果你花时间完成下面的教程,你会发现你可以做大部分事情:

http://11heavens.com/theming-the-contact-form-in-Drupal-6

答案 2 :(得分:0)

这是一篇旧帖子,OP的问题似乎已经解决了。

然而,只有其他人通过谷歌(或其他方式)发现这一点:

  1. 安装'开发'模块:http://drupal.org/project/devel
  2. 也是'Devel Themer'模块:http://drupal.org/project/devel_themer
  3. 使用Devel Themer浏览$ content变量并找到你需要提取的内容。

    有很多Devel / Themer docs / tuts,但它的用法非常简单。但请注意,在主题中打印之前,需要对其中的某些内容进行消毒。

    将节点显示为View然后修改视图模板的建议听起来很疯狂,但它会起作用。