欢迎各位兄弟 发布技术文章
这里的技术是共享的
.info (required)
Drupal所必须靠.info文件才能看到你的主题。原数据,样式表,JavaScripts,区块区域和其它内容可以在这里定义。但其它内容全部是可选的。
主题的内部名字也是继承于这个名字,例如,如果它的名字命名为 "eureka.info",则Drupal会将该主题的名字作为“eureka”看待。
想象一下,如果我们把Drupal网站的页面,切成一片一片的,然后我们可以分别往其中放置各种各样的内容。那么这些切片就是Drupal主题中所说的区域。本质上,区域是Drupal的一种内容组织方式。
sidebar_first,sidebar_second,content,header,footer,highlighted,help,page_bottom,page_top。
Drupal的9个按时间顺序排列的预定义的主题区域
regions[page_top] = Page Top
regions[header] = Header
regions[highlighted] = Highlighted
regions[help] = Help
regions[content] = Content
regions[sidebar_first] = Sidebar First
regions[sidebar_second] = Sidebar Second
regions[footer] = Footer
regions[page_bottom] = Page Bottom


如图所示,展示的Drupal默认区域是一个标准的三栏布局。灰色的区域是必须的,而其余的 是可选的。Header、sidebar_first、sidebar_second、footer是布局方面的区域。page_top和 page_bottom是特殊区域;它们将在本章的“隐藏区域”部分讨论。
共分两步走。首先,打开主题的info文件输入下列指令(假定我们要添加的自定义区域名为myregion):
regions[myregion] = My region
上述指令方括号里的myregion是区域的机读名,而My region则是区域的人读名。例如:我们在Drupal后台的区块配置界面(url:你的网站域名/admin/structure/block)所见到的就是区域的人读名。
然后打开主题的page.tpl.php文件在你喜欢的位置输入下列代码即可:
模板文件 (.tpl.php)
这些模板用作为 xHTML 标记和 PHP 变量。在某些情况下,它们还输出其他类型的数据,例如xml rss。每一个 .tpl.php 文件处理特定的可主题化数据的输出,而有些时候,它能通过“ 这些建议处理多个multiple .tpl.php 文件。它们是可选的,如果在你的主题中没有这些文件,则会回退到缺省的输出。在这些文件中尽量控制住复杂的逻辑。在很多情况下,应该是简单的xHTML 标记和PHP变量。在核心和贡献模块中有许多的这些模板文件。把它们拷到你的主题目录中会使Drupal读取你的这个版本。
注: The 主题注册有关于存在的主题数据的缓存信息。当你添加 移除或相关主题文件或功能函数时,你需要重置它。
下表是Drupal核心提供的主题模板文件列表。
模板文件 | 位置 | 描述 |
html.tpl.php | modules/system | 站点的主模板文件,包含站点得到HTML页面的<head>...</head>之间的所有元素。 |
page.tpl.php | modules/system | 包含HTML页面的<body>...</body>之间的所有元素。 |
region.tpl.php | modules/system | 定义区域的布局和渲染 |
node.tpl.php | modules/node | 定义节点的布局和渲染 |
block.tpl.php | modules/block | 定义区块的布局和渲染 |
field.tpl.php | modules/field/theme | 定义字段的布局和渲染 |
对所有的条件逻辑和输出数据的处理过程,有template.php 文件。它不是必须的,但是保持.tpl.php文件整洁,常习惯于让 预处理器在产生变量前同.tpl.php文件中的标记合并。 自定义函数 重裁主题函数或者其它自定义的原始输出都可以在这里完成。这个文件必须使用PHP的开始标记 "<?php"打头。而结束标记并不需要,并且也建议你略过它。
当大家打开Drupal的模板文件时,可以发现很多PHP变量。在很多时候,模板默认提供的这些变量有可能无法完全满足我们的需求,这时我们就需要为模板文件添加自己的自定义变量了。该怎么做呢?这就要用到Drupal的主题预处理函数THEME_preprocess_HOOK(&$variables)了。
在自己主题的文件夹下面创建一个template.php文件,在其中添加下列代码。
好了,现在变量已经有了,下面我们就可以在page.tpl.php文件中使用它了。打开page.tpl.php文件,在希望的位置键入如下代码:
如果没有发现,也不要着急,可能是下面两个原因:
Drupal主题开发中的一个重要原则:尽量不要在模板文件中处理复杂的逻辑,它们应该放在PHP函数中,而不是模板中。这样做的最大好处是:逻辑层与表示层的分离,有利于代码的组织与维护。
这 是一个很简单的if...else...逻辑,if的条件是$variables['is_front']这个变量,其中的数组键'is_front'表 示page.tpl.php模板文件中的$is_front变量,该变量是一个布尔值,用于判断用户访问的当前页面是否为Drupal网站的首页。如果是 首页,我们的自定义模板变量$custom_text的值为‘这儿是首页’,否则为’这儿不是首页‘。
第 一个函数的区别在于$user(在预处理函数中用$variables['user']表示)变量,它采用对象的形式表示当前访问的用户, 而$user->roles[3](在预处理函数中用$variables['user']->roles[3]表示)则表示网站管理员这一 用户角色。
模板建议是基于Drupal中已经存在的.tpl.php模板文件的替换模板。这个定义主要有两个要点:(1)模板建议是.tpl.php模板;(2)模板建议用于替换已经存在的.tpl.php模板。
Drupal的内核,主题,主题引擎和模块都可以提供模板建议,这可以使Drupal的开发工作更加smart。
Drupal内核和很多contrib projects不是已经提供了非常多的模板建议了吗?这是因为我们有时需要根据自己的特定条件应用某个模板,而这些条件是Drupal内核和contrib projects的作者所没有顾及到的。
没错!我们的自定义模板建议通过Drupal的主题预处理函数添加。
这个函数的作用:添加了名为node--custom.tpl.php的模板建议。if中的条件$variables['type'] == 'page'可以根据你的需求进行扩展......Drupal的主题机制当中存在很多种预处理函数和处理函数,看起来让人犯晕。本文为大家总结了它们执行的基本规律。
下面是总结的执行顺序列表,自上而下执行:
表面上,子主题同其它主题的行为是一样的。唯一区别是它继承了父主题的资源。要创建一个,则在.info文件中需要有一个“基主题”入口。在这里,它可以从父主题继承资源。还可以有多层的继承;例如,子主题可以声明其它的子主题作为它的基主题。对此没有固定的限制。
Drupal 5 以前的版本需要子主题目录在父主题目录中,现在不需要了。