0

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

我尝试了以下方法,但没有奏效:

  • page-node-5555.tpl.php
  • page-node-my_content_theme-5555.tpl.php
  • 节点 5555.tpl.php

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

4

3 回答 3

3

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

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

function phptemplate_preprocess_page(&$vars) {

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

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

  • page.tpl.php
  • 页面节点.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
  • 页面节点.tpl.php
  • 页面节点-[node_id].tpl.php
  • 页面节点-[node_type].tpl.php
  • 页面节点-[node_type]-[node_id].tpl.php
于 2012-01-21T21:39:28.917 回答
0
    函数 phptemplate_preprocess_page(&$variables) {
      if ($variables['node']->type != "") {
        $variables['template_files'][] = "page-node-" 。$变量['节点']->类型;
        $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);
  }
}
于 2012-06-14T15:54:05.467 回答
0

在 Drupal 7 中,只需复制并将page.tpl.php template其重命名为

页面--节点--[节点:id].tpl.php

清除缓存并开始调整..

于 2012-05-03T14:08:32.263 回答