I can't believe I had to see The girl of my dreams cheating on me The pain you caused has left me dead inside I'm gonna make sure, you regret that night I feel you close, I feel you breathe And now it's like you're here You're haunting me You're out of line, you're out of sight You're the reason that we started this fight But I know, I just gotta let it go, I, should've known I gotta learn to say goodbye now I throw my armour down, And leave the battleground For the final time now, I, I know. I'm running from a warzone In our house, I hate that place, Everywhere I walk I see your face Try to erase a memory with a flame, And hope I never see you again Standing here, in this burning room, You know the end could never come so soon, It's clear to me, The lies you use, The ones that killed me ain't hurting you, So I know, I just gotta let it go, I, should've known I gotta learn to say goodbye now I throw my armour down, And leave the battleground For the final time now, I, I know. I'm running from a warzone I'm running from a warzone I can't do this anymore I'm running from a warzone What are we fighting for? I'm running from a warzone... I know, I just gotta let it go, I, should've known I gotta learn to say goodbye now I throw my armour down, And leave the battleground For the final time now, I, I know. I'm running from a warzone 某社区打算升级discuzX3.2,不过据说原来的录像解析插件升级了之后不能用了
于是我自发的去帮了一下他们,顺便看看他们的解析是什么样子

本来以为他们的录像解析是以插件的形式嵌入论坛的
直到我开始分析他们的源码......
我去,居然直接改discuz的源码!
而且没有任何的修改说明,代码东一块西一块零零散散的,光是找相关代码都要找半天,真是无语了= =

于是我打算把原来在X2中的修改源码的形式改成在X3.2中的插件形式
上手照着google那些入门教程写了写,然后了解了一下里面插件的嵌入方式
弄着弄着,渐渐地开始体会到了discuz这整个架构的庞大与沉重...
这时我仿佛看到了当年的ENIAC(世界上第一台计算机)...
TMD论重量级,跟Typecho简直一个天上一个地下啊!!!
Typecho数据库的所有表加起来才8张
而discuzX2的数据库表加起来却超过200张,升级到X3.2后更是超过了300张!我的天...


再说说弄这个录像解析插件的曲折之路吧.
刚开始,根据discuz的资料库,看到了viewthread_attach_extra这个注入点
这个函数应该返回一个array,在discuzcode.htm
但问题来了,这个返回的array中应该是什么格式?包含什么样的内容?
文档里面完全没有相关资料,在网上搜更是有人直接return array(1, 2, 3)的= =
于是我打开discuzcode.htm,到里面去找答案,原来是要返回一个aid附件表
可是我完全不知道怎么获得这个aid表...于是纳闷了,搞半天,最后只好放弃了这个方案,换种思路
接着试了discuzcode,然而还是附件信息不足,无法解析成功

既然找来找去,没有好的hook点,也就只好被逼着改点源码.造一个hook点了
可是DZ这么大的架构,要怎么驾驭???试过echo,var_dump,啥效果都没有...
这可怎么调试...于是去网上搜各种办法,才知道每次修改php之后都要清缓存才行
而且发现了两个很重要的函数

showmessage("要输出的消息");
debug($变量);


这样终于可以调试了,于是修改了function_attachment.php,在里面遍历附件并显示的地方嵌入代码
这下一改,一下子就解决了附件信息不足的问题.而且可以做到尽可能少的改DZ源代码

最终决定.整个插件的思路是这样的

先写一个插件包,把原来X2中旧的录像解析,里面跟DZ黏在一起的部分的代码分离出来
然后写一个replay_tool.class.php,作为一个嵌入的标志,全局性的把录像解析的css样式放到viewthread页面的顶部
在DZ的admin后台引用这个replay_tool.class.php
然后在function_attachment.php的显示附件部分,嵌入自己的代码
通过全局变量$_G判断插件是否已经启用

in_array('replay_tool', $_G['setting']['plugins']['available'])


如果已经启用的话,就开始引入source/plugin/replay_tool/core.func.php,并执行里面的resolve_replay()函数
这样就实现了论坛附件录像解析的功能,

最后感叹一下,大的架构真的是不一样啊.虽然discuzX3.2不是什么新东西了.但里面的架构思想还真是让人印象深刻.

源码已上传至Github