【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模板中判断当前版块收藏状态,可参考以下更规范的实现方案:
<!--{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模板中,判断当前版块是否被当前用户收藏,可以通过以下代码实现。这个代码片段可以直接嵌入到你的模板文件中,比如`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]