7.2插件方式的好处

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
插件的方式,就能很好的解决这个缓加载的问题,Drupal在默认的情况下,是不会去加载插件的,只有当需要的时候,才去加载相应的插件。在field validation 1.x里面,我们也拆分成了多个文件,比如field_validation.validators.inc,field_validation.rules.inc,我们把所有的验证器都放到了field_validation.validators.inc中,很多人以为,这样也实现了缓加载,其实不然,在field_validation.module文件里面,代码是这样写的:
include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'field_validation') . '/' . 'field_validation.validators.inc';

Drupal版本: 

7.1hook_hook_info

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
Drupal7对钩子函数的缓加载,还是有改进的,Drupal7里面是这样改进的,通过hook_hook_info,我们就可以把多个钩子函数划分成一组,比如组名叫做rules,那么我们就可以把rules相关的钩子实现,都放到mymodule.rules.inc文件中去。这样当,调用rules相关的钩子时,才会加载mymodule.rules.inc文件。不过,不是很多程序员都了解这个机制,就是很多资深的Drupal开发者,也不了解这个机制。比如,Ubercart里面就没有类似的实现,不过我在uc_ctools模块里面,帮助Ubercart实现hook_hook_info钩子。我们来看看我的实现:

Drupal版本: 

7深入掌握了插件机制

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
对插件机制的理解,有了更深的认识。以前总觉得,钩子机制,是Drupal核心最本质,最具特色的一个机制,Drupal之所有这么灵活,就是它本身所待的这种钩子机制。其它模块,如果想与Drupal系统交互,只需要实现相应的钩子就可以了。但是钩子机制本身,也是有很大的局限性的,特别是随着Drupal应用的领域越来越广,这种局限性,就越来越明显的暴露出来。钩子机制有哪些局限性呢?所有的钩子实现都需要放到module文件里面,我们知道,每一个页面,都会加载所有的module文件,把所有的钩子代码都放到module文件里面,

Drupal版本: 

6代码更加规范

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
首先一个进步就是编码规范,为了让自己的模块,更易于让人接受,自己在后面,使用Coder模块,按照它所给出提示,修正了几乎所有的代码格式问题。问题最多的两个地方,一个就是我把tab键设置成两个空格了,后来手工的一个一个的把tab转为了空格,这样在其它编辑器/IDE下面也是格式良好的;另一个常见的问题,就是控制语句括号的两边要有空格,以前我总是这样写:

Drupal版本: 

5 心得体会

​作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
通过维护一个这样逐渐流行的社区模块,自己在技术上进步了很多。

Drupal版本: 

4 后续的改进:

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
​2.0-RC1版本里面,修正了三个小问题,一个是文字错误,一个是日期验证里面星期的日期范围验证有问题,一个是机读名字有可能超过32个字符的问题。都是很小的问题,很快就修正了。在2.0的正式版里面,新增了一个date range2 验证器,删除了date validation模块,将它迁移到了field_validation_deprecated模块里面,修正了数值验证里面的一个小问题。之后基于Drupal8的插件系统,开发了Drupal8下面的1.0alpha1版,学习了Drupal8里面的插件机制。在后面是2.1版,这里面修正了部分验证规则只适用于管理员的问题,我们使用下面的代码搞定了这个问题:
//Always bypass all access checkings.

Drupal版本: 

3.3 field_validation_export_ui.inc

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
对于UI模块,我们将原来自己编写的UI部分代码也搬了过来,同时也完善了Ctools 导出UI里面的逻辑,为其加上了AJAX效果。里面有段代码需要学习一下:

Drupal版本: 

3.2 set_error

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
其中set_error使得错误消息的设置更加简单,一句话就能将错误消息设置好了,通常使用这样的代码设置错误消息:
$this->set_error($token);
token_help则是用来在错误消息里面支持占位符(令牌)替换模式的,就是用户在自定义错误消息里面,可以输入可用的占位符,这些占位符最后被替换为相应的变量值。这个技术在Views里面经常遇到,在Field validation的问题列表中,也有相应的功能支持请求。我们来看一下set_error这个函数的代码:

Drupal版本: 

页面

关注我们的微信

关注我们,体验一下Drupal微信(Wechat)模块的最新进展

Think in Drupal 官方微信 亚艾元官方微信

 

Subscribe to Think in Drupal RSS