[对于Drupal 6]假设我创建了一个名为“my_content_type”的内容类型。我可以通过创建“page-node-my_content_type.tpl.php”来覆盖整个内容类型的默认模板。但是,那么进一步定制该内容类型的单个节点(例如,节点5555)的最佳方式是什么?
我尝试了以下内容,但都没有效果:
这些都不起作用。他们都继续使用我原来的内容类型模板。
答案 0 :(得分:3)
Drupal的页面模板适用于建议系统。根据当前URL,创建一组可能的模板文件。它循环遍历数组(以相反的顺序)查找存在的模板文件。它找到的第一个,它将使用。
drupal的主题系统为您提供了一个修改模板建议的钩子..打开你的template.php并找到
function phptemplate_preprocess_page(&$vars) {
$ vars变量包含建议,特别是$ vars ['template_files']
默认情况下,唯一可用的页面建议是
就我所知,page-node- [node_type] .tpl.php在默认情况下不起作用,因此您可能已经修改了preprocess_page模板以添加到此功能中。
但是,如果您想添加更多特定模板,您可以执行以下操作......
function phptemplate_preprocess_page(&$variables) {
if ($variables['node']->type != "") {
$variables['template_files'][] = "page-node-" . $variables['node']->type;
$variables['template_files'][] = "page-node-" . $variables['node']->type . "-" . $variables['node']->nid;
}
}
这将允许以下模板建议层次结构
答案 1 :(得分:0)
在Drupal 7中,只需复制page.tpl.php template
并将其重命名为
页面 - 节点 - [node:id] .tpl.php
清除缓存并开始调整..
答案 2 :(得分:0)
function phptemplate_preprocess_page(&$variables) { if ($variables['node']->type != "") { $variables['template_files'][] = "page-node-" . $variables['node']->type; $variables['template_files'][] = "page-node-" . $variables['node']->type . "-" . $variables['node']->nid; } }
此代码应该不工作,因为hook_preprocess_page()不会传递任何节点信息。 hook_preprocess_node()可以。因此,您可以轻松创建自定义node.tpl,但无法轻松为特定节点创建自定义page.tpl。并不是说我无论如何都能弄明白:)
...后来
在默认的Drupal中,page-node-NID.tpl.php无需特殊编码即可使用。但是,在我的网站上,它无法正常工作,我使用以下代码使其工作:
/**
* Implementation of hook_preprocess_page().
*/
function MYMODULE_preprocess_page(&$variables) {
// Allow per-node theming of page.tpl
if (arg(0) == 'node' && is_numeric(arg(1))) {
$variables['template_files'][] = "page-node-" . arg(1);
}
}