浅生 发表于 2024-5-14 15:41:10

获取版块分类信息某个字段下的内容 New

例如:后台分类信息字段

1=一级字段
1.2=二级字段

正常获取都是主分类信息全部获取。

我的要求:比如diy或者其他页 获取“1.2=二级字段”里的帖子。




如上图,在diy里怎么调用某个字段的内容。
我知道答案 回答被采纳将会获得1 贡献 已有0人回答

Discuz智能体 发表于 2025-3-13 01:35:19

根据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智能体 生成,内容仅供参考,请仔细甄别。

AI智能体 发表于 2025-3-17 04:06:31

要在Discuz的DIY页面或其他页面中调用某个特定分类信息字段的内容(例如“1.2=二级字段”),你可以通过以下步骤实现:

### 1. 获取分类信息字段的数据
首先,你需要确保你已经正确设置了分类信息字段,并且这些字段已经在帖子中填写了数据。

### 2. 使用SQL查询获取特定字段的内容
你可以通过SQL查询来获取特定字段的内容。假设你的分类信息字段`1.2`对应的数据库字段名是`field_1_2`,你可以使用以下SQL查询来获取该字段的内容:

SELECT t.tid, t.subject, t.fid, t.dateline, p.message, f.field_1_2
FROM pre_forum_thread t
JOIN pre_forum_post p ON t.tid = p.tid AND p.first = 1
JOIN pre_forum_threadclass f ON t.tid = f.tid
WHERE t.fid = {版块ID} AND f.field_1_2 IS NOT NULL
ORDER BY t.dateline DESC
LIMIT 10;

在这个查询中:
- `pre_forum_thread` 是帖子表。
- `pre_forum_post` 是帖子内容表。
- `pre_forum_threadclass` 是分类信息表。
- `field_1_2` 是你要获取的特定字段。

### 3. 在DIY页面中调用数据
在DIY页面中,你可以通过以下步骤调用数据:

#### 3.1 创建一个自定义模块
1. 进入DIY模式,点击“添加模块”。
2. 选择“数据调用”模块。
3. 在“数据来源”中选择“SQL查询”。

#### 3.2 输入SQL查询
将上面提到的SQL查询输入到“SQL查询”框中。确保替换`{版块ID}`为你要获取数据的版块ID。

#### 3.3 设置模板
在“模板”框中,你可以设置如何显示这些数据。例如:

<ul>
<!--{loop $data $row}-->
    <li>
      <a href="forum.php?mod=viewthread&tid={$row['tid']}">{$row['subject']}</a>
      <p>{$row['field_1_2']}</p>
    </li>
<!--{/loop}-->
</ul>

在这个模板中:
- `$row['subject']` 是帖子标题。
- `$row['field_1_2']` 是你要显示的特定字段内容。

#### 3.4 保存并应用
保存你的设置并应用模块到DIY页面中。

### 4. 测试和调整
保存后,刷新页面查看效果。如果数据显示不正确,可以返回DIY模式进行调整。

### 5. 其他注意事项
- 确保你的SQL查询和字段名称正确无误。
- 如果字段内容较多,可以考虑分页显示。
- 如果需要更复杂的逻辑,可以考虑编写自定义插件或扩展。

通过以上步骤,你应该能够在DIY页面中成功调用并显示特定分类信息字段的内容。如果你有更多问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 获取版块分类信息某个字段下的内容 New