微构网络

让Discuz阅读权限大于0的帖子也能用DIY调用到

2014-10-23 15:28 栏目:技术教程 查看(15,478)

使用过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′

即可

 

转载请注明出处:让Discuz阅读权限大于0的帖子也能用DIY调用到 - 微构网络
分享:

您可能遇到的问题?

搜索微构网络的干货:

值班:15574303608 业务:在线咨询 技术:在线咨询

电话:0731-83862683 售后:在线咨询 邮箱:server@csweigou.com

地址:长沙市五一西路锦绣中环1116(五一广场平和堂对面)