Discuz中有特殊主题这一功能,所谓特殊主题就是与普通的主题有不同之处的主题,它的不同之处在输入项、展示页面样式这两个方面,特殊主题可以更加突出的表现发帖者的意图达到某种功能或效果。
特殊主题目前来源于2个方面:
1、Discuz自带的几种特殊主题 如投票 2、Discuz插件内自行定义的特殊主题(pc版)
Discuz实现特殊主题的流程代码分析步骤:
输入项部分分析:
相关链接
http://bbs34.test.com/forum.php?mod=post&action=newthread&fid=44
找到对应功能页面
source/module/forum/forum_post.php
分析页面关键代码
10-12 行 : 对非正常访问的控制
15行 :cknewuser(); 如果是普用户则对用户进行了各种发帖前的检测(见习期、防灌水设置部分)
22-28行:
获取 已经发布了的帖子的一些基本信息(类似编辑帖子的情况)
36-38行:用户栏目相关 ???
40-63行:如果主题是群组的帖子的处理
65-71行:action参数的一些异常和特殊情况(相册albumphoto) 或版块是否禁止发帖
73行: 载入source/function/function_discuzcode.php文件
function_discuzcode.php文件描述
主要引入模板文件 template/default/forum/discuzcode.htm 主要是信息展示时使用的几个函数 ??
91-116行:如果时编辑则查询特殊主题id、版本id
118-142行:构造导航
145行: 禁帖检查
147-159行:检查是否有访问权限
161行:版块权限检查
169-199行:上传功能初始化
222-238行:特殊信息如特殊主题插件
244-270行:发布主题时特殊主题 特殊插件信息
277-293行:构造编辑器参数
295行: 特殊主题插件设置 special=127
298-322行:操作策略配置
324-332行:用户的相册信息
361行:require_once libfile('post/newthread', 'include'); 发帖页面######
source/include/post/post_newthread.php 文件中有对特殊主题插件文件的寻找103行
对特殊主题插件类型的构造和对 插件 newthread方法的调用
并获取 buttontext iconfile 等插件信息
即: 在99-120行为特殊主题插件构造页面信息获取等
在213-224行对特殊主题插件提交操作后方法 newthread_submit方法进行了调用
在137行 包含入 getgpc('infloat') ? include template('forum/post_infloat') : include template('forum/post');
这里则引入编辑器 template/default/forum/post.htm页面
template/default/forum/post.htm页面中 190行开始引入了几个关键模板页面
<!--{subtemplate forum/post_editor_extra}-->
在post_editor_extra.htm页面中使用了$threadplughtml这个参数是在post_newthread.php中构造出来的
post_editor_extra.htm页面中65-72行做了此项工作
至此基本了解了dz是如何让特殊主题插件工作的了:
相关页面从外到内依次为:
source/module/forum/forum_post.php 关键行:361行
source/include/post/post_newthread.php 关键行:99-120行 213-224行 137行
template/default/forum/post.htm 关键行:190行
template/default/forum/post_editor_extra.htm 关键行:65-72行
触屏版相关功能分析===========================================
帖子列表链接
http://bbs34.test.com/forum.php?mod=forumdisplay&fid=37&mobile=2
相应文件 source/module/forum/forum_forumdisplay.php
这里需要修改的原因是 发布按钮的跳转链接也需要带上特殊主题的参数
PC版的发布页面链接 :http://bbs34.test.com/forum.php?mod=post&action=newthread&fid=37&specialextra=antsun_one_city
触屏版的发布页面链接:http://bbs34.test.com/forum.php?mod=post&action=newthread&fid=37&mobile=2
对比发现是触屏版少了个specialextra的参数 多了一个mobile=2的参数
好的,首先修改forum_forumdisplay.php文件
965行: $template = 'diy:forum/forumdisplay:'.$_G['fid'];
触屏版则需要修改
template/default/touch/forum/forumdisplay.htm
在文件第6行 发现了需要修改的位置:那么参考pc版相应位置进行修改 1
修改完成后进入 template/default/touch/forum/post.htm页面进行修改
那么其实就是仿照
<!--{subtemplate forum/post_editor_extra}-->
对template/default/touch/forum/post_editor_extra.htm 的页面进行修改
可我发现并没有这个页面
拷贝pc版的这个页面进去进行自己修改,修改完后 需要对插件中的相应模板文件进行样式修改以匹配手机端
然后再主题展示的时候也需要进行修改
任然比较pc版和触屏版的请求链接
pc : http://bbs34.test.com/forum.php?mod=viewthread&tid=28&extra=page%3D1
触屏:http://bbs34.test.com/forum.php?mod=viewthread&tid=27&extra=page%3D1&mobile=2
几乎没差别
至此完成了触屏版的特殊主题实现