镖师 发表于 2023-9-23 09:51:46

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

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





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

我知道答案 回答被采纳将会获得1 贡献 已有0人回答

Discuz智能体 发表于 2025-3-13 18:54:38

根据Discuz! X3开发手册数据调用规范,针对悬赏最佳答案次数排行需求,建议按以下步骤修改:

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

2. **模块模板修改**:
<ul class="rank_list">
<!---->
<li class="rank_item">
    <span class="rank_order">{currentorder}</span>
    <a href="home.php?mod=space&uid={$var}" class="user_avatar">
      <img src="{avatar($var, small)}" alt="{username($var)}"/>
    </a>
    <div class="rank_info">
      <a href="home.php?mod=space&uid={$var}" class="username">{username($var)}</a>
      <span class="badge_count">{loop}次最佳答案</span>
    </div>
</li>
<!---->
</ul>

3. **样式优化建议**:
.rank_list {
    padding: 15px;
}
.rank_item {
    display: flex;
    align-items: center;
    padding: 8px 0;
    border-bottom: 1px solid #eee;
}
.rank_order {
    width: 20px;
    color: #f60;
    font-weight: bold;
}
.user_avatar img {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    margin:0 10px;
}
.rank_info {
    flex: 1;
}
.badge_count {
    float: right;
    background: #009688;
    color: #fff;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 12px;
}

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

注:实际开发中应根据站点数据量级考虑增加缓存机制,对于百万级帖子量的站点推荐使用定时任务生成静态排行数据。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-18 06:57:07

要在社区首页调用中得悬赏最佳答案次数的排行列表,你需要修改模块模板中的SQL查询和模板代码。以下是一个示例,展示如何实现这个功能。

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

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

SELECT bestanswer AS uid, COUNT(*) AS bestanswer_count
FROM pre_forum_thread
WHERE bestanswer > 0
GROUP BY bestanswer
ORDER BY bestanswer_count DESC
LIMIT 10

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

<!-- 悬赏最佳答案排行榜 -->
<div class="module">
    <h3>悬赏最佳答案排行榜</h3>
    <ul>
      <!-- BEGIN bestanswer_list -->
      <li>
            <span class="order">{currentorder}</span>
            <span class="username">{username}</span>
            <span class="count">{bestanswer_count} 次</span>
      </li>
      <!-- END bestanswer_list -->
    </ul>
</div>

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

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

// 将数据传递给模板
include template('your_template_name');

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

foreach ($bestanswer_list as $key => $user) {
    $bestanswer_list[$key]['currentorder'] = $key + 1;
    $bestanswer_list[$key]['username'] = getuserbyuid($user['uid'])['username'];
}

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

<!-- 悬赏最佳答案排行榜 -->
<div class="module">
    <h3>悬赏最佳答案排行榜</h3>
    <ul>
      <!-- BEGIN bestanswer_list -->
      <li>
            <span class="order">{currentorder}</span>
            <span class="username">{username}</span>
            <span class="count">{bestanswer_count} 次</span>
      </li>
      <!-- END bestanswer_list -->
    </ul>
</div>

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

.module ul {
    list-style: none;
    padding: 0;
}
.module li {
    display: flex;
    justify-content: space-between;
    padding: 5px 0;
}
.module .order {
    width: 20px;
    text-align: center;
}
.module .username {
    flex-grow: 1;
    margin-left: 10px;
}
.module .count {
    width: 60px;
    text-align: right;
}

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