【发布时间】:2010-07-28 14:52:09
【问题描述】:
我有两个页面模板文件,一个只是“page.tpl.php”,另一个是页面子集。
我怎样才能将这个其他模板仅应用于某些页面而其余的只是默认为 page.tpl.php?
谢谢!我在 Drupal 6 上。
【问题讨论】:
我有两个页面模板文件,一个只是“page.tpl.php”,另一个是页面子集。
我怎样才能将这个其他模板仅应用于某些页面而其余的只是默认为 page.tpl.php?
谢谢!我在 Drupal 6 上。
【问题讨论】:
在 Drupal 中,模板遵循所谓的“建议”。
对于页面,建议是使用 url-path 构建的。
在 /foo/bar 页面上,您可以将 page.tpl.php 命名如下:
Drupal 将从最具体到最不具体进行查找,然后选择找到的第一个。 如果找到 page-foo-bar.tpl.php,它将使用它作为 foo/bar 如果没有找到它会继续查找。如果然后它找到 page-foo,它将使用它。
page-foo.tpl.php 也将用于 /foo/beserk foo/pirate 和 foo/parrot,除非你创建一个 page-foo-parrot.tpl.php。
首页没有路径(显然),但确实存在对首页的建议:page-front.tpl.php 将仅用于首页。
【讨论】:
除了 Drupal 的默认建议系统外,您还可以在主题中实现 template_preprocess_page 并更改模板建议数组:
function my_theme_preprocess_page(&$vars) {
if ($vars['some_var'] == 'some_value') {
$vars['template_files'][] = "page-special";
}
}
见Working with template suggestions。
您也可以强制模板文件而不是添加建议:
function my_theme_preprocess_page(&$vars) {
if ($vars['some_var'] == 'some_value') {
$vars['template_file'] = "page-special";
}
}
【讨论】:
$vars['theme_hook_suggestions'][] = 'page__special'; 有效,即它加载了我的主题目录中的 page--special.tpl.php
您可能还想查看Sections 模块,它允许为一组页面选择单独的主题。页面选择与块显示配置页面相同——显示在除列出页面之外的每个页面上,仅显示在列出的页面上,如果以下 PHP 代码返回 TRUE 则显示。
我在我创建的一个网站上使用它,效果很好。
【讨论】: