【问题标题】:hook_preprocess_page() does not seem to use the suggested template filehook_preprocess_page() 似乎没有使用建议的模板文件
【发布时间】:2013-05-18 14:11:16
【问题描述】:

我建议在hook_preprocess_page() 实现中从模块完成模板文件,但似乎没有使用建议的模板文件。

模板文件为page--terminal-template.tpl.php,在包含模块的目录下,这是hook_preprocess_page()的实现。

function terminal_preprocess_page(&$variables) {
  if (arg(0) == "terminal") {
    $variables['theme_hook_suggestions'][] = "page__terminal_template";
  }
}

谁能帮帮我?

【问题讨论】:

    标签: drupal drupal-7 drupal-theming


    【解决方案1】:

    预处理和处理功能可以通过模块来实现。事实上,theme() 的文档在显示这些函数的调用顺序时列出了它们。

    事实上,Drupal 在主题目录中寻找建议的模板文件。您有以下选择:

    1. 将您的模块建议的模板文件放在包含当前使用的主题的目录中
    2. 按照Load view template on module activation 中的报告从模块目录加载模板文件
    3. 建议您要在主题实现的预处理功能中使用的模板文件

    按照另一个问题中的报告,您将能够使用模块目录中的模板文件。唯一的问题是您使用的通用模板可能与当前启用的主题中使用的默认页面模板不同。

    如果要为当前启用的主题添加模板文件,则应在将新模板文件添加到主题后,调用drupal_theme_rebuild() 让 Drupal 重新扫描包含模板文件的目录。

    【讨论】:

      【解决方案2】:

      其实这个钩子也可以从主题的template.php文件中和模块的钩子一起调用。

      请参考 Drupal 7 文档here

      如果你的活动主题是 MY_THEME,那么代码应该是:

      function MY_THEME_preprocess_page(&$variables) {
        if (arg(0) == "terminal") {
            $variables['theme_hook_suggestions'][] = "page__terminal_template";
      
        }
      }
      

      模板建议将起作用。

      编辑:此功能也可以通过使用钩子的模块来实现。

      【讨论】:

      • 我的主题名称是 journalcrunch。所以我在 template.php 文件中使用了 journalcrunch__preprocess_page(&$variables) { 仍然调用了函数但没有调用主题
      • 将函数名更正为 journalcrunch_preprocess_page(&$variables) {
      • 对不起这个错误。我把函数名写成journalcrunch_preprocess_page(&$variables)。在评论时不知何故输入了一个额外的下划线。我清除了缓存..仍然没有工作
      • 错了:预处理和处理功能也可以由模块实现。请参阅theme() 的文档。注意有shortcut_preprocess_page(),它是由一个模块实现的。
      猜你喜欢
      • 2014-11-06
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2021-08-30
      • 2018-09-03
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多