hello1069 發表於 2022-4-20 15:11:06

DISCUZX2.5/X3/X3.1扩展框架DXEXTEND1.3.0版本发布[9.25升级X31重要]

<font color="#ff0000"><strong><font size="5">9.25 升级3.1提示:</font><font size="3">论坛2.5/3.0版本已经安装了框架的升级到最新版3.1的,请下载覆盖最新包并手动删除extend/class/class_cloud_ext.php文件</font></strong></font><br /><font size="3"><font color="#ff0000"><strong><br />8.9更新到1.3.0beta</strong></font></font><br /><font size="3"><font color="#ff0000"><strong>1,新增</strong></font></font><font size="3"><font color="#ff0000"><strong>EXTEND_NO_DETECT常量,默认为false,会自动检测框架源文件更新情况。当更新各扩展的时候不需要再删除缓存文件。当功能稳定而不需要更新扩展的时候可以设置成true。</strong></font></font><br /><font size="3"><font color="#ff0000"><strong><br />7.19更新到1.2.2beta</strong></font></font><br /><font size="3"><font color="#ff0000"><strong>1,修复自定义常量失效</strong></font></font><br /><br /><font size="3"><font color="#ff0000"><strong>7.18更新到新版1.2beta</strong></font></font><br /><font size="3"><font color="#000000"><font style="background-color:white">1,修复支持discuz_application类扩展</font></font></font><br /><font size="3"><font color="#ff0000"><strong><br />7.17更新到版本1.1.2beta</strong></font></font><br /><font size="3">1,类名方法名大小写不敏感</font><br /><br /><strong><font size="4"><font color="#ff0000">7.16更新到版本1.1.1beta:</font></font></strong><br /><font size="3"><font size="3">1,新增开关常量,在config文件里写</font>$_config['extend']['<i>innodb</i>']['on'] = 1;用来代表开关,在系统中生成INNODB常量值为1.<br />2,新增文件依赖,即使启用缓存了也会优先保证extend文件夹的ext类存在才会执行。<br />3,新增云上报的类在extend文件夹里的映射,对应关系为:api/manyou 对应 extend/class/api/manyou<br /><font size="3"><br /></font><br /><font size="3"><br /></font><br />现有的插件机制是一种HOOK钩子机制,可以大致理解成是一种半路拦截的机制,在核心类实例化后运行runhooks(),在编译好的模板顶端运行hookscriptoutput()。这种方法虽然好用,但是当我们想修改一些核心类库的时候,就不是那么方便了。</font><br /><font size="3">比如当我们需要在table_forum_post类的fetch_all_prune_by_search方法里增加一个参数,让里面的搜索由sphinx来完成(举个例子,可行性暂不说)。</font><br /><font size="3">或者我们觉得mysql用来做计数不方便,要改用redis来统计的时候,我们不得不修改源码,其他似乎找不到可以不改源码的方法。</font><br /><font size="3">又比如我们论坛使用了云主机,不允许本地IO,我们需要把所有的附件传到另外一个提供了上传API的云服务器,我们还是不得不修改底层的upload类或者使用效率低下的FTP远程附件。</font><br /><font size="3"><br /></font><br /><font size="3">那么有没有不修改源码就能实现所有类扩展的方法呢?我们最近在进行一系列论坛优化方案的时候就遇到了这个问题,比如INNODB,redis分页,计划任务分离等都需要修改底层的类来实现。所以我们推出了适应于X25/X3的扩展框架。</font><br /><font size="3"><br /></font><br /><font size="3"><font color="#ff0000">扩展框架的目标:</font></font><br /><font size="3">我们可以在不修改任何源码的情况下,修改、新增source/class目录下所有的类文件。</font><br /><font size="3"><br /></font><br /><font size="3"><font color="#ff0000">扩展框架的原理:</font></font><br /><font size="3">我们通过修改论坛的自动加载机制,让他优先加载我们的扩展类,而扩展类均继承了需要扩展的父类。</font><br /><font size="3"><br /></font><br /><font size="3"><font color="#ff0000">安装和使用方法:</font></font><br /><font size="3">1,下载对应的文件包,覆盖到根目录,其实只修改了一个文件:class_core.php,我们在里面修改了自动加载机制。</font><br /><font size="3">2,在论坛下建立新的文件夹extend/class,而这个class里面的目录和文件列表均和source/class下的保持一致。</font><br /><font size="3">3,比如我们需要修改source/class/discuz/discuz_upload.php里面的类,把它的save,makedir等方法修改,则只需要在extend/class下建立一个discuz文件夹,再建立一个名为discuz_upload<font color="#ff0000">_ext</font>.php的文件,这个表示这个类是扩展的。</font><br /><font size="3">4,在discuz_upload<font color="#ff0000">_ext</font>.php文件里,我们对类discuz_upload进行修改,则只需要写一个类继承discuz_upload类。示例如下:</font><ol><li>&lt;?php<br /><li><br /><li>class discuz_upload_ext extends discuz_upload {<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;function save(){......}<br /><li>}</ol>这样你写的save方法就替代了论坛<strong><font color="#ff0000">所有</font></strong>调用discuz_upload-&gt;save()的地方了,是不是很方便呢?<br /><font size="3">5,又比如,我们准备对table文件夹下的某个数据库操作的方法进行重写,类似,在extend/class下建立table文件夹,在里面建立比如table_forum_post<font color="#ff0000">_ext</font>.php文件,然后写一个子类,class table_forum_post_ext extends table_forum_post{},在里面可以新增或者对已有的方法进行重载,这个会让整个论坛所有调用此方法都使用你修改后的方法。</font><br /><font size="3"><br /></font><font size="3"><font color="#ff0000">文件目录列表:</font></font><br /><img title="QQ截图20130628170451.png" id="aimg_14654" aid="14654" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202204/20/151232g5bkudbbcdkzd9ob.png" src="https://www.dismall.com/data/attachment/forum/202204/20/151232g5bkudbbcdkzd9ob.png" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><font size="3"><font color="#ff0000"><br /></font></font><font size="3"><font color="#ff0000">注意事项:</font></font><br /><font size="3">1,关于子类的命名请严格按照上面说的方式来命名,否则不会被读取。</font><br /><font size="3">2,写代码时请尽量按照discuz的书写格式来写,比如不要使用短标签等。</font><br /><font size="3">3,<strong>在class_core定义了一个EXTEND_NO_CACHE常量,当生成缓存出现问题时可以打开强制更新缓存,当代码测试无误后请修改为false。新增</strong><strong>EXTEND_NO_DETECT常量,可以自动检测扩展源文件变动而自动更新缓存,默认为false,即此功能生效。当功能趋于稳定后可以考虑设为true。</strong></font><br /><font size="3">4,该框架可以实现source/class目录下所有类的重写,但是class_core文件里的除外,因为我们已经修改了。</font><br /><font size="3">5,由于历史原因,class目录下的类的构造函数有些是与类名相同,有些使用了__construct,子类如果需要调用父类的构造函数统一写成parent::__contruct()</font><br /><font size="3">6,由于历史原因,有些文件里有两个或多个类,我们也可以对其中的一个或者多个进行继承,方法如上面所述。</font><font size="3"><br /></font><br /><font size="3">7,部分类使用了instance方法把实例保存到静态变量中来避免重复实例化,遇到这种类子类也应当存在此方法,否则实例化的是父类而导致子类中的方法均不生效。<br />8,其他插件更新的时候在1.3.0beta版本以下的必须要去data/sysdata文件夹下删除所有_ext结尾的文件,以便新插件生效<br /></font><br /><font size="3">欢迎各位开发者试用,发现问题或者有更好的想法欢迎留言。</font><br /><font size="3">今后我们的各种性能扩展也基本会在此框架下运行。</font><font size="3"><br /></font><br /><font size="3">X3.1</font><br /><ignore_js_op><span style="white-space: nowrap" id="attach_14653" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})">upload_extend1.3.0_x3.1.zip<em class="xg1">(3.45 KB, 下载次数: 671)</em></span>2022-4-20 15:10 上传点击文件名下载附件</ignore_js_op><font size="3"><br /></font><br /><font size="3"><br />X3:</font><br /><ignore_js_op><span style="white-space: nowrap" id="attach_14652" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})">upload_extend1.3.0_x3.zip<em class="xg1">(4.6 KB, 下载次数: 612)</em></span>2022-4-20 15:10 上传点击文件名下载附件</ignore_js_op><br /><br />X25<br /><ignore_js_op><span style="white-space: nowrap" id="attach_14651" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})">upload_extend1.3.0_x25.zip<em class="xg1">(4.06 KB, 下载次数: 608)</em></span>2022-4-20 15:10 上传点击文件名下载附件</ignore_js_op><br />无编码版本区别,选择相应版本就行。<br /><font size="3"><font color="#ff0000"><strong>已经通过本框架完成的扩展列表:</strong></font></font><br />DISCUZX3/X25论坛云上报/计划任务异步机制方案1.0beta<br />discuz-redis 扩展 轻松快速分页 避免分页瓶颈<br />Discuz! X2.5 / X3 InnoDB 补丁<br />DISCUZX2.5/X3帖子点击数缓存即时更新<br />DISCUZX2.5/3云存储通用接口<br />DISCUZ X2.5/X3/X3.1 SESSION机制优化扩展 1.0.1beta版<br /><br /><br /><strong><font size="3"><font color="#ff0000">关于bin目录驻守进程脚本的开机启动配置</font></font></strong><br />在扩展中我们有些脚本是需要一直在后台不间断运行的,比如session机制统计脚本,云上报异步脚本。<br />为了避免重启时任务丢失,我们需要在开机启动里加上这个脚本,大家可以参考如下设置。<br />1,进入/ect/rc.local<br />2,添加如下代码在最后:<ol><li>cd /data/wwwroot/html/x3/extend/bin<br /><li>nohup /usr/bin/php bin_session_cron.php &gt; /data/wwwroot/html/x3/extend/bin/sessionlog 2&gt; /data/wwwroot/html/x3/extend/bin/sessionlog2 &amp;<br /><li> nohup /usr/bin/php bin_async_cron.php &gt; /data/wwwroot/html/x3/extend/bin/asynclog 2&gt; /data/wwwroot/html/x3/extend/bin/asynclog2 &amp;</ol>大家记得把路径替换成自己网站的,php命令也得替换成自己的<br />3,云上报异步设置开机启动可能会出错,提示random函数不存在,这时需要在bin_async_cron.php中加入function_core文件中的random函数即可。<br /><br />4,最后记得给bin目录设置700权限<br /><br /><br /><br /><br /><br /><br />我们<em>, </em>ff0000<em>, </em>修改<em>, </em>扩展

hello1069 發表於 2023-4-11 20:30:49

为什么还没有x3.5的???

杨国堂 發表於 2023-4-11 20:32:21

3.5版本的是不是同样有效?????????????????????????
頁: [1]
查看完整版本: DISCUZX2.5/X3/X3.1扩展框架DXEXTEND1.3.0版本发布[9.25升级X31重要]