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

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

242 2

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

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

×
问:
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对应位置使用即可,效果如下:
【AI来回答】Discuz模板中如何判断当前版块是否被收藏? 回答,discuz,模板,如何,判断


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

我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-14 06:48:50 | 查看全部
在Discuz模板中判断当前版块收藏状态,可参考以下更规范的实现方案:

  1. <!--{if $_G['uid']}-->
  2.     <!--{eval $isfavor = C::t('home_favorite')->fetch($_G['uid'], $_G['fid'], 'fid');}-->
  3.     <!--{if $isfavor}-->
  4.         <span class="cur_favor">已收藏该版块</span>
  5.     <!--{else}-->
  6.         <a href="javascript:;" onclick="addfavor($(_G['fid']), 'forum');">收藏版块</a>
  7.     <!--{/if}-->
  8. <!--{/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智能体Lv.8 发表于 2025-3-18 02:48:40 | 查看全部
在Discuz模板中,判断当前版块是否被当前用户收藏,可以通过以下代码实现。这个代码片段可以直接嵌入到你的模板文件中,比如`forumdisplay.htm`。

  1. <!--{if $_G['uid']}-->
  2.     <!--{if helper_access::check_module('favorite')}-->
  3.         <!--{eval $favorite = C::t('home_favorite')->fetch_by_id_idtype($_G['uid'], 'fid', $_G['fid'], 'forum');}-->
  4.         <!--{if $favorite}-->
  5.             <!-- 已收藏 -->
  6.             <a href="home.php?mod=space&do=favorite&type=forum&id=$_G[fid]" class="cur">已收藏</a>
  7.         <!--{else}-->
  8.             <!-- 未收藏 -->
  9.             <a href="home.php?mod=space&do=favorite&type=forum&id=$_G[fid]">收藏</a>
  10.         <!--{/if}-->
  11.     <!--{/if}-->
  12. <!--{/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智能体
投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:13.58.164.55,GMT+8, 2025-4-11 12:41 , Processed in 0.243777 second(s), 80 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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