Discuz教程网

[其他教程] DISCUZX2.5/X3扩展框架DXEXTEND1.0beta版本发布

[复制链接]
authicon 小白 发表于 2013-6-28 17:06:30 | 显示全部楼层 |阅读模式

现有的插件机制是一种HOOK钩子机制,可以大致理解成是一种半路拦截的机制,在核心类实例化后运行runhooks(),在编译好的模板顶端运行hookscriptoutput()。这种方法虽然好用,但是当我们想修改一些核心类库的时候,就不是那么方便了。比如当我们需要在table_forum_post类的fetch_all_prune_by_search方法里增加一个参数,让里面的搜索由sphinx来完成(举个例子,可行性暂不说)。或者我们觉得mysql用来做计数不方便,要改用redis来统计的时候,我们不得不修改源码,其他似乎找不到可以不改源码的方法。又比如我们论坛使用了云主机,不允许本地IO,我们需要把所有的附件传到另外一个提供了上传API的云服务器,我们还是不得不修改底层的upload类或者使用效率低下的FTP远程附件。

那么有没有不修改源码就能实现所有类扩展的方法呢?我们最近在进行一系列论坛优化方案的时候就遇到了这个问题,比如INNODB,redis分页,计划任务分离等都需要修改底层的类来实现。所以我们推出了适应于X25/X3的扩展框架。

扩展框架的目标:我们可以在不修改任何源码的情况下,修改、新增source/class目录下所有的类文件。

扩展框架的原理:我们通过修改论坛的自动加载机制,让他优先加载我们的扩展类,而扩展类均继承了需要扩展的父类。

安装和使用方法:

1,下载对应的文件包,覆盖到根目录,其实只修改了一个文件:class_core.php,我们在里面修改了自动加载机制。

2,在论坛下建立新的文件夹extend/class,而这个class里面的目录和文件列表均和source/class下的保持一致。

3,比如我们需要修改source/class/discuz/discuz_upload.php里面的类,把它的save,makedir等方法修改,则只需要在extend/class下建立一个discuz文件夹,再建立一个名为discuz_upload_ext.php的文件,这个表示这个类是扩展的。

4,在discuz_upload_ext.php文件里,我们对类discuz_upload进行修改,则只需要写一个类继承discuz_upload类。示例如下:


  1. <?php
  2. class discuz_upload_ext extends discuz_upload {
  3.         function save(){......}
  4. }
复制代码
这样你写的save方法就替代了论坛所有调用discuz_upload->save()的地方了,是不是很方便呢?

5,又比如,我们准备对table文件夹下的某个数据库操作的方法进行重写,类似,在extend/class下建立table文件夹,在里面建立比如table_forum_post_ext.php文件,然后写一个子类,class table_forum_post_ext extends table_forum_post{},在里面可以新增或者对已有的方法进行重载,这个会让整个论坛所有调用此方法都使用你修改后的方法。

  
文件目录列表:
170639hjmn8gfmg3iqj94q.png

注意事项:

1,关于子类的命名请严格按照上面说的方式来命名,否则不会被读取。

2,写代码时请尽量按照discuz的书写格式来写,比如不要使用短标签等。

3,在class_core定义了一个EXTEND_NO_CACHE常量,编写代码时请设置成true,能即时看到效果,当代码测试无误后请修改为false。

4,该框架可以实现source/class目录下所有类的重写,但是class_core文件里的除外,因为我们已经修改了。

5,由于历史原因,class目录下的类的构造函数有些是与类名相同,有些使用了__construct,子类如果需要调用父类的构造函数统一写成parent::__contruct()

6,由于历史原因,有些文件里有两个或多个类,我们也可以对其中的一个或者多个进行继承,方法如上面所述。

欢迎各位开发者试用,发现问题或者有更好的想法欢迎留言。今后我们的各种性能扩展也基本会在此框架下运行。

X3:

游客,如果您要查看本帖隐藏内容请回复

X25

游客,如果您要查看本帖隐藏内容请回复

无编码版本区别,选择相应版本就行。





上一篇:【情锁xp主题&amp;mfxp】
下一篇:1314学习网首页N格使用问题,如何关闭显示会员?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2024-4-29 22:21

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表