我正在尝试基于内容类型的主题节点页面。在这里,我尝试按照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文件需要在您的文件中主题目录。
答案 0 :(得分: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之间再次发生了变化(尽管不是那么多)。
答案 1 :(得分:4)
t-dub是关于node-contenttypename.tpl.php。
但是,如果您想针对给定内容类型(可能是目标网页)重新整理整个页面,您有两种选择(可能还有其他选项,但这些是我发现的选项。
OR
function templatename_preprocess_page(&$vars) { // Template change based on node->type if (isset($vars['node'])) { // Add template naming suggestion. It should alway use hyphens. $vars['template_files'][] = 'page-'. str_replace('_', '-', $vars['node']->type); } }
只需将templatename(在函数名称中)替换为模板名称即可。然后,您可以为该内容类型的节点创建page-contenttypename.tpl.php,以获得独特的设计。
我过去曾使用过部分,但我更喜欢使用#2中描述的方法,因为它感觉更加笨拙。它的维护也很简单。
希望这有助于某人!