我想覆盖page.tpl.php以获取特定的内容类型。 我试过这些东西,没有什么对我有用。
page--article.tpl.php
page--node--article.tpl.php
page--node--type--article.tpl.php
page--node-type--article.tpl.php
page--type--article.tpl.php
但是当我按照数字page--node--8.tpl.php
定位特定节点时,它运行正常。
我认为page--article.tpl.php
应该有效,但我不知道它为什么不起作用。
如果我说错了,请告诉我。我该如何调试这些东西。我听说我可以使用Devel模块,但对此一无所知。在正确的方向略有提示将不胜感激。
提前致谢
答案 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;使用此而不是默认值。
另外,你可能需要添加一个预处理钩子(我自己没有使用过D7,只有5/6 - 认为这已经略有改变。)This post on Drupal Stack Exchange似乎提供了更多细节
答案 2 :(得分:3)
我遇到了同样的问题。
的不强> 的
页 - recipe.tpl.php
当然,这是一种名为“食谱”的内容类型。
答案 3 :(得分:1)
总是清除缓存...
转到/ admin / config / development / performance并单击清除缓存按钮。如果您对后端的结构进行了更改并且它们没有按预期显示,那么应该首先执行此操作。
否则你几乎没错了
将允许您主题化内容类型模板。
答案 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