当自定义模板已应用于节点的内容类型时,如何在Drupal 6中自定义特定节点?

时间:2012-01-21 19:35:23

标签: drupal drupal-templates drupal-nodes drupal-content-types

[对于Drupal 6]假设我创建了一个名为“my_content_type”的内容类型。我可以通过创建“page-node-my_content_type.tpl.php”来覆盖整个内容类型的默认模板。但是,那么进一步定制该内容类型的单个节点(例如,节点5555)的最佳方式是什么?

我尝试了以下内容,但都没有效果:

  • 页节点-5555.tpl.php
  • 页节点-my_content_theme-5555.tpl.php
  • 节点5555.tpl.php

这些都不起作用。他们都继续使用我原来的内容类型模板。

3 个答案:

答案 0 :(得分:3)

Drupal的页面模板适用于建议系统。根据当前URL,创建一组可能的模板文件。它循环遍历数组(以相反的顺序)查找存在的模板文件。它找到的第一个,它将使用。

drupal的主题系统为您提供了一个修改模板建议的钩子..打开你的template.php并找到

function phptemplate_preprocess_page(&$vars) {

$ vars变量包含建议,特别是$ vars ['template_files']

默认情况下,唯一可用的页面建议是

  • page.tpl.php中
  • 页-node.tpl.php
  • 页面节点 - [NODE_ID] .tpl.php

就我所知,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;
  }
}

这将允许以下模板建议层次结构

  • page.tpl.php中
  • 页-node.tpl.php
  • 页面节点 - [NODE_ID] .tpl.php
  • 页面节点 - [NODE_TYPE] .tpl.php
  • 页面节点 - [NODE_TYPE] - [NODE_ID] .tpl.php

答案 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);
  }
}