1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

Drupal宝典之定制篇

本帖由 laogui2006-07-19 发布。版面名称:源码讨论

  1. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35
    在对Drupal做定制前,需要了解一些Drupal的基本术语:

    + Block(区块)

    区块一般位于网页两边的侧栏中,用于导航或显示一些附加内容。区块是一种把数据定位到页面的方法之一。各主题风格可以通过block($subject, $content, $region = "main")函数来控制区块的显示风格。

    + Box(盒子)

    盒子是Drupal页面内容的容器。每一个盒子有一个标题和一些内容。各主题风格可以通过box($subject, $content, $region = "main")函数来控制盒子的显示风格。

    + Engine(引擎)

    引擎是一类特殊的主题,它通过模板来输出HTML内容。

    + Filter(过滤器)

    过滤器是做内容过滤的框架。

    + Module(模块)

    模块是为Drupal提供扩展功能的代码片段。有些模块是Drupal核心系统的一部分(例如taxonomy和blog模块),扩展模块(例如 weblinks和image模块)则不属于Drupal的核心系统。核心模块已包含在Drupal的下载包中,扩展模块则需要单独下载。

    + Node(节点)

    节点是Drupal中最简单又最难理解的一个概念。几乎Drupal中所有的内容都被存储为一个节点。一个节点就是Drupal的一块内容,它可以是投票、报道、书的一页、或一张图片。

    + Permissions(权限)

    权限用于控制内容的创建、修改和站点管理等访问。管理员可以将权限赋给角色,将角色赋给用户。一个用户可以属于一个或多个角色。Drupal缺省提供了两种角色:游客和注册用户

    + Style(样式)

    样式是主题或引擎提供的CSS文件,用于替换缺省的CSS。

    + Taxonomy(分类)

    Drupal通过分类来描述目录系统,用于对网站的内容进行组织和分类。

    + Template(模板)

    模板是基于某一模板引擎的,普通人可读懂的HTML文件,这些文件有一些特殊的代码,用于产生动态信息。

    + Theme(主题)

    主题是包含一些函数的PHP文件,用于提供不同的布局风格。
    = Drupal 模块安装 =

    Drupal 已经自带了许多基本功能模块,在完成 Drupal 的安装后,开启这些模块就可以了。

    如果你需要功能扩展模块,则需要到 http://drupal.org/project/Modules 下载并安装这些模块。

    步骤非常简单:

    + 下载模块包

    + 解压缩

    + 把模块文件上传到 Drupal 的 modules 目录中

    + 有些模块可能需要运行 mysql 文件创建表

    + 在“管理->模块"中开启这个模块
    = Drupal的邮件发送设置 =

    用户在网站进行注册时,口令将发送到用户的邮箱里。这需要你的网站能进行邮件发送。

    网站发送邮件的办法有许多种,这里推荐一种使用ssmtp发送邮件的方法。

    假设你有一个gmail帐户,并打算用该帐户发送邮件:

    + 设置ssmtp

    # vi /etc/ssmtp/ssmtp.conf

    对该文件做如下设置:

    [email protected] (注:xxxx为用户名)

    mailhub=smtp.gmail.com:465

    rewriteDomail=gmail.com

    hostname=gmail.com

    + 设置php.ini

    # vi /etc/php/apache2-php4/php.ini

    对该文件做如下设置:

    sendmail_path = /usr/sbin/ssmtp -t [email protected] -apxxxx (注:前一个xxxx是用户名,后一个xxxx是口令)

    + 在Drupal的"管理->设置->通用设置->E-mail地址"中

    将E-mail地址设置为[email protected]
    = forum:论坛 =

    Drupal的forum模块提供论坛功能。

    在使用论坛模块时,应同时开启comment模块和taxonomy模块。comment模块为Drupal的节点提供讨论板功能,对论坛主题的回复就要用到该功能。taxonomy是智能分类模块,用于组织网站的内容,能自动对内容进行归类。

    comment和taxonomy是论坛正常运行所必需的两个模块。

    还可以配合其它模块来增强论坛的功能:

    + "管理->用户->配置"可以开启头像(图片)功能

    + 通过开启profile模块增强用户个人信息,可在"管理->设置->个人信息"中增加自定义内容

    + 通过使用privatemsg模块,用户间可以互相发短消息

    privatemsg是一个站内消息系统,可在这里下载:

    http://drupal.org/project/privatemsg

    privatemsg的中文包在这里下载:

    http://drupal.org/files/issues/priva…s-4.6.0.tar.gz

    + 通过subscriptions模块或notify模块让用户接收E-mail通知

    + 通过bbcode模块提供BBCode支持。

    bbcode模块将提供一个工具条,能很方便地在帖子中插入bbcode。
    = 定制自己的首页 =

    在"管理->设置->通用设置->默认首页"里可以设置自己的首页,默认值是"node"。它仅仅显示一些被设置为“推荐到首页”的文章。

    + 假设你创建了一个新的节点,包含有非常多的链接和非常复杂的内容,想把这个节点设置为首页。首先找到这个节点的id,假设节点id是83,你只需要将默认首页设置为"node/83"就行了。

    + 假设你想将用户blog设置为首页,则须将默认首页设置为"blog"。

    + 假设你想把论坛设置为首页,则须将默认首页设置为"forum"。
    = Drupal 界面定制 =

    当 Drupal 站点安装好后,有许多方法对站点界面进行个性化的设置和定制:

    + 安装主题风格

    主题风格控制了站点的外观和感受,你可以在网上下载Drupal的主题风格,并在"管理->主题"中启用这些风格。

    + 创建你自己的主题风格

    如果你不想用别人预先做好的主题风格,而想为自己的站点打造一个完全不一样的外观,你可以通过开发自己的主题风格来达到这个目的。主题风格的开发人员应具备HTML/CSS知识,如果要开发复杂的主题,则需要懂得PHP。

    + 定制导航菜单

    页面顶部和底部的菜单可以在"管理->主题->配置->菜单设置"中进行定制,主链接和备用链接中可以直接编写HTML代码。如果主链接为空,Drupal将根据你安装的模块自动建立导航菜单。每个主题风格可以定义不同的导航菜单。

    如果是基于PHPTemplate引擎的主题风格,导航菜单的定义方式是为每个菜单进行定义。

    + 定制文字串

    可以通过"管理->本地化->管理字符串"来定制本地语言的文本字符串,Drupal中几乎所有的文本字符串都可以修改。
    = Drupal 的主题风格 =

    == 模板引擎 ==

    Drupal支持三种模板引擎:xTemplate、PHPTemplate、wgSmarty。xTemplate是Drupal自带的模板引擎,但支持该引擎的主题风格数量不多。其他两个模板引擎需要到 http://drupal.org/project/Theme engines 下载。其中基于 PHPTemplate 的主题风格非常多。

    推荐使用 PHPTemplage,这个引擎大大加快Drupal的速度,非常有利于自己自定义模板,一些大型的Drupal站点都是用的这个引擎。

    PHPTemplage 的安装方法:

    + 下载 PHPTemplate

    + 将解压后的phptemplate目录拷贝到Drupal的themes/engines目录

    == 主题风格 ==

    “主题”是Drupal站点的基本外貌和感觉。有时一个特定的站点会安装不止一个的主题。如果站点管理员提供了多个主题,你可以为你的帐号选择你喜欢的默认主题。

    Drupal的官方站点提供了许多主题风格,具体见:

    http://drupal.org/project/Themes

    其中,Spreadfirefox是我最喜欢的主题风格,著名的 spreadfirefox.com 使用的就是这款主题。

    除Drupal的官方站点外,还有许多其他机构或个人提供Drupal的主题风格,通过Google可以搜索到这些风格。

    == Drupal 主题风格安装 ==

    Drupal 主题风格的安装非常简单:

    + 在 http://drupal.org/project/Themes 下载新的主题风格

    + 阅读主题风格包中的 README 和 INSTALL 文件,看该主题风格包的安装是否需要一些特殊的步骤

    + 检查一下主题风格需要的模板引擎是否已安装

    + 将主题风格上载到Drupal的themes目录中

    + 通过"管理->主题"启用该主题风格,并将其设置为默认风格
    == 主题风格中CSS的定制 ==

    Drupal的主题定制非常灵活,可以定制每个区块定制的风格。如果懂PHP的话,几乎可以做出可以想得到风格来。

    实际上,在大多时候我们主要是通过图片+CSS来定制,这是一种最简单的定制,也不需要懂得太多的PHP知识。

    在themes目录下的每个主题目录中,有一个style.css文件。定制CSS的关键是搞清楚CSS元素控制的对象。但许多人搞不清楚CSS元素控制的对象,在这方面花了不少时间。其实只要选对工具,这实际上是非常容易做的。

    这个强大的工具就是Firefox。大多数人只知道Firefox是一个浏览器,实际上Firefox提供了大量网页开发的工具。例如:

    + 选定一部分网页内容,通过右键菜单的View Selection Source功能,可以查看选定部分网页的源码。这是一个杀手级的功能,再也不必为在庞大的HTML源码中找不到相应的目标内容而头痛了。

    + 菜单 Tools->Page Info 可以看到非常详细的网页内容,包括表单、链接、多媒体等信息

    + 菜单 Tools->DOM Inspector 可以对网页的HTML、JavaScript、CSS等内容进行很方便的分级浏览

    Firefox的功能太多,一时半刻说不完,我们还是回到CSS定制上面来。这需要用到一个Firefox的插件,插件名称是Web Developer,可以在Firefox的网站上下载到这个插件。

    安装好Web Developer插件后,就可以用其提供的功能来定位对象的CSS控制元素:

    + 插件的CSS菜单下有一个View Style Information功能非常好用,当你的鼠标电击到网页的某项内容,就能看到该项内容所使用的相关CSS内容。

    + 在Information菜单下有一个Display ID & Class Details功能,能在网页上显示所有的ID和Class信息。

    Web Developer插件是专门为网页开发人员提供的一把宝刀,功能太丰富了,你们就慢慢去体会吧。
    = 提供搜索引擎友好的URL地址 =

    Drupal提供了一个path模块,该模块能定义URL地址的别名。这些别名能大大提高地址的可读性,能帮助搜索引擎更有效地对站内内容进行索引。每个页面可以创建多个别名。

    例如(左边是URL地址,右边是为其创建的别名):

    user/login => login

    image/tid/16 => store

    taxonomy/term/7+19+20+21 => store/products/whirlygigs

    node/3 => contact

    node/10 => products/merchandise/cups

    node/10 => cups

    node/11 => products/merchandise/coffeemakers
    == 批量别名设置 ==

    Drupal里允许批量为URL设置别名。通过这个功能,可以提供完全不一样的URL地址,甚至可以为不同的语言提供完全本地化的地址。

    批量修改别名的方法是在sites/default/settings.php中添加一个conf_url_rewrite函数(4.6.x),如果是Drupal 4.7.x,则函数名是custom_url_rewrite。

    以下例子将所有的"node/$node_id"类型的URL修改为"display/$node_id":

    <?php

    // 用于 Drupal 4.6.x 的例子

    function conf_url_rewrite($path, $mode = ‘incoming’) {

    if ($mode == ‘incoming’) { // 从客户端来的URL

    return preg_replace(’!^display/(\d+)$!’, ‘node/\1′, $path);

    } elseif ($mode == ‘outgoing’) { // 到客户端去的URL

    return preg_replace(’!^node/(\d+)$!’, ‘display/\1′, $path);

    }

    }

    ?>

    <?php

    // 用于 Drupal 4.7.x 及更高版本的例子:

    function custom_url_rewrite($type, $path, $original) {

    // 如果已经为该地址设置了别名,则不作进一步处理

    if ($path != $original) {

    return $path;

    }

    if ($type == ’source’) { // 从客户端来的URL

    return preg_replace(’!^display/(\d+)$!’, ‘node/\1′, $path);

    } elseif ($type == ‘alias’) { // 到客户端去的URL

    return preg_replace(’!^node/(\d+)$!’, ‘display/\1′, $path);

    }

    }

    ?>
    以上内容来源 http://www.linuxsir.org/bbs/showthread.php?t=231113
     
  2. xmlcss

    xmlcss New Member

    注册:
    2005-10-29
    帖子:
    1,683
    赞:
    30
    :ghost:
     
  3. sluke

    sluke New Member

    注册:
    2005-09-04
    帖子:
    4,550
    赞:
    13
    精!!!!!!!!!!!
     
  4. sluke

    sluke New Member

    注册:
    2005-09-04
    帖子:
    4,550
    赞:
    13
    借个地方
     

    附件文件:

  5. hopol

    hopol New Member

    注册:
    2005-09-26
    帖子:
    148
    赞:
    2
    哗 好东西!~~~
     
  6. faydao

    faydao New Member

    注册:
    2006-09-04
    帖子:
    2
    赞:
    0
    收藏之。:eek:
     
  7. 蓝色的信封

    蓝色的信封 New Member

    注册:
    2006-10-07
    帖子:
    252
    赞:
    3
    有没有lifetype的宝典啊?
     
  8. skyson

    skyson New Member

    注册:
    2005-10-19
    帖子:
    5
    赞:
    0
    恩,不错。懂了很多。。。。。。。。。
     
  9. swsw007

    swsw007 New Member

    注册:
    2006-07-04
    帖子:
    2,228
    赞:
    1
    还是觉得很复杂啊~~
    赫赫。
     
  10. 西子宜

    西子宜 Well-Known Member

    注册:
    2005-09-05
    帖子:
    15,739
    赞:
    62
  11. skyson

    skyson New Member

    注册:
    2005-10-19
    帖子:
    5
    赞:
    0
    非常不错,为什么回复的就这么少呢。。。
     
  12. 好莱坞的

    好莱坞的 New Member

    注册:
    2007-07-09
    帖子:
    134
    赞:
    0
    看晕了。。
     
  13. qlq

    qlq Active Member

    注册:
    2006-04-20
    帖子:
    2,658
    赞:
    1
    好贴先顶再看
     
  14. hjb1

    hjb1 Active Member

    注册:
    2005-09-04
    帖子:
    1,623
    赞:
    5
    不用!
     
  15. sandicyao

    sandicyao New Member

    注册:
    2007-05-10
    帖子:
    13
    赞:
    0
    收了 非常实用的资料