【问题标题】:Why is Drupal not aware of my template file?为什么 Drupal 不知道我的模板文件?
【发布时间】:2010-10-29 09:49:14
【问题描述】:

这是一个如何在 Drupal 6 中覆盖主题项目的问题。

根据“Pro Drupal Development”一书,我们可以通过两种方式覆盖主题项:

  1. 通过主题函数覆盖
  2. 通过模板文件覆盖

例如,为了重新格式化面包屑,我可以:

  1. 通过function theme_breadcrumb($breadcrumb)
  2. 通过 breadcrumb.tpl.php

但是在我的本地测试服务器上,第二种方法(即通过模板文件)不起作用!我根本看不到面包屑,而第一种方法效果很好。

知道怎么会这样吗?我需要什么特殊设置来配置我的 Drupal?

谢谢!

我的自定义主题“灰度”:
网站\所有\主题\自定义\灰度:
- 面包屑.tpl.php
- 灰度信息
- node.tpl.php
- page.tpl.php
- 样式.css
- 模板.php

相关文件内容:
* 模板.php:

function phptemplate_preprocess_breadcrumb(&$variables) {
  $variables['breadcrumb_delimiter'] = '#';
}
  • 面包屑.tpl.php:

【问题讨论】:

  • 您的其他模板文件是否按预期工作?
  • 也许我的问题表述得不太好。我真正的问题是:我在那里有一个模板文件“breadcrumb.tpl.php”,但 Drupal 并没有意识到这一点,尽管我多次单击“管理 -> 网站建设 -> 模块”(根据“Pro Drupal Dev”这将刷新主题注册表,但事实并非如此。
  • 我发现了问题:我将主题更改为另一个主题,然后切换回我的自定义主题,现在 Drupal 看到了我的“breadcrumb.tpl.php”。似乎这是刷新主题注册表的正确方法。

标签: drupal themes


【解决方案1】:

主题函数设置为使用模板函数来生成标记,它永远不会同时使用这两者,因为那毫无意义。

对于使用模板的主题功能,必须在hook_theme中定义它时定义它。

模板 + 预处理函数和主题函数确实做同样的事情:生成标记。这取决于哪种方法最好使用的情况,这就是我们有两种方法的原因。模板的好处在于,它允许用户更改标记,而无需了解多少 PHP 或 Drupal。

缓存

Drupal 会缓存你的主题中定义的所有模板和主题函数,当你创建新的时,你需要清除缓存,这可以通过:

  • 使用drush
  • 正在清除admin/settings/performance 中的缓存
  • 使用devel 在每次页面加载时清除它。可在开发期间使用,但 biut 会影响性能。

来回切换主题也可以,但这确实不是理想的方式。

【讨论】:

  • 谢谢,见上面我的 cmets。简而言之:我需要切换到主题才能让 Drupal 刷新其主题注册表。
【解决方案2】:

我个人总是发现使用hook_breadcrumb()通过template.php更改面包屑更容易

function mytheme_breadcrumb($breadcrumb) {
  $sep = ' > ';
  if (count($breadcrumb) > 0) {
    return implode($breadcrumb, $sep) . $sep;
  }
  else {
    return t("Home");
  }
}

您希望使用 .tpl.php 文件的任何特定原因?

【讨论】:

  • 并非如此。我只是想知道为什么 Drupal 看不到我的模板文件“breadcrumb.tpl.php”。我知道有多种方法可以更改面包屑。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-09-24
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
相关资源
最近更新 更多