Drupal 主题系统( Drupal theme)(1)
译者:老葛
修改Drupal生成的HTML或者其他标识字体,你需要深入的了解主题系统的各个组成部分。主题系统是个优雅的架构,它可使你绕过核心代码,但是它有一个很长的学习曲线,特别是在你想使你的站点于其他drupal站点看起来不同时。我们将向你讲述主题系统是如何工作的,以及想你展示隐藏在Drupal核心本后的一些最佳实践。首先要记住的是:不要通过编辑模块文件内部的HTML来改变你站点的外观。如果这样做了,你仅仅创建了一个对你个人适用的内容管理系统,这样你就会失去开源软件系统最大的优势之一--社区的支持。覆盖,而不是修改。
主题系统的组成
主题系统有多个抽象层次组成:模板语言(template language),主题引擎(theme engines)和主题
模板语言和主题引擎
主题系统可以使用多个模板语言。Smarty,PHPTAL,和XTemplate可以与Drupal集成,用来向模板文件中添加动态数据。为了使用这些语言,需要一个叫做主题引擎的包装器,用来在模板语言和Drupal之间交互。你可以在http://drupal.org/project/Theme+engines找到对应的模板语言的主题引擎。你可以通过将相应主题引擎的目录放置到你站点的主题引擎目录下面来安装主题引擎。如果仅用于单个站点,使用目录sites/sitename/themes/engine,如果用于多个Drupal站点,则使用目录sites/all/themes/engine,如图8-1所示。
Drupal社区创建了一个自己的引擎,专门对Drupal进行了优化。它叫做PHPTemplate,它使用php函数来作为模板语言,这消除了其他模板语言常常使用的中间层的解析环节。这是Drupal最长用的的模板引擎,它被默认安装了。它位于themes/engine/phptemplate,如图8-2所示:
图8-1为Drupal添加定制主题引擎的目录结构
图8-2为Drupal核心主题引擎的目录结构。这个位置专门用于放置核心主题引擎。
注意:注意完全可以不使用模板语言而简单的使用php模板文件。如果你是速度的狂热分子,或者可能仅仅是想折磨一下你的设计者,你甚至可以不使用主题引擎而仅仅使用裸php函数来实现你的整个主题。例如一个基于php的主题,参看themes/chameleon/chameleon.theme。
当你安装好一个主题引擎后,你不会看到你的站点的任何改变。这是因为,主题引擎仅仅是一个接口库,在主题引擎被使用以前,你仍然需要安装一个依赖于该主题引擎的Drupal主题。
要使用哪一个模板语言呢?如果你正在转换一个遗留站点,可能使用以前的模板语言更方便一些,也许你的设计团队更倾向于使用所见即所得的编辑器,这样PHPTAL应该是个更好的选择,因为它可以阻止这些编辑器对模板的破坏。你可以看到关于PHPTemplate最多的文档和支持,如果你是从新开始建立一个站点的话,如果从长期的维护和社区支持这两个角度来看,它应该是最好的选择了。
主题(themes)
用Drupal的话来说,主题就是一组展示你站点外观的文件。你可以从http://drupal.org/project/Themes下载定已制好的主题,或者你可以自己动手。这正是你在本章将要学习的。作为一个web设计者,主题有你所期望的大部分内容组成:样式,图像,JAVAscript文件,等等。你将发现,在Drupal主题和纯HTML站点之间的区别就是模板文件。这些文件一般都包含大段的静态HTML和一些小段的用来插入动态内容的代码。模板文件的语义依赖于他所以来的支持他们的主题引擎。例如,列表8-1,8-2,8-3列出了3段模板文件代码片段,它们输出同样的内容但是包含完全不同的模板文件内容。
Listing 8-1. Smarty
<div id="top-nav">
{if count($secondary_links)}
<ul id="secondary">
<li>
{theme function='links' data=$secondary_links delimiter="</li>/n <li>"}
</li>
</ul>
{/if}
{if count($primary_links)}
<ul id="primary">
<li>
{theme function='links' data=$primary_links delimiter="</li>/n <li>"}
</li>
</ul>
{/if}
</div>
110 CHAPTER 8 ■ T H E THEME SYSTEM
Listing 8-2. PHPTAL
<div id="top-nav">
<ul tal:condition="php:is_array(secondary_links)" id="secondary">
<li tal:repeat="link secondary_links" tal:content="link">secondary link</li>
</ul>
<ul tal:condition="php:is_array(primary_links)" id="primary">
<li tal:repeat="link primary_links" tal:content="link">primary link</li>
</ul>
</div>
Listing 8-3. PHPTemplate
<div id="top-nav">
<?php if (count($secondary_links)) : ?>
<ul id="secondary">
<?php foreach ($secondary_links as $link): ?>
<li><?php print $link?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php if (count($primary_links)) : ?>
<ul id="primary">
<?php foreach ($primary_links as $link): ?>
<li><?php print $link?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
每一个模板文件由于它所使用的模板语言的不同看起来也不同。模板文件的后缀决定于它所使用的模板语言,也就是它所依赖的主题引擎(参看表8-1)
表8-1模板文件的扩展名意味着它所依赖的模板语言。
Template File Extension Theme Engine
.theme PHP
.tpl.php PHPTemplate*
.tal PHPTAL
.tpl Smarty
Drupal 主题系统( Drupal theme)(1)相关推荐
- 第8章 Drupal 主题系统( Drupal theme)(3) 模板文件
译者:老葛 理解模板文件 一些主题包含所有的各种模板文件,而其他仅包含page.tpl.php.所以你如何知道你可以创建那些模板文件以及哪些可被Drupal识别?创建模板文件时所遵循的命名习惯有哪些? ...
- 第8章 Drupal 主题系统( Drupal theme)(4) 高级特性--1,覆写主题函数
Drupal主题高级特性 译者:老葛 在前面的部分,你学到了Drupal使用的各种不同模板文件,当Drupal要将你的主题合并到一起时就会查找这些模板.你学到了如何创建页面模板文件,如何创建特定节点 ...
- 第8章 Drupal 主题系统( Drupal theme)(2) 安装主题
译者:老葛 安装主题 为了使在Drupal管理界面能够呈现一个新的主题,你需要把它放到sites/sitename/themes下面.如果你想在一个多站点Drupal系统中使所有的站点都可以使用它,那 ...
- Drupal Theme 主题系统:入门与进阶教程
Drupal的外观控制是最为灵活可定制的,但是这个系统复杂而且不够直观.另外,某些思维不够流畅的作者经常会写出一些晦涩难懂的Drupal主题高级特性之类的文章,把学习Theme的激情完全打垮了.为此本 ...
- Drupal网站系统的应用
Drupal网站管理系统 http://www.intematrix.cn/book/export/html/74 Drupal,全球最流行的开源网站的内容管理(CMS)和发布系统,它是用PHP写成的 ...
- Drupal主题开发指南(5.x)
这本指南适用于Drupal 5以及更早的版本,对于drupal,有一个新的主题开发指南已经可用.我们手册的这一部分,主要是关于主题系统的各个方面,希望这对广大的drupal主题开发者能够有所帮助. 强 ...
- drupal主题化常用函数集锦
[路径相关] $base_path: Drupal安装的根目录,返回值最后有"/",比如你的网址是这样:http://www.domin.com/drupal/,$base_pa ...
- drupal主题开发_Drupal开发人员,关于如何使您的网站更易于访问
drupal主题开发 对于OpenConcept Consulting Inc.的创始人兼总裁开放源代码开发人员Mike Gifford ,在他的名字后面提到Drupal可访问性是多余的. 他花了十年 ...
- php德育元素,的人如何使用tpl.php文件主题化drupal表单
如何使用tpl.php文件主题化Drupal表单 来源萃图网络http://www.cuitu.net 您可能已经知道 tpl.php文件模板只能影响内容输出.下面的例子显示了PHPTempl ...
最新文章
- 【linux】tc命令使用总结
- JAVA实现环形缓冲多线程读取远程文件
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
- Dijstra算法求最短路径
- 安卓禁止ScrollView内的控件改变之后自动滚动
- oracle 删除字段中空格
- boost stacktrace堆栈打印
- 布局网页表格要求其列平均分布的简单操作
- Linux--安装截图工具Shutter
- 富文本编辑器CKEditor 5开发环境搭建
- 他面前有一个人,有一把刀
- java jbutton 大小_Java swing JButton的顺序和大小
- java滑杆和进度条_HTML5实现自带进度条和滑块滑杆效果
- 如何使用STM32指南者LCD显示图片
- 基于ffmpeg的GIF制作工具
- html网页播放flac,教你如何无损录制网页上播放的声音
- FileSystemWatcher触发多次Change事件的解决办法
- Java素数求和(1~100)
- ligerui列表显示
- STM32 SPI发送波形
热门文章
- cad如何批量转换成pdf?
- coms_ov7740驱动
- 基于Java毕业设计成绩分析系统源码+系统+mysql+lw文档+部署软件
- 【特征检测】LIOP特征描述算法
- 星火传递之Fuji M268dw打印机共享使用教程
- rtl8811au黑苹果10.15_thinkpad E480基本完美安装黑苹果10.15.3
- 热图3:热图行列分组信息注释
- 将英文版Windows改为中文版
- Toast(提示信息),Dialog(弹窗).
- 如何正确运用计算机,新手用机:教你如何正确使用电脑