Discuz特殊主题插件工作的原理分析

文章详细解析了Discuz中特殊主题的功能和实现机制,涉及特殊主题的来源、输入项和展示样式。通过分析forum_post.php和post_newthread.php等关键文件,阐述了特殊主题的创建和编辑过程,以及如何处理插件和模板。同时,文章还介绍了触屏版的特殊主题实现,包括参数修改和模板调整,以适应移动设备。
摘要由CSDN通过智能技术生成

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
几乎没差别

至此完成了触屏版的特殊主题实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行舟Discuz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值