0

我正在尝试根据内容类型对节点页面进行主题化。在这里,我尝试按照http://drupal.org/node/249726中的说明进行操作。

我所做的,将 node.tpl.php 文件复制到我的主题目录。将其重命名为 page-node-mycontenttype.tpl.php 并在我的模板文件中编写预处理函数,如上面的链接所示。

显然发现它只显示节点内容,但不显示常见的布局元素(HTML)(在 page.tpl.php 中定义的徽标、页眉、页脚和侧边栏等)。

那么我是否有必要在 page-node-mycontenttype.tpl.php 中再次定义相同的通用布局元素(HTML)(那些在 page.tpl.php 中定义)?

如果是这样,那么我必须管理 2 个模板文件。任何 HTML 更改都需要在两个模板文件中进行两次。

有没有更好的方法让页面和节点内容类型都引用公共布局模板文件,只有中间内容区域来自两个不同的文件(页面或节点内容类型)?

您能否建议实现这一目标的常见做法和方法?

注意:确保要根据内容类型覆盖节点模板文件,然后模板文件 node.tpl.php 和 node-[content_type].tpl.php 文件都需要在您的主题目录中。

4

2 回答 2

4

您要查找的文件是 node-mycontenttype.tpl.php 。您需要一个节点模板,而不是页面模板。如果您将 page-node-mycontenttype.tpl.php 重命名为 node-mycontenttype.tpl.php,您将获得预期的结果。

Drupal 中的页面模板 (page.tpl.php) 定义了整体标记以及各个区域的内容将输出的位置。传统上,它包括徽标、菜单、页脚信息和一些其他静态元素。Drupal 主题系统允许您覆盖特定节点类型的整个页面模板(这是您最终所做的),但根据您的解释,您真正想要做的只是覆盖节点模板。

进一步阅读:哪些文件控制哪些输出的解释和图表: http://drupal.org/node/171194 关于在主题系统中覆盖输出的一般文档:http : //drupal.org/node/341628

阅读上述内容时,请务必注意它适用的 Drupal 版本(每页顶部都有一个标签)。事情在 5 点到 6 点之间发生了相当大的变化,并且在 6 点到 7 点之间再次发生了变化(尽管变化不大)。

于 2011-02-09T13:40:51.183 回答
4

t-dub 关于 node-contenttypename.tpl.php 是正确的。

但是,如果您想为给定的内容类型(可能是登录页面)重新设置整个页面的主题,您有两个选项(可能还有其他选项,但这些是我发现的。

  1. 您可以使用一个名为sections 的模块,然后为每种不同的内容类型创建一个主题。

或者

  1. 您可以将以下函数添加到主题的 template.php:
函数模板名_预处理_页面(&$vars){
  // 根据节点->类型更改模板
  if (isset($vars['node'])) {
    // 添加模板命名建议。它应该始终使用连字符。
    $vars['template_files'][] = 'page-'。str_replace('_', '-', $vars['node']->type);
  }
}

只需将模板名称(在函数名称中)换成您的模板名称。然后,您可以为该内容类型的节点创建一个独特的设计 page-contenttypename.tpl.php。

过去我使用过部分,但我更喜欢使用 #2 中描述的方法,因为它感觉更像是 drupal。它的维护也简单得多。

希望这对某人有帮助!

于 2011-02-09T22:44:52.563 回答