帝国CMS后台栏目绑定信息(bdinfoid)怎么用

作者:凡帝网 分类:帝国CMS教程 发布时间:2026-07-27 浏览量:0

一、bdinfoid(绑定信息ID)是什么

bdinfoid = Bound Info ID(绑定信息ID),是帝国CMS enewsclass 栏目表中的一个字段。

一句话概括

它让一个栏目的访问行为从"展示信息列表"变成直接展示某一条指定的信息内容

打个比方:导航栏上有一个"公司简介"栏目,正常情况点进去是文章列表页,但如果你把某篇"公司简介"信息绑定到这个栏目上,用户点击后直接看到那篇文章的内容,不再经过列表页。

数据格式

栏目ID,信息ID

例如 bdinfoid = "5,123" 表示绑定栏目5下的第123号信息。


二、怎么用(操作步骤)

2.1 前提准备

先在"管理信息"中发布好一条要绑定的内容。

2.2 栏目设置

  1. 进入后台 → 栏目管理 → 修改栏目
  2. 找到 页面显示模式,选择 "栏目绑定信息"
  3. 在出现的输入框中填写 栏目ID,信息ID,例如 5,123
  4. 提交保存

2.3 验证

访问该栏目的前端页面,应该直接看到那条信息的内容,而不是列表页。

2.4 编辑绑定信息

后台栏目编辑页提供快捷入口,点击 [修改信息] 可直接在新窗口编辑被绑定的内容。


三、应用场景

场景 示例栏目 说明
单页类栏目 关于我们、联系方式、免责声明 只需展示固定内容,无需列表
活动落地页 某营销活动 独立栏目入口直达活动详情
产品直达 某产品名称 栏目名称即产品名,直接展示产品信息

核心价值:内容维护在信息管理模块,栏目只是一个"入口指针"。修改信息内容后,栏目自动同步,无需单独维护栏目页。


四、工作机制

4.1 核心:islist 字段

islist 是 enewsclass 表中控制栏目页面显示模式的字段。一共有四种模式:

模式 islist 值 数据来源 页面内容
封面式 0 封面模板 独立设计,不依赖信息
列表式 1 多条信息 分页列表、筛选、排序
页面内容式 2 栏目附加表 直接在栏目录入内容
栏目绑定信息 3 单条信息 复用已有信息,零维护

islist==3 就是栏目绑定信息模式,它是 bdinfoid 生效的前提——只有 islist 设为 3,系统才会去读 bdinfoid 的值。

4.2 工作流程简图

用户点击栏目
       │
       ▼
islist == 3?───否──→ islist 0/1/2 走各自分支
       │
       是
       │
       ▼
栏目的页面 = 绑定信息的内容
       │
       ▼
用户直接看到那条信息

五、核心代码流程

5.1 入库:非绑定模式清空 bdinfoid

e/class/classfun.php:只有 islist==3 才保存 bdinfoid,其他模式一律清空。

if ($add['islist'] == 3) {
    $add['bdinfoid'] = RepPostVar($add['bdinfoid']);
} else {
    $add['bdinfoid'] = '';
}

5.2 列表页拦截:禁止访问

e/action/ListInfo/index.php:终极栏目 + islist==3 → 直接拒绝访问列表页。

if ($class_r[$classid]['islast'] && $cr['bdinfoid']) {
    printerror("ErrorUrl", "history.go(-1)", 1);
}

5.3 栏目页生成:用绑定信息替代列表

e/class/functions.php:生成栏目页时检测到 bdinfoid,调用 ReClassBdInfo()

if (!empty($cr['bdinfoid'])) {
    ReClassBdInfo($classid);
    return '';
}

5.4 ReClassBdInfo:核心处理函数

function ReClassBdInfo($classid) {
    $cr = $empire->fetch1("select classid,bdinfoid 
                           from enewsclass where classid='$classid'");
    if (!$cr['classid'] || !$cr['bdinfoid']) return '';

    // 解析 bdinfoid → [0]=栏目ID, [1]=信息ID
    $infor = explode(',', $cr['bdinfoid']);
    $infofile = GetInfoFilename(intval($infor[0]), intval($infor[1]));

    if ($infofile && file_exists($infofile)) {
        // 优先使用已生成的信息静态文件
        $classtext = ReadFiletext($infofile);
    } else {
        // 没有静态文件 → meta refresh 跳转到动态地址
        $classtext = ReClassBdInfoDtHtml($infor[0], $infor[1]);
    }

    // 写回栏目的静态文件
    $classfile = eReturnTrueEcmsPath() . ReturnSaveClassPath($classid, 1);
    WriteFiletext_n($classfile, $classtext);
}

5.5 动态回退机制

当绑定信息未生成静态文件时,用 meta refresh 跳转到动态地址:

function ReClassBdInfoDtHtml($classid, $id) {
    $infourl = $public_r['newsurl'] . 'e/public/InfoUrl/?classid=' 
               . $classid . '&id=' . $id;
    return '<meta http-equiv="refresh" content="0;url=' . $infourl . '">';
}

5.6 完整数据流

用户访问栏目 URL
     │
     ▼
栏目静态文件已存在?──是──→ 展示(内容即绑定信息的内容)
     │
     否
     │
     ▼
读取 enewsclass.bdinfoid → 解析 "classid,infoid"
     │
     ▼
信息静态文件存在?──是──→ 读取文件 → 写入栏目静态文件 → 展示
     │
     否
     │
     ▼
生成 meta refresh → 跳转到 e/public/InfoUrl/?classid=X&id=Y
     │
     ▼
动态展示信息内容

六、注意事项

  1. 格式必须正确栏目ID,信息ID(英文逗号),缺少任一部分后台会弹窗报错
  2. 仅终极栏目生效islast=1 时 bdinfoid 才参与列表页拦截
  3. 信息不能删除:绑定的信息如果被删除,栏目页会跳转到空页面或报错
  4. 静态生成依赖:栏目静态页内容直接拷贝自信息静态页,需要先生成信息静态文件
  5. islist 不可随意切换:从"栏目绑定信息"切回其他模式,bdinfoid 会被自动清空
  6. 分类信息同样支持enewsfz_class 表也包含 bdinfoid 字段,逻辑与主栏目一致
下一篇:返回列表

微信扫码咨询

微信二维码