15

我想为特定的内容类型覆盖 page.tpl.php。我已经尝试过这些东西,对我没有任何作用。

  1. page--article.tpl.php
  2. page--node--article.tpl.php
  3. page--node--type--article.tpl.php
  4. page--node-type--article.tpl.php
  5. page--type--article.tpl.php

但是当我按数字定位特定节点时,page--node--8.tpl.php它工作正常。我认为page--article.tpl.php应该工作,但我不知道为什么它不工作。

如果我命名错误,请告诉我。以及如何调试这些东西。我听说我可以使用 Devel 模块,但对此一无所知。对正确方向的轻微提示将不胜感激。

提前致谢

4

8 回答 8

19

你必须确保你的模板可以处理这个......我在这里得到了一个对我有用的代码片段:

http://drupal.org/node/1089656#comment-4426790

<?php
function themeName_preprocess_page(&$vars, $hook) {
  if (isset($vars['node'])) {
    // If the node type is "blog_madness" the template suggestion will be "page--blog-madness.tpl.php".
    $vars['theme_hook_suggestions'][] = 'page__'. $vars['node']->type;
  }
}
?>
于 2013-04-24T16:57:48.990 回答
4

您是否记得清除缓存(在“管理”>“站点配置”>“性能”下),以便 Drupal “知道”您的新文件并使用此文件而不是默认文件。

请参阅此处的清除缓存数据

此外,您可能需要添加一个预处理钩子(我自己没有使用 D7,只是 5/6 - 认为这已经略有变化。)Drupal Stack Exchange 上的这篇文章似乎提供了更多细节

于 2012-06-25T17:24:53.917 回答
3

我刚刚遇到了同样的问题。

节点--recipe.tpl.php

不是

页面--recipe.tpl.php

当然,这是一种名为“recipe”的内容类型。

于 2014-01-09T02:58:21.577 回答
1

始终清除缓存...

转到 /admin/config/development/performance 并单击清除缓存按钮。如果您对后端结构进行了更改并且它们没有按预期显示,那么这应该是您做的第一件事。

否则你几乎做对了

  1. page--content-type-name.tpl.php

将允许您为内容类型模板设置主题。

于 2014-03-30T22:02:09.750 回答
0

我知道这是一个老问题,但如果其他人来到这里,我在 drupal 7 中覆盖内容类型的方式是这样的

节点——内容类型.tpl

于 2013-03-01T20:27:46.567 回答
0

如果内容类型与基本页面不同,您将需要覆盖该内容类型的特定节点模板。请检查一下:

http://api.drupal.org/node/19080

在此页面下复制/粘贴 node.tpl.php 页面中的项目,并根据需要覆盖它。您可以通过 $node 专门访问该节点

您的文章模板将是:

节点--article.tpl.php

创建完成后,请确保清除缓存以确保其正常工作。

于 2013-04-24T18:43:44.130 回答
0

因此,根据您要完成的工作,可能会有一些 CSS 技巧可以帮助您。

例如,要覆盖特定节点类型的任何 CSS 规则,只需记住该节点类型的页面将有一个主体类"node-type-[TYPE]"(即.node-type-article:)

然后,您可以按如下方式覆盖 CSS:

body.node-type-article #selector {}
于 2013-12-04T00:11:34.710 回答
0

Step 1.create a content type 例如:我的内容类型是“fullwidthpage”

步骤 2. 复制page.tpl.php 并 在模板文件夹中重命名为page--fullwidthpage.tpl 。

步骤 3. 将此代码添加到template.php

function <strong>YOUR_THEME_NAME_HERE</strong>_preprocess_page(&$variables) {
  if (isset($variables['node']->type)) {
    // If the content type's machine name is "my_machine_name" the file
    // name will be "page--my-machine-name.tpl.php".
    $variables['theme_hook_suggestions'][] = 'page__' . $variables['node']->type;
  }
}

不要忘记更改YOUR_THEME_NAME_HERE

于 2015-05-07T06:50:37.317 回答