Drupal 7如何覆盖特定内容类型的page.tpl?

时间:2012-06-25 17:06:43

标签: drupal drupal-7 drupal-theming

我想覆盖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
  6. 但是当我按照数字page--node--8.tpl.php定位特定节点时,它运行正常。 我认为page--article.tpl.php应该有效,但我不知道它为什么不起作用。

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

    提前致谢

8 个答案:

答案 0 :(得分: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;
  }
}
?>

答案 1 :(得分:4)

您是否记得清除缓存(在管理&gt;网站配置&gt;性能下),以便Drupal“了解”您的新文件&amp;使用此而不是默认值。

请参阅Clearing cached data

另外,你可能需要添加一个预处理钩子(我自己没有使用过D7,只有5/6 - 认为这已经略有改变。)This post on Drupal Stack Exchange似乎提供了更多细节

答案 2 :(得分:3)

我遇到了同样的问题。

节点 - recipe.tpl.php

页 - recipe.tpl.php

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

答案 3 :(得分:1)

总是清除缓存...

转到/ admin / config / development / performance并单击清除缓存按钮。如果您对后端的结构进行了更改并且它们没有按预期显示,那么应该首先执行此操作。

否则你几乎没错了

  1. 页 - 内容型name.tpl.php
  2. 将允许您主题化内容类型模板。

答案 4 :(得分:0)

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

节点 - 的的contentType .tpl

答案 5 :(得分:0)

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

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

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

专门访问该节点

您的文章模板将是:

节点 - article.tpl.php

创建后,请确保清除缓存以确保其有效。

答案 6 :(得分:0)

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

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

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

body.node-type-article #selector {}

答案 7 :(得分:0)

步骤1.创建内容类型,例如:我的内容类型为“fullwidthpage”

步骤2.复制 page.tpl.php 并重命名为模板文件夹中的页面 - 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