drupal - 如何为自己的模板使用主题预处理器功能?

标签 drupal drupal-6 preprocessor drupal-theming

我有几个用于节点、CCK 字段和 View 主题的 .tpl.php 文件。这些模板文件中有很多逻辑可以移动、删除链接、创建新链接等。我知道这是不好的开发,而不是“Drupal 方式”。

如果我理解正确,“Drupal 方式”是在您的 template.php 中使用预处理器函数。文件来操作变量和添加新变量。关于这个的几个问题:

  • 是否有为特定主题创建预处理器函数的命名约定?例如,如果我有一个名为 content-field-field_transmission_make_model.tpl 的 CCK 字段模板,我将如何命名预处理器函数?
  • 我可以为节点模板、CCK 字段模板和 View 模板使用模板预处理器功能吗?他们有不同的修改模板变量或添加新变量的方法吗?
  • 最佳答案

    对于一般概述,您应该 read up on manipulating variables within preprocess functions .

    关于命名约定,这通常很简单,但是您当前的示例有一个问题(见下文):

    预处理函数签名需要是
    [yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)
    因此在主题 template.php 文件中为页面模板实现一个将导致
    themeName_preprocess_page(&$variables)
    大多数情况下,主题函数的名称将是 *.tpl.php 文件的名称,没有 .tpl.php 结尾并且带有下划线而不是连字符。 但是有一个问题 如果模板文件在 template suggestions 的基础上被选中,因为预处理功能只能针对基础名称实现,不能针对附加建议! (替代模板文件的建议已添加到预处理函数本身中。)

    您当前的示例是其中一种情况,如 content-field-field_transmission_make_model.tpl.php是这样的建议,基本名称是content-field.tpl.php ,对应的主题函数为content_field .所以你必须实现一个名为 yourThemeName_preprocess_content_field(&$variables) 的预处理函数。 , 并在其中检查 $variables 数组中的可用条目,以检查您是否真的被称为“field_transmission_make_model”,而不是完全不同的 CCK 字段,例如:

    function yourThemeName_preprocess_content_field(&$variables) {
      // Are we called for the right field?
      if ('field_transmission_make_model' == $variables['field_name']) {
        // Yes, add/manipulate entries within the variables array
        $variables['new_entry'] = 'A useless new variable';
        $variables['label'] = 'A useless change of the existing label variable';
      }
    }
    

    (注:未经测试的代码,谨防拼写错误)

    在此之后,应该有一个新变量$new_entry在您的模板文件中可用,以及 $label 的内容变量应该已更改($variables 数组中的所有顶级条目都将转换为模板文件的单独变量,以数组索引命名)。

    至于您的第二个问题,预处理函数的基本用法对于所有模板文件都是相同的,但请注意:
  • 预处理函数仅适用于使用 *.tpl.php 文件的主题调用,不是 主题功能
  • $variables 数组的内容变化很大,取决于主题
  • 其他模块也可能实现预处理函数,它们将被一个接一个地调用,所以如果你想改变另一个模块添加的东西,你只能在之后调用你的实现时这样做(这将不会在您的情况下存在问题,因为在模块中的所有实现之后调用主题中的实现 - 只是想提一下,一次可以有很多实现)
  • 关于drupal - 如何为自己的模板使用主题预处理器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2383865/

    相关文章:

    Drupal:每月发送 1500 封电子邮件

    Drupal 内容类型(餐厅)设计

    Drupal:我需要在 block 中显示用户名

    xcode4 - Xcode 4 无法从静态库依赖项中找到公共(public)头文件

    search - 使用Hadoop预处理文本消息的最佳方法

    php - 如何限制用户访问特定页面? (Drupal、PHP、FileMaker Pro 10)

    Drupal 7 - 如何设置和翻译字段集合

    drupal - 同一目录中的多个站点但单独的数据库

    python - 我们如何在 SMOTE 中设置比率以使正样本多于负样本?

    nginx - Nginx 上 Drupal 的 AMP 参数错误