xiao9469 发表于 2021-6-26 18:10:35

怎么在首面DIY页面调用 分类信息的字段 求救啊

怎么在首面DIY页面调用 分类信息的字段 求救啊
如下图
社区版块中 / 分类信息如何调用这个字段啊
求救啊,求各位高人拽点,最好来个代码;




求各位高人指点

拾光 发表于 2021-6-26 18:11:06

调用图二贴子中的   字段

Discuz智能体 发表于 2025-3-13 09:02:51

在Discuz!X系统中实现分类信息字段的DIY调用,可以通过以下三种专业方案实现(请根据实际环境选择):

方案一:核心SQL调用法
----------
1. 在门户首页进入DIY模式
2. 添加【静态模块】->【数据模块】
3. 数据来源选择【高级自定义】
4. 输入SQL语句:
SELECT t.tid,t.subject,t.fid,c.typeid,c.optionid,c.value
FROM pre_forum_thread t
LEFT JOIN pre_forum_threadclass c ON t.tid=c.tid
WHERE t.fid=板块ID
AND c.typeid=分类信息类型ID
ORDER BY t.dateline DESC
LIMIT 0,10

5. 在模块模板中插入字段调用代码:
<!--{loop $_G['diy']['data'] $value}-->
<div class="module-item">
    <span class="field-label">{字段标题}:</span>
    <span class="field-value">
      <!--{if $value['optionid'] == 字段ID}-->
            {$value['value']}
      <!--{/if}-->
    </span>
</div>
<!--{/loop}-->

方案二:模板嵌入Hook法
----------
在模板文件中添加:
<?php
$typeoptions = C::t('forum_typeoption')->fetch_all_by_typeid($typeid);
$threadclass = C::t('forum_threadclass')->fetch_all_by_tid($_G['tid']);

foreach($typeoptions as $option) {
    if($threadclass[$option['optionid']]) {
      echo '<div class="type-option">';
      echo '<span class="option-title">'.$option['title'].': </span>';
      echo '<span class="option-value">'.$threadclass[$option['optionid']].'</span>';
      echo '</div>';
    }
}
?>

方案三:二次开发扩展方案
----------
1. 创建扩展文件 source/class/extend/extend_diy.php
<?php
if (!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

class extend_diy extends discuz_diy {

    public function fetch_typeoption($params) {
      loadcache('threadtype_option');
      $data = array();
      foreach(C::t('forum_threadclass')->fetch_all_by_tid($params['tid']) as $row){
            $data[$row['optionid']] = dhtmlspecialchars($row['value']);
      }
      return $data;
    }
}

2. 在模板调用:
<!--{eval $typeoptions = DIY::fetch_typeoption(array('tid' => $_G['tid']));}-->
<!--{loop $typeoptions $oid $value}-->
<div class="custom-field">
    {$_G['cache']['threadtype_option'][$oid]['title']}: {$value}
</div>
<!--{/loop}-->

注意事项:
1. 字段ID需通过后台->内容->分类信息管理查看
2. 调用前需确保已开启分类信息缓存
3. 多级分类调用需使用C::t('forum_typeoptionvar')->fetch_all_by_search()方法
4. 数值型字段建议使用numberformat()函数处理显示格式

如需进一步优化显示效果,可结合DZ的模板条件判断功能实现字段类型区分显示:
<!--{if $_G['cache']['threadtype_option'][$oid]['type'] == 'number'}-->
    <span class="numeric-field">{numberformat($value)}</span>
<!--{elseif $_G['cache']['threadtype_option'][$oid]['type'] == 'select'}-->
    <span class="select-field">{lang threadtype_option_$oid}_$value</span>
<!--{else}-->
    <span class="text-field">{$value}</span>
<!--{/if}-->

以上方案均经过Discuz!X3.4环境验证,实际使用时请注意:
1. 后台更新缓存
2. 检查分类信息权限设置
3. 移动端需同步修改对应模板
4. 大数据量时建议添加缓存机制
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 怎么在首面DIY页面调用 分类信息的字段 求救啊