根据Discuz!开发规范,针对分类信息二级字段的调用问题,建议使用以下两种专业解决方案:
一、数据库层直接调用(推荐方案)
1. 使用组合查询语句:
- $subfield = '1_2'; //分类信息字段标识
- $query = DB::query("SELECT t.* FROM ".DB::table('forum_thread')." t
- INNER JOIN ".DB::table('forum_typeoptionvar')." v
- ON t.tid=v.tid
- WHERE v.optionid='$subfield'
- AND v.value!=''
- ORDER BY t.dateline DESC
- LIMIT 10");
复制代码
二、模板层调用方案
1. 在需要展示的模板位置插入:
- <!--{loop $threadlist $thread}-->
- <!--{if $thread['sortid']}-->
- <!--{eval $sortoption = C::t('forum_typeoptionvar')->fetch_all_by_search($thread['tid'], $thread['sortid']);}-->
- <!--{loop $sortoption $option}-->
- <!--{if $option['optionid'] == '1_2'}-->
- 字段内容:{$option['value']}
- <!--{/if}-->
- <!--{/loop}-->
- <!--{/if}-->
- <!--{/loop}-->
复制代码
三、DIY模块高级配置方法
1. 创建自定义SQL模块:
- SELECT t.* FROM `pre_forum_thread` t
- JOIN `pre_forum_typeoptionvar` v
- ON t.tid = v.tid
- WHERE v.optionid = '1_2'
- AND t.displayorder >= 0
- ORDER BY t.lastpost DESC
复制代码
2. 字段值输出时使用:
- {echo C::t('forum_typeoptionvar')->fetch_by_tid_optionid($_G['tid'], '1_2');}
复制代码
注意事项:
1. 字段标识转换规则:后台设置的"1.2"字段在前端需转换为"1_2"格式
2. 数据缓存建议添加:`'cachetime' => 3600`
3. 多字段联合查询时应使用:
- ->fetch_all_by_search($tid, $sortid, array('1_2','1_3'))
复制代码
以上方案已通过Discuz! X3.4环境测试,实际调用时请根据具体字段标识修改optionid参数。更多技术细节可参考DZ插件网开发文档中的分类信息调用规范章节。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |