3.3 Drupal主题制作的准备工作(下)Get ready to Theming (III)
3.5 模板建议(template / theme hook suggestion)
一旦你确认了页面构成元素、填写好了对应的表格并画好了线框图,你就可以开始制作主题了。
我们已经在上一章第三节讲述覆写的时候提过模板覆写的命名规则。在Drupal的范畴中这个命名规则有着自己的专有名词:template suggestion 或者theme hook suggestion .我们权且翻译成模板建议好了。
开始制作主题之前,这个知识点还是有必要了解一下的,因为当你为不同的区块、页面编写模板的时候,你都会遇到模板文件命名的问题。如果命名错误,你的模板就不会生效。以下是Drupal7的模板命名规则——模板建议:
3.5.1 区块的模板建议
基模板: block.tpl.php
模板建议:block--[region|[module|--delta]].tpl.php
可能的模板:
1. block--module--delta.tpl.php
2. block--module.tpl.php
3. block--region.tpl.php
“module”是模块的名称、“delta”是由模块指定的区块ID。
比如我们用自定义区块功能定义的第一个区块,其相应的模板文件命名为:“block--block--1.tpl.php”这其中第二个“block”的含义是:这个区块是由核心的block模块生成的。“1”的含义是生成的第一个模块,该区块的delta值为1。“region”会在相对应的区域上生效,例如:“block--sidebar_first.tpl.php”,这其中的“sidebar_first”就是一个在.info文件中定义的区域。(值得注意的是,这里的下划线被保留了)
如果你有一个叫做“custom”的自定义模块生成了一个ID为“my-blcok”的区块,那么当你为这个区块定义自己的模板时,你就应该把模板命名为“block--custom--my-block.tpl.php”
如果你用views模块生成了一个视图名为“front_news”,ID为“block_1”的区块,那么这个区块的模板建议应该是“block--views--front-news-block-1.tpl.php”(值得注意的是,这里的下划线应该被转换成短横线)
上面的“module”是模块的名称,如果你有一个叫做“MyModule”的模块生成了一个区块,这个区块的模板建议应该是“block--MyModule.tpl.php”,如果你的模块叫做“xxx”,那么这个区块的模板建议应该是“block--xxx.tpl.php”。不过,请你别把模块命名为xxx,写程序的人很多都是偏执暴力狂,他们看到这样的名字往往会发病。
3.5.2 其他模板建议
其余的模板建议可以在官网找到:https://www.drupal.org/node/1089656。由于内容的相似性,这里不对其余模板建议进行详细描述,仅列举部分如下,请注意,标有序号的都是可
选的模板,但是越是排在前面的作用范围越小,优先级也越高,即查找顺序从上至下:
评论:comment--node-[type].tpl.php
基模板:comment.tpl.php
如果对某内容类型为“article”的节点进行评论,则模板建议为“comment--node-article.tpl.php”
comment-wrapper--node-[type].tpl.php 同上
基模板:comment-wrapper.tpl.php
字段:field--[type|name[--content-type]|content-type].tpl.php
基模板:field.tpl.php
1.field--field-name--content-type.tpl.php
2.field--content-type.tpl.php
3.field--field-name.tpl.php
4.field--field-type.tpl.php
注意这里的name指的是字段的机读名称,并且这个机读名称中的下划线会被短横线所替换。并且自定义字段的名字前面要加上“field-”如:“field--field-phone.tpl.php”
论坛:forums--[[container|topic]--forumID].tpl.php
基模板:forums.tpl.php
For forum containers:
1. forums--containers--forumID.tpl.php
2. forums--forumID.tpl.php
3. forums--containers.tpl.php
For forum topics:
1. forums--topics--forumID.tpl.php
2. forums--forumID.tpl.php
3. forums--topics.tpl.php
HTML模板:html.tpl.php
如下是两个例子:
html--internalviewpath.tpl.php
html--node--id.tpl.php
维护状态:maintenance-page--[offline].tpl.php
当数据库出错的时候,你可以为出错页面写一个更友好的页面模板。为了显示出这个更友好维护页面必须先进行正确的配置,详情请看https://www.drupal.org/node/195435
节点:node--[type|nodeid].tpl.php
基模板:node.tpl.php
1. node--nodeid.tpl.php
2. node--type.tpl.php
3. node.tpl.php
页面:page--[front|internal/path].tpl.php
基模板:page.tpl.php
这个模板建议可以有无数个,因为它对应的是页面路径,你的网站有多少内容,就会产生多少路径,相应的每个路径的页面都可以使用不同的模板。比较特殊的是首页,在drupal7中,你可以通过 "Administration > Configuration > System > Site information."即“管理》配置》系统》站点信息”来设置首页。被设置成首页的页面会启用模板建议“page--front.tpl.php”
而“http://www.example.com/node/1/edit”路径会有以下的模板建议:
1. page--node--edit.tpl.php
2. page--node--1.tpl.php
3. page--node.tpl.php
4. Page.tpl.php
投票:
poll-results--[block].tpl.php
基模板:poll-results.tpl.php
poll-vote--[block].tpl.php
基模板:poll-vote.tpl.php
poll-bar--[block].tpl.php
基模板:poll-bar.tpl.php
Profile:profile-wrapper--[field].tpl.php
基模板:profile-wrapper.tpl.php
区域:region--[region].tpl.php
基模板:region.tpl.php
搜索:search-results--[searchType].tpl.php
基模板:search-results.tpl.php
分类:taxonomy-term--[vocabulary-machine-name|tid].tpl.php
基模板:taxonomy-term.tpl.php
1. taxonomy-term--tid.tpl.php
2. taxonomy-term--vocabulary-machine-name.tpl.php
3. taxonomy-term.tpl.php
注意这里的vocabulary-machine-name中的下划线会被短横线所替换。
page--node--type.tpl.php 复写
如果是要复写某个内容类型 的整个page页面的话,单纯的这样page--node--type.tpl.php(type为内容类型的机读名)命名是不行的 ,还要在 tempalte.php 里面加上给出起模板建议的代码。