- 工作时间:周一至周六 8:30-17:00 值班18:00-22:00
-
鸿茂传媒经营理念
以客户的需求为出发点
-
腾讯云/阿里云/华为云机房
提供安全稳定的云服务器空间
-
16年运维技术经验
提供专业的1V1人工技术服务
如何让Discuz阅读权限大于0的帖子也能用DIY调用到
使用过Discuz的朋友都知道,哪怕你只是一个技术小白也好。DZ的DIY功能能让一个完全不懂代码的站长也能进行各种调用操作,比如在站内可以直接在前台调用数据,而在站外可以直接用后台提供的API进行数据调用,比如在自己写的独立程序上调用DZ论坛的数据就可以除了重新写SQL外还可以直接通过DZ后台的API进行调用。
但问题来了。我们会发现有的帖子设置了阅读权限,比如设置了10、100、255等等,这样的帖子如果我们想DIY调用出来发现调用不到。其实这是DZ在程序设计上的考虑,他们是这样考虑的,既然你设置了权限了也就是帖子不让别人访问了,就没必要在列表里面展示了,其实这样的考虑比较完善的。但有的站长就是有这样的需求,比如设置了10的权限,我网站大多数用户还是需要看啊。
带着这样的需求就开始我们这里讨论的话题吧。其实DIY调用数据,或者直接在后台进行调用,最终还是需要从数据库里边取数据。只是DZ可能从架构上采用了面向对象开发机制,把这些都封装到某些类的方法里面。比如关于阅读权限大于0就不显示在DIY调用数据的列表里面,通过微构网络发现就是在source/class/block/forum/block_thread.php中的一个名为block_thread中所约束的,这个类继承了discuz_block 这个父类。而且是写入在了getdata()这个方法里面。通过分析就在357行(X3.2版本)中有一段如下代码
$sqlfrom WHERE {$maxwhere}t.readperm=’0′
其中WHERE {$maxwhere}t.readperm=’0′就是限制条件,也就是只有阅读权限为0的帖子才会被显示出来,如果我们要把所有的都显示出来,那么还明显我们可以改成WHERE {$maxwhere}t.readperm>=’0′都可以,当然也可以是其他的方法了,比如修改其他的地方把这个where条件的一部分去掉。
到了这里我们很自然可以做进一步的优化,比如显示阅读权限为100及以下的帖子,那么我们只需要把那段代码修改为
$sqlfrom WHERE {$maxwhere}t.readperm<=’100′
即可
© 网站版权与免责声明
1、【鸿茂传媒】独立拥有本网站相关网页内所有资料的版权;
2、未经【鸿茂传媒】的明确书面许可,任何人不得对其进行复制;
3、本网站未注明【鸿茂传媒】的文章,均来源于网络,仅供大家学习与参考;
4、如有侵权/违规/不妥请联系客服QQ或邮箱删除,敬请谅解;
5、【鸿茂传媒】保留随时更正、修改、更新本声明的权利。法律申明