知识网
  • 主页
  • 建站基础
  • 网页设计
  • 开发代码
  • 网页特效
  • 精品网站
  • 数据库
  • 推广运营
  • 广告视觉
  • 开源系统
  • 电脑常识
  • 游戏攻略
  • 科技资讯
  • 其他
  • 当前位置:首页 > 开源系统 > drupal主题的高级主题theme属性

    drupal主题的高级主题theme属性


    时间:2014-06-20 11:21:14 来源:51xuejianzhan.com 作者:网络 点击:118

    在前面的部分,你学到了Drupal使用的各种不同模板文件,当Drupal要将你的主题合并到一起时就会查找这些模板。你学到了如何创建页面模板文件,如何创建特定节点类型的节点模板文件,甚至特定区块的区块模板文件。换句话说,对于定制主题的知识,你已经掌握了80%。

     

    那么剩下的20%呢?如何主题化Drupal的表单?如何修改一些简单的东西比如面包屑的外观?在这一部分,我们将回答这些问题并帮你成为Drupal主题化的高手。你将从主题化高手的基本武器之一template.php文件开始学起。

     

    template.php文件是整合定制的模板文件的地方:定义新的区块区域,覆写Drupal的默认主题函数,拦截传递给模板文件的变量并创建定制的变量。

     

    覆写主题函数

    Drupal的主题系统背后的核心哲理和钩子系统的类似。通过遵循命名规范,就可以标识出哪些函数是主体相关的函数,它们负责格式化并返回你站点的内容。主题函数由它们函数名的前缀“theme_”来标识。这一命名规范使得Drupal能够为所有的主题函数创建一个函数覆写机制。设计者就可以命令Drupal执行一个具有更高优先级的定制的函数,从而代替开发者在模块中给出的默认的主题函数。例如,让我们检查一下当构建站点的面包屑时该流程是怎么工作的。

     

    打开includes/theme.inc并检查文件中的函数。几乎所有的函数都以theme_开头,这就告诉人们它是可以被覆写的。特别的,我们检查theme_breadcrumb():

     

     

    /**

    * Return a themed breadcrumb trail.

    *

    * @param $breadcrumb

    * An array containing the breadcrumb links.

    * @return a string containing the breadcrumb output.

    */

    function theme_breadcrumb($breadcrumb) {

    if (!empty($breadcrumb)) {

    return '

    ';

     

    }

    }

     

    这个函数控制着Drupal中面包屑导航条的HTML输出。当前,它在面包屑的每一项之间添加了一个指向右边的双箭头分隔符(>>)。假定你想将div标签改为span标签,并使用星号(*)来代替双箭头(>>)。那么你该怎么办呢?一种方式是在theme.inc中修改这个函数,保存,并调用。这样也能达到目的。(不!不!千万不要这样做!)。我们有一些更好的方式。

     

    你见过Drupal内核中是怎么调用这些主题函数么?你永远都不会看到直接调用theme_breadcrumb()的情况。替代的,它通常包装在助手函数theme()中。

     

    你期望函数这样调用:

    theme_breadcrumb($breadcrumb)

     

    但实际不是这样。替代的,你将看到开发者这样调用:

    51xuejianzhan.com theme('breadcrumb', $breadcrumb);

     

    这个通用的theme()函数负责初始化主题层并将函数调用分发到合适的位置,这使得我们能够以更优雅的方案来解决我们的问题。图8-5展示了通过调用theme(),命令Drupal按照下面的次序查找相应的面包屑函数。

     

    假定你使用的主题为bluemarine,它是基于PHPTemplate的主题,那么Drupal将会查找下面的函数:

     

    bluemarine_breadcrumb()

    phptemplate_breadcrumb()

    theme_breadcrumb()

     

    为了修改Drupal的面包屑,在当前主题的文件夹下创建一个空的template.php文件,并将theme.inc中的theme_breadcrumb()函数复制并粘贴到该文件里面。记住要包含

     

    /**

    * Return a themed breadcrumb trail.

    *

    * @param $breadcrumb

    * An array containing the breadcrumb links.

    * @return a string containing the breadcrumb output.

    */

    function mytheme_breadcrumb($breadcrumb) {

    if (!empty($breadcrumb)) {

    return '<span class="breadcrumb">'. implode(' ', $breadcrumb) .'span>';

    }

    }

     

     

    图8-5 覆写主题的工作原理

     

    当下一次Drupal需要生成面包屑时,它就会先找到你的函数并使用它来代替默认的theme_breadcrumb()函数,这样面包屑中就会包含你的星号了,而不再包含默认的双箭头了。很漂亮,不是么?你没有修改一行核心代码。通过theme()函数来管理所有的主题函数调用,如果当前主题覆写了任何一个theme_ 函数,Drupal都可以检查到这些覆写的函数并使用它们来代替默认的主题函数。开发者,请注意:在你的模块中任何需要输出HTML或者XML的部分都应该使用以“theme_”开头的主题函数,这样s设计者就可以覆写它们了。拿user.module来说(参看图8-6)

     

    学建站51xuejianzhan.com  

    图8-6 可以在主题层覆写由模块暴露的主题函数。定制的主题函数mytheme_user_picture()覆写了默认的theme_user_picture(),接下来将会使用mytheme_user_picture()代替theme_user_picture()。


    (责任编辑:小站童)
    drupal, theme,
    评论

    用户名 验证码
    最新评论
    赞助商链接
    网页取色器 | 网页配色工具 | 时间转换 | 精彩收藏 | 每日阅读 | 常用函数库 |

    Copyright © 2012 - 2013 我要学建站 All rights reserved.