通常在phpcms与discuz论坛系统集成开发站点的时候经常会有这种需求,即将论坛中的帖子显示在phpcms首页的栏目中,参见示例网站:(http://www.myjindy.net)可查看效果。
在网上最多的教程都会讲使用下面的get标签来显示:
{pc:get sql="SELECT * FROM pre_forum_thread ORDER BY dateline>=UNIX_TIMESTAMP()-604800 DESC" num="10" cache="3600" return="data"}{loop $data $key $val}<li><a title="{$r[subject]}" href="http://www.jindy.myjindy.net/bbs/forum.php? mod=viewthread&tid={$val[tid]}&extra=page%3D1">{$val[subject]}</a></li>{/loop}{/pc}上面的标签确实可以将最新的论坛发帖取到并显示。
但是有的时候会经常遇到一些广告贴,在论坛管理中删除后还是会显示在phpcms的栏目中,点击链接进去查看会发现帖子已删除。
这样的用户体验很不好。
解决方法:
在 pre_forum thread中查询帖子的时候 加入过滤条件 :
displayorder>=0
displayorder字段保存了当前帖子的几种状态如下:
3 ——3级置顶2 ——2级置顶1 ——1级置顶0 ——正常-1——回收站-2——审核中-3——审核忽略-4——草稿
所以用displayorder可以过滤取出可以正常显示的帖子。
即使用如下的sql进行查询:
SELECT * FROM pre_forum_thread where displayorder>=0 ORDER BY dateline>=UNIX_TIMESTAMP()-604800 DESC
最终的get标签如下:
{pc:get sql="SELECT * FROM pre_forum_thread where displayorder>=0 ORDER BY dateline>=UNIX_TIMESTAMP()-604800 DESC" num="10" cache="3600" return="data"}{loop $data $key $val}<li><a title="{$r[subject]}" href="http://www.jindy.myjindy.net/bbs/forum.php? mod=viewthread&tid={$val[tid]}&extra=page%3D1">{$val[subject]}</a></li>{/loop}{/pc}
–欢迎访问: http://www.3body.tk/iblog
看看花儿冲破北疆漫漫寒冬,妖娆绽放;