要在门户调用社区帖子列表时实现最新发帖和最新回复都进行排序,你可以通过修改模板和调用数据的方式来实现。以下是具体的步骤:
1. 修改数据调用
首先,你需要确保在调用帖子列表时,同时获取最新发帖和最新回复的时间戳,并根据这两个时间戳进行排序。
在Discuz中,你可以通过forum_thread表来获取帖子的信息。forum_thread表中包含了dateline(发帖时间)和lastpost(最后回复时间)两个字段。你可以通过SQL查询来获取这些数据,并根据lastpost和dateline进行排序。
2. 编写SQL查询
你可以编写一个SQL查询,根据lastpost和dateline进行排序。例如:
- SELECT * FROM `forum_thread`
- ORDER BY GREATEST(`dateline`, `lastpost`) DESC
复制代码
这个查询会返回一个帖子列表,其中最新发帖和最新回复的帖子都会根据时间进行排序。
3. 在模板中调用数据
接下来,你需要在门户的模板中调用这个数据。假设你使用的是portal_index模板,你可以在模板中添加以下代码:
- <!--{eval
- $threadlist = C::t('forum_thread')->fetch_all_by_fid($fid, 'dateline', 'DESC', 0, 10);
- usort($threadlist, function($a, $b) {
- return max($b['dateline'], $b['lastpost']) - max($a['dateline'], $a['lastpost']);
- });
- }-->
- <!--{loop $threadlist $thread}-->
- <li>
- <a href="forum.php?mod=viewthread&tid=$thread[tid]">$thread[subject]</a>
- <span>发帖时间: {echo date('Y-m-d H:i:s', $thread['dateline'])}</span>
- <span>最后回复: {echo date('Y-m-d H:i:s', $thread['lastpost'])}</span>
- </li>
- <!--{/loop}-->
复制代码
4. 解释代码
- fetch_all_by_fid($fid, 'dateline', 'DESC', 0, 10):这个函数调用会获取指定版块($fid)的最新帖子列表,按发帖时间降序排列。
- usort($threadlist, function($a, $b) {...}):这个函数会对帖子列表进行重新排序,排序的依据是dateline和lastpost的最大值。
- max($b['dateline'], $b['lastpost']) - max($a['dateline'], $a['lastpost']):这个表达式会确保帖子按照最新发帖和最新回复的时间进行排序。
5. 应用到门户
将上述代码应用到门户的模板中,确保在门户页面中显示的帖子列表能够按照最新发帖和最新回复进行排序。
6. 测试和调整
最后,测试你的修改,确保帖子列表的排序符合预期。如果有任何问题,可以根据实际情况调整SQL查询或模板代码。
通过以上步骤,你可以在门户调用社区帖子列表时,实现最新发帖和最新回复都进行排序的效果。如果你有更多问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |