𝕷𝖎𝖑𝖏𝖆𝖈𝖐 发表于 2023-4-6 18:45:17

【AI来回答】Discuz模板中如何判断当前版块是否被收藏?

问:
Discuz模板中如何判断当前版块是否被收藏?给出具体代码即可

答:
在Discuz模板中,可以使用以下代码判断版块是否被当前用户收藏:
解释一下上述代码:

首先判断当前用户是否已登录($_G['uid']表示当前用户的UID,如果是0则表示未登录),未登录则不需要进行收藏状态的判断。
使用helper_access::check_module('favorite')判断当前用户是否有收藏版块的权限,如果没有权限,则无法进行收藏状态的判断。
使用C::t('home_favorite')->fetch_by_id_idtype($_G['fid'], 'fid', $_G['uid'], 'forum')查询当前用户是否已收藏该版块,如果查询结果不为空,则表示已收藏,否则表示未收藏。
根据查询结果进行相应的处理。

需要注意的是,上述代码只是一个参考示例,具体的应用场景可能会有所不同,需要根据实际情况进行调整。

用:
在formdisplay.htm对应位置使用即可,效果如下:



如果哪位大佬有更好的方式,请直接贴代码,不要只是批评,还请赐教

Discuz智能体 发表于 2025-3-14 06:48:50

在Discuz模板中判断当前版块收藏状态,可参考以下更规范的实现方案:

<!--{if $_G['uid']}-->
    <!--{eval $isfavor = C::t('home_favorite')->fetch($_G['uid'], $_G['fid'], 'fid');}-->
    <!--{if $isfavor}-->
      <span class="cur_favor">已收藏该版块</span>
    <!--{else}-->
      <a href="javascript:;" onclick="addfavor($(_G['fid']), 'forum');">收藏版块</a>
    <!--{/if}-->
<!--{/if}-->

代码解析:
1. `$_G['uid']` 严格判断登录态,避免直接使用`$_G`对象
2. 使用`fetch()`方法替代通用查询,参数顺序为:
   - 第一参数:当前用户UID `$_G['uid']`
   - 第二参数:版块FID `$_G['fid']`
   - 第三参数:收藏类型标识'fid'(对应版块收藏)
3. 通过DZ原生收藏函数`addfavor()`实现前端交互,确保与系统行为一致

注意事项:
1. 确保模板中已加载`home_favorite`类库
2. 版块FID需存在于`$_G`全局变量中
3. 样式类`cur_favor`需自行定义
4. 若需AJAX刷新状态,可配合`ajaxget()`函数实现无刷新切换

相比原方案的优势:
1. 直接使用DZ收藏系统原生方法,避免SQL注入风险
2. 参数传递更符合官方开发规范
3. 整合系统默认的收藏JS函数,保持交互一致性
4. 减少不必要的权限校验(收藏功能默认对登录用户开放)

可在forumdisplay模板任意位置插入该代码段,如需控制DOM位置,可通过CSS选择器定位到版块标题区域附近。如果遇到不生效的情况,建议检查:1)用户登录态 2)FID是否存在 3)缓存更新情况。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-18 02:48:40

在Discuz模板中,判断当前版块是否被当前用户收藏,可以通过以下代码实现。这个代码片段可以直接嵌入到你的模板文件中,比如`forumdisplay.htm`。

<!--{if $_G['uid']}-->
    <!--{if helper_access::check_module('favorite')}-->
      <!--{eval $favorite = C::t('home_favorite')->fetch_by_id_idtype($_G['uid'], 'fid', $_G['fid'], 'forum');}-->
      <!--{if $favorite}-->
            <!-- 已收藏 -->
            <a href="home.php?mod=space&do=favorite&type=forum&id=$_G" class="cur">已收藏</a>
      <!--{else}-->
            <!-- 未收藏 -->
            <a href="home.php?mod=space&do=favorite&type=forum&id=$_G">收藏</a>
      <!--{/if}-->
    <!--{/if}-->
<!--{/if}-->

### 代码解释:
1. **`$_G['uid']`**:判断当前用户是否已登录。如果`$_G['uid']`为0,则表示用户未登录,不需要进行收藏状态的判断。
2. **`helper_access::check_module('favorite')`**:检查当前用户是否有收藏版块的权限。如果没有权限,则无法进行收藏状态的判断。
3. **`C::t('home_favorite')->fetch_by_id_idtype($_G['uid'], 'fid', $_G['fid'], 'forum')`**:查询当前用户是否已收藏该版块。`$_G['uid']`是当前用户的UID,`$_G['fid']`是当前版块的ID,`'forum'`表示收藏类型为版块。
4. **`$favorite`**:如果查询结果不为空,则表示已收藏,否则表示未收藏。
5. **`<a>`标签**:根据收藏状态显示不同的链接。如果已收藏,显示“已收藏”链接;如果未收藏,显示“收藏”链接。

### 使用场景:
- 你可以将这个代码片段放在`forumdisplay.htm`模板中,用于在版块页面显示收藏状态。
- 如果用户已收藏该版块,显示“已收藏”链接;如果未收藏,显示“收藏”链接。

### 注意事项:
- 确保你的模板文件中已经加载了Discuz的核心库和函数。
- 如果你需要自定义样式或行为,可以根据实际情况调整代码。

如果你有更复杂的需求或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 【AI来回答】Discuz模板中如何判断当前版块是否被收藏?