Bun Wong's Blog

专注于 Web 应用程序开发

Drupal

Drupal Taxonpage Module(6.x-0.3)

2010/04/28 •

伟大的分类学,被引入到 Drupal CMS 中,Everything is NODE,Every attribute is TERM 是很重要的 Drupal 思想,这与以往我们先有分类后有内容的概念不同,而这种低耦合的结构往往让处理内容来得更简单高效。

正因为 Drupal 中 Everything is NODE 思想,那么我们的页面生成,固然可以作为一个 Node,Drupal 默认包含的 Page 类型,是非开发人员最快捷的创建页面的方法;而对于开发人员则可以开发一个模块实现 hook_menu() 来生成页面。在项目中,页面的实现通常都是不负责开发的运营人员完成的,考虑到页面内容的维护难度,我们根据分类学,开发出这个名为 Taxonpage (Taxonomic page) 的模块,其大致功能是通过分类词来实现一个页面或者页面上的一个元素,并且负责渲染出该元素及内部的关联的 Node。

安装 Taxonpage 模块会产生一个名为 Page Elements 的词汇表,里面的每个分类词都对应一个页面上的元素,每个元素是可多继承的 (即非单根结构),这样可以直观看出页面的结构。

Taxonpage terms

每个元素,都必须设定一个渲染标识 (THEME NAME),用户可根据该标识定义模板,并递归产生其优先模板顺序,多继承和渲染标识特性可很好地解决模板重用的问题。当元素为根元素时,系统会自动根据其 PATH 值创建对应的 URL 页面,并且递归渲染其子元素。

Taxonpage settings

6.x-0.3 版本增加了页面元素的导入和导出功能,如下图。

Taxonpage Export/Import

如有任何问题或建议,可随时与本人交流 :)

Taxonpage 下载:taxonpage-6.x-0.3.zip

Drupal Debugger Module

2010/03/31 •

平时我们做调试信息输出,最常用的就是 var_dump,而在项目上线后,经常由于忘记删除 debug 信息而被客户提交致命缺陷……也有时 debug 页面并非可见的,如远程接口调试、后台运行的调试等,这也是 Debugger Module 要开发的原因 :)

Debugger  settings

Debugger 可设置日志输出类型,包括:不输出,输出到浏览器,输出到 Watchdog,输出到文件。

Debugger 下载:debugger-6.x-0.1.zip

Drupal 下 files 为符号连接目录的 imagecache 异常

2010/02/03 •

Drupal 可调用 file_create_path($source) 来返回 $source 的真实存在路径,而 file_create_path 函数内部是通过调用 file_check_location($source, $directory) 来检查 $source 是否存在于 $directory 内的,这里的 $directory 是 file_directory_path(),也就是我们熟悉的 sites/defailt/files 目录...

Drupal 渲染注册流程剖析

2009/12/19 •

昨天晚上遇到一个很纠结的问题,是关于 Drupal Theme 的 Template 文件路径问题。原则上只要 Theme 主题目录下存在同名的 tpl.php 的话,Drupal 将不再使用 Module 目录下的默认模板,出现的问题则不同,Drupal 找不到 Theme 目录下的文件而总是用原默认模板...

Drupal 后台主题

2009/07/17 •

今天发现了一个很不错的主题,很适合用来做 Drupal 的后台,因为 Drupal 中后台和前台是可以选择不同的主题,前台通常都是自定制的了,如果你已经很厌倦了 Drupal 默认的丑陋的 Garland 主题,又或者你不希望被人发现你用的是 Drupal ( 或许你是个 soho 分子,你并不希望客户知道这个被你说的天花乱坠的网站是用开源 CMS 开发的 ) ,就不妨试试这个叫 RootCandy 的主题吧 :)

Drupal 优秀模块列表

2009/07/03 •

这里用来记录下 Drupal 的 Module 列表,发现了好用的模块的话会加上来 :)

Drupal .htaccess rewrite 规则分析

2009/06/24 •

Drupal 默认通过 apache 的 mod_rewrite 来实现 Clean URLs 功能,大家可以打开根目录下 .htaccess 看到关于 mod_rewrite 的规则,下面我们来分析一下 Drupal 的 rewrite 规则:

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on
...

关于用 Drupal 重建 Blog

2009/06/19 •

这个想法不是这几天才有,当我接触到 Drupal Module 开发的那一天开始,我就被这个好东西深深吸引,而以前辛辛苦苦写框架写控制器写模型做出来的东西,都可以用 Drupal 和它的第三方 Module 来很简单的实现,因此现在主要问题不是出现在功能实现上,而是如何把内容更好的表现出来。尽管现在对 Theme 的开发还不是很熟练,要按照 Drupal Template 的机制来实现当前的主题对我来说还有相当难度,但是我想这个 Blog 是个很好的练习机会。

深入 Drupal 引导流程 (3) - session_set_save_handler

2009/05/26 •

接下来是 Drupal 的会话阶段,Drupal 是采用 PHP 内置的会话机制,但是它重载了 PHP 内置的会话处理器 (PHP 内建处理是把会话保存为文件方式的),把会话数据保存在数据库内。

case DRUPAL_BOOTSTRAP_SESSION:
  require_once variable_get('session_inc', './includes/session.inc');
  session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy_sid', 'sess_gc');
  session_start();
  break;

...

深入 Drupal 引导流程 (2)

2009/05/20 •

这段时间一直在研究 Drupal 的源代码,哈哈,少时间来更新 Blog,今天我们再续 Drupal 的引导流程

case DRUPAL_BOOTSTRAP_EARLY_PAGE_CACHE:
  // Allow specifying special cache handlers in settings.php, like
  // using memcached or files for storing cache information.
  require_once variable_get('cache_inc', './includes/cache.inc');
  // If the page_cache_fastpath is set to TRUE in settings.php and
  // page_cache_fastpath (implemented in the special implementation of
  // cache.inc) printed the page and indicated this with a returned TRUE
  // then we are done.
  if (variable_get('page_cache_fastpath', FALSE) && page_cache_fastpath()) {
    exit;
  }
  break;

早期页面缓存阶段...

深入 Drupal 引导流程 (1)

2009/05/11 •

对于每个请求,Drupal 通过一系列的引导指令阶段来引导它自己。这些阶段在 bootstrap.inc 中定义

/**
* First bootstrap phase: initialize configuration.
*/
define('DRUPAL_BOOTSTRAP_CONFIGURATION', 0);
...

Drupal 生成缩略图功能

2009/04/25 •

提到 Drupal 生成缩略图,或者你第一次时间想到的会是 Image Module,但本文说的是并不是一些第三方的工具包。其实,尽管说 Drupal 内核的图片处理能力不算强,但对于生成缩略图的小功能还是应付有余,大家可以看看 Drupal 图片处理核心文件 includes/image.inc的说明。

Drupal 内置的缩略图方法有 4 种:resize, scale, crop, scale & crop,总有一款适合你 :)

...

Drupal 外部身份验证模组开发

2009/04/22 •

最近公司的项目是使用 Drupal 为基础的二次开发,估计最近几个月都以这个方向为主,作为 Drupal 的新手,现在也只能一边埋头看文档一边写些 Example 了。上头给了一个小需求,是把 Drupal 的登录模块修改成可以使用自己的验证方式和默认 Druapl 验证方式的切换。

Google 出来的结果很多都是 for Drupal 5.x 的,大家要注意啦, Drupal 6.x 和 5.x 的 HOOK 函数和参数表有很大的差别,所以建议大家多看看 Drupal API手册。后来绕了一大圈发现 Drupal 6.x 的默认模组 (modules) 里面,有一个叫 OpenId 的模组可以实现这个功能。当然,我们的外部身份验证需求通常不唯一的,比如可能是 Discuz! 论坛或者你当前站点的身份验证,制定一个外部身份验证模组正是我们今天的题目解决的问题。

...

Google Analytics

最近一个月访问数:544