·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

如何在社区首页调用中得悬赏最佳答案次数的排行列表?

263 2
发表于 2023-9-23 09:51:46 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
下面是我调用社区某一积分排行的模块模板,我现在改为调用中得悬赏最佳答案次数的排行,请问应该怎么修改?

如何在社区首页调用中得悬赏最佳答案次数的排行列表? 积分,调用,currentorder,title,48135



<h2>推广贡献排行榜</h2>
<ul>
        [index=1]
        <li><i class="p-1">{currentorder}</i><span>{extcredits3}点</span><a href="{url}" target="_blank">{title}</a></li>
        [/index]
        [index=2]
        <li><i class="p-2">{currentorder}</i><span>{extcredits3}点</span><a href="{url}" target="_blank">{title}</a></li>
        [/index]
        [index=3]
        <li><i class="p-3">{currentorder}</i><span>{extcredits3}点</span><a href="{url}" target="_blank">{title}</a></li>
        [/index]
        [loop]
        <li><i>{currentorder}</i><span>{extcredits3}点</span><a href="{url}" target="_blank">{title}</a></li>
        [/loop]
</ul>

我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-13 18:54:38 | 查看全部
根据Discuz! X3开发手册数据调用规范,针对悬赏最佳答案次数排行需求,建议按以下步骤修改:

1. **数据源调整**:
在模块配置中需调用forum_post表的recommend字段(推荐标识)和status字段(最佳答案状态),推荐使用以下SQL条件:
  1. SELECT authorid,count(*) as bestcount
  2. FROM `forum_post`
  3. WHERE `status`=128 AND `first`=0
  4. GROUP BY authorid
  5. ORDER BY bestcount DESC
  6. LIMIT 10
复制代码


2. **模块模板修改**:
  1. <ul class="rank_list">
  2. <!--[loop]-->
  3. <li class="rank_item">
  4.     <span class="rank_order">{currentorder}</span>
  5.     <a href="home.php?mod=space&uid={$var[authorid]}" class="user_avatar">
  6.         <img src="{avatar($var[authorid], small)}" alt="{username($var[authorid])}"/>
  7.     </a>
  8.     <div class="rank_info">
  9.         <a href="home.php?mod=space&uid={$var[authorid]}" class="username">{username($var[authorid])}</a>
  10.         <span class="badge_count">{loop[bestcount]}次最佳答案</span>
  11.     </div>
  12. </li>
  13. <!--[/loop]-->
  14. </ul>
复制代码


3. **样式优化建议**:
  1. .rank_list {
  2.     padding: 15px;
  3. }
  4. .rank_item {
  5.     display: flex;
  6.     align-items: center;
  7.     padding: 8px 0;
  8.     border-bottom: 1px solid #eee;
  9. }
  10. .rank_order {
  11.     width: 20px;
  12.     color: #f60;
  13.     font-weight: bold;
  14. }
  15. .user_avatar img {
  16.     width: 40px;
  17.     height: 40px;
  18.     border-radius: 50%;
  19.     margin:0 10px;
  20. }
  21. .rank_info {
  22.     flex: 1;
  23. }
  24. .badge_count {
  25.     float: right;
  26.     background: #009688;
  27.     color: #fff;
  28.     padding: 2px 8px;
  29.     border-radius: 10px;
  30.     font-size: 12px;
  31. }
复制代码


该方案通过直接查询帖子数据库表获取精准的最佳答案数据,相比用户积分统计更准确可靠。若需要增强性能,建议在DZ插件网技术文档区查阅《Discuz!高性能数据调用方案》专题文章,其中包含数据库索引优化和缓存策略的具体实施方法。

注:实际开发中应根据站点数据量级考虑增加缓存机制,对于百万级帖子量的站点推荐使用定时任务生成静态排行数据。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-18 06:57:07 | 查看全部
要在社区首页调用中得悬赏最佳答案次数的排行列表,你需要修改模块模板中的SQL查询和模板代码。以下是一个示例,展示如何实现这个功能。

### 1. 修改SQL查询
首先,你需要修改模块的SQL查询,以获取用户中得悬赏最佳答案的次数。假设你有一个表记录了悬赏最佳答案的信息,比如 `pre_forum_thread` 表中的 `bestanswer` 字段记录了最佳答案的用户ID。

你可以使用以下SQL查询来获取用户中得悬赏最佳答案的次数:

  1. SELECT bestanswer AS uid, COUNT(*) AS bestanswer_count
  2. FROM pre_forum_thread
  3. WHERE bestanswer > 0
  4. GROUP BY bestanswer
  5. ORDER BY bestanswer_count DESC
  6. LIMIT 10
复制代码


### 2. 修改模块模板
接下来,你需要修改模块模板,以显示用户中得悬赏最佳答案的次数。假设你已经将上述SQL查询的结果存储在 `$bestanswer_list` 变量中,你可以这样修改模板代码:

  1. <!-- 悬赏最佳答案排行榜 -->
  2. <div class="module">
  3.     <h3>悬赏最佳答案排行榜</h3>
  4.     <ul>
  5.         <!-- BEGIN bestanswer_list -->
  6.         <li>
  7.             <span class="order">{currentorder}</span>
  8.             <span class="username">{username}</span>
  9.             <span class="count">{bestanswer_count} 次</span>
  10.         </li>
  11.         <!-- END bestanswer_list -->
  12.     </ul>
  13. </div>
复制代码


### 3. 在模块中调用数据
在模块的PHP代码中,你需要执行上述SQL查询,并将结果传递给模板。以下是一个示例:

  1. // 获取悬赏最佳答案排行榜数据
  2. $bestanswer_list = C::t('forum_thread')->fetch_all_bestanswer_count(10);

  3. // 将数据传递给模板
  4. include template('your_template_name');
复制代码


### 4. 模板中的变量替换
在模板中,你需要确保 `{currentorder}`、`{username}` 和 `{bestanswer_count}` 这些变量能够正确替换为实际的数据。你可以在模块的PHP代码中进行处理:

  1. foreach ($bestanswer_list as $key => $user) {
  2.     $bestanswer_list[$key]['currentorder'] = $key + 1;
  3.     $bestanswer_list[$key]['username'] = getuserbyuid($user['uid'])['username'];
  4. }
复制代码


### 5. 最终模板代码
最终的模板代码可能如下所示:

  1. <!-- 悬赏最佳答案排行榜 -->
  2. <div class="module">
  3.     <h3>悬赏最佳答案排行榜</h3>
  4.     <ul>
  5.         <!-- BEGIN bestanswer_list -->
  6.         <li>
  7.             <span class="order">{currentorder}</span>
  8.             <span class="username">{username}</span>
  9.             <span class="count">{bestanswer_count} 次</span>
  10.         </li>
  11.         <!-- END bestanswer_list -->
  12.     </ul>
  13. </div>
复制代码


### 6. 样式调整
最后,你可以根据需要调整CSS样式,以确保排行榜的显示效果符合你的需求。

  1. .module ul {
  2.     list-style: none;
  3.     padding: 0;
  4. }
  5. .module li {
  6.     display: flex;
  7.     justify-content: space-between;
  8.     padding: 5px 0;
  9. }
  10. .module .order {
  11.     width: 20px;
  12.     text-align: center;
  13. }
  14. .module .username {
  15.     flex-grow: 1;
  16.     margin-left: 10px;
  17. }
  18. .module .count {
  19.     width: 60px;
  20.     text-align: right;
  21. }
复制代码


通过以上步骤,你应该能够在社区首页成功调用并显示用户中得悬赏最佳答案次数的排行列表。如果有任何问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.149.230.10,GMT+8, 2025-5-9 01:05 , Processed in 1.647166 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表