修改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 theme-1相关推荐

  1. Drupal 主题系统( Drupal theme)(1)

    译者:老葛 修改Drupal生成的HTML或者其他标识字体,你需要深入的了解主题系统的各个组成部分.主题系统是个优雅的架构,它可使你绕过核心代码,但是它有一个很长的学习曲线,特别是在你想使你的站点于其 ...

  2. drupal theme概述

    模板语言和主题引擎 用Drupal的行话来说,主题就是一组负责你站点外观的文件.你可以从http://drupal.org/project/Themes下载第3方主题,或者你可以自己动手创建一个主题, ...

  3. 第8章 Drupal 主题系统( Drupal theme)(3) 模板文件

    译者:老葛 理解模板文件 一些主题包含所有的各种模板文件,而其他仅包含page.tpl.php.所以你如何知道你可以创建那些模板文件以及哪些可被Drupal识别?创建模板文件时所遵循的命名习惯有哪些? ...

  4. drupal THEME主要文件

    **.info 文件** .info 文件是一个必需的文件:Drupal 必须包括它,才能看到主题..info 文件告诉 Drupal 主题的内部名称.例如,如果这个文件的名称是 ibmtheme.i ...

  5. 第8章 Drupal 主题系统( Drupal theme)(4) 高级特性--1,覆写主题函数

    Drupal主题高级特性  译者:老葛 在前面的部分,你学到了Drupal使用的各种不同模板文件,当Drupal要将你的主题合并到一起时就会查找这些模板.你学到了如何创建页面模板文件,如何创建特定节点 ...

  6. Drupal Theme 主题系统:入门与进阶教程

    Drupal的外观控制是最为灵活可定制的,但是这个系统复杂而且不够直观.另外,某些思维不够流畅的作者经常会写出一些晦涩难懂的Drupal主题高级特性之类的文章,把学习Theme的激情完全打垮了.为此本 ...

  7. 第8章 Drupal 主题系统( Drupal theme)(2) 安装主题

    译者:老葛 安装主题 为了使在Drupal管理界面能够呈现一个新的主题,你需要把它放到sites/sitename/themes下面.如果你想在一个多站点Drupal系统中使所有的站点都可以使用它,那 ...

  8. 登录drupal管理员_管理您的Drupal工作流程的最佳方法

    登录drupal管理员 One of the struggles that developers face when moving to Drupal 8 is the lack of best pr ...

  9. 26+富有创意且响应式的Drupal 7主题

    今天给大家分享一些富有创意且响应式的Drupal 7的主题,更多主题资源请访问 Goodfav Magazine. Properta – Real Estate Drupal Theme – MORE ...

  10. 云客Drupal源码分析之前端js中的翻译

    从本主题开始<云客Drupal源码分析>系列将连续发布和前端js相关的内容,如果您对JavaScript还不熟悉或者需要来一次系统性的整理回顾,在此云客为您准备了以下资料: <PHP ...

最新文章

  1. 选择MPLS或SD-WAN用于组织网络部署的几大原因—Vecloud微云
  2. bzoj3697 采药人的路径
  3. SpringBoot03 项目热部署
  4. 【Bash】实现指定目录下的文件编码转换,以原文件名保存
  5. 【操作系统复习】进程控制
  6. .net 实现微信公众平台的用户信息获取
  7. 寻找无向图的关节点(Articulation Points)和判断图是否是双连通图(Biconnect Graph)
  8. SLAM_三维点优化时为什么使用逆深度误差而不是深度误差?
  9. JAVA 反射机制 获得 private 变量
  10. confluence在CentOS Linux release 8.2.2004 (Core)上搭建过程
  11. 诺基亚N8-00测评
  12. Microsoft Visual C++ 修复工具
  13. 一本正经的聊一聊面试官的心理
  14. 三大主流负载均衡器LVS、Nginx、HAproxy详解
  15. 如何更新npm版本 阿星小栈
  16. Could not autowire. No beans of xxx 解决办法
  17. 本题目要求读入2个整数A和B,然后输出它们的和
  18. Mozilla里永久删除的邮件如何恢复
  19. Programming Rust Fast, Safe Systems Development(译) 错误处理(第七章)
  20. 交直流线性电源行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

热门文章

  1. 操作系统实验(linux内核编译,添加系统调用,windows进程创建,脚本程序编写)
  2. stat驱动_由机器学习驱动的stat arb对冲基金
  3. 142day:LCD驱动1
  4. lec 1-4 _ 高质量实时渲染
  5. 怎样在Mathtype中输入空格及常用快捷键
  6. Detr空间注意力热图及语义注意力热图可视化
  7. 模拟鼠标键盘html,模拟按键操作神器(鼠标键盘模拟操作助手)V2.0.2.1 正式版
  8. 吐血输出:2万字长文带你细细盘点五种负载均衡策略。
  9. Mac 安装Git
  10. jQuery的简单介绍