dede联动标签如何正确调用?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文

联动类别是 DedeCMS 中一个非常实用的功能,常用于实现地区选择、职位选择、品牌筛选等具有层级关系的数据调用,它通过一个“频道模型”来组织数据,前端通过 JavaScript 实现联动效果。

dede联动标签调用
(图片来源网络,侵删)

联动标签的基本结构

联动标签的基本结构是 {dede:infoguide},它本身是一个单标签,需要配合其他属性来使用。

基本语法:

{dede:infoguide typeid='0' channelid='1' style='select'}

核心属性详解

理解每个属性的含义是灵活调用联动标签的关键。

属性名 含义 可选值 说明
typeid 指定要调用的联动类别ID 数字 这是最核心的属性,如果你想在首页调用“地区”联动,而“地区”联动模型的ID是 5,那么这里就填 5,如果不填,默认为 0,会调用系统默认的第一个联动类别。
channelid 指定联动类别所在的频道模型ID 数字 联动类别是依附于频道模型的,你需要知道你的联动类别是在哪个模型下创建的,如果你在“文章模型”下创建了“地区”联动,而“文章模型”的ID是 1,那么这里就填 1,如果不确定,可以不填,系统会自动查找。
style 指定显示的样式 select, text, hidden - select: 以下拉选择框的形式显示(最常用)。
- text: 以文本输入框的形式显示,通常配合一个触发按钮使用。
- hidden: 以隐藏域的形式显示,通常用于后台提交表单时使用。
fieldname 为表单元素指定一个名称 字符串 当你在表单中使用联动标签时,这个属性是必需的,用于后台接收数据。name="province",如果不指定,默认为 infoguide
autooption 是否显示“请选择”等提示选项 yes, no - yes: 在下拉框的顶部添加一个默认选项,如“请选择”、“不限”等。
- no: 不添加默认选项。
limit 限制输出的选项数量 数字 limit='10',只显示前10个选项。
changefn 指定选项改变时执行的JavaScript函数 函数名 当联动层级发生变化时(如选择了“省份”),可以调用一个自定义的JS函数来执行后续操作,比如加载城市列表,这个是实现级联效果的关键。

实战调用示例

假设我们要做一个常见的“省-市-区”三级联动选择。

dede联动标签调用
(图片来源网络,侵删)

第1步:后台准备

  1. 创建联动类别

    • 进入 DedeCMS 后台 -> 核心 -> 频道模型 -> 联动类别 -> 增加联动类别
    • 类别名称:填写 地区
    • 类别表单:选择 select
    • :这是关键!你需要按照 DedeCMS 规定的格式填写,格式为:父ID,名称;-1 代表顶级。
      • 顶级(省):-1,省份;
      • 二级(市):0,北京市;0,上海市;0,广东省; (这里的 0 表示它们是顶级“省份”下的子项)
      • 三级(区):1,海淀区;1,朝阳区; (这里的 1 是“北京市”的ID,你需要根据实际ID填写)
    • 保存,记下这个联动类别的 ID(假设为 5)。
  2. 创建表单模板

    • 进入后台 -> 模板 -> 自定义宏标记 -> 增加一个自定义宏
    • 宏名称:填写 my_area(方便调用)。
    • 类型:选择 标记调用
    • :这里填写完整的联动标签代码。
    • 保存

第2步:前台模板调用

现在我们可以在任何模板文件(如 index.htm, article_add.htm 等)中调用这个宏标记。

示例1:调用一个简单的省市级联联动

dede联动标签调用
(图片来源网络,侵删)

假设我们只需要“省份”和“城市”两级联动。

<!-- 省份选择框 -->
{dede:infoguide typeid='5' style='select' autooption='yes' fieldname='province' changefn='loadCity(this.value)'}

代码解析:

  • typeid='5':调用我们刚才创建的ID为 5 的“地区”联动。
  • style='select':以下拉框显示。
  • autooption='yes':顶部显示“请选择”。
  • fieldname='province':表单元素名为 province,方便PHP接收 $_POST['province']
  • changefn='loadCity(this.value)':当省份选择改变时,执行 loadCity 函数,并把当前选中的省份ID作为参数传入。

示例2:完整的省-市-区三级联动

这需要结合 JavaScript 来实现,在模板文件中,你需要把HTML和JS代码放在一起。

<!-- 在模板文件中,index.htm 的 <body> 标签内 -->
<h3>请选择您的地区:</h3>
<!-- 省份选择 -->
<p>
    <label>省份:</label>
    {dede:infoguide typeid='5' style='select' autooption='yes' fieldname='province' changefn='loadCity(this.value)'}
</p>
<!-- 城市选择 (初始为空,由JS动态填充) -->
<p>
    <label>城市:</label>
    <select name='city' id='city'>
        <option value='0'>请选择</option>
    </select>
</p>
<!-- 区县选择 (初始为空,由JS动态填充) -->
<p>
    <label>区县:</label>
    <select name='area' id='area'>
        <option value='0'>请选择</option>
    </select>
</p>
<!-- 将以下JS代码放在模板文件的底部,或引入外部JS文件 -->
<script type="text/javascript">
    // 加载城市列表
    function loadCity(provinceId) {
        // 清空城市和区县的下拉框
        document.getElementById('city').length = 1;
        document.getElementById('area').length = 1;
        // 如果省份ID有效,则加载对应的城市
        if (provinceId > 0) {
            // 使用DedeCMS自带的JS函数,参数为联动ID和父ID
            // 第一个参数是联动类别的ID (5)
            // 第二个参数是选中的省份ID
            GetSonSelectOption(5, provinceId, 'city');
        }
    }
    // 当城市选择改变时,加载区县列表
    // 注意:这里需要给城市选择框绑定onchange事件
    // 我们可以通过在HTML中写JS来绑定,或者修改上面的JS
    // 为了简单,我们直接修改上面的JS函数,并在其中调用
    // GetSonSelectOption(5, cityId, 'area');
    // 修改后的loadCity函数示例:
    function loadCity(provinceId) {
        var citySelect = document.getElementById('city');
        var areaSelect = document.getElementById('area');
        // 清空
        citySelect.length = 1;
        areaSelect.length = 1;
        if (provinceId > 0) {
            // 加载城市
            GetSonSelectOption(5, provinceId, 'city');
            // 监听城市选择变化
            citySelect.onchange = function() {
                var cityId = this.value;
                if (cityId > 0) {
                    GetSonSelectOption(5, cityId, 'area');
                } else {
                    areaSelect.length = 1;
                }
            };
        }
    }
</script>

JS函数 GetSonSelectOption 说明: 这是 DedeCMS 内置的一个核心JS函数,用于获取联动类别的子级选项。

  • 参数1:联动类别的 ID (这里是 5)。
  • 参数2:父级项目的 ID (选中的省份的ID)。
  • 参数3:要填充的下拉框的 ID ('city''area')。

常见问题与注意事项

  1. typeid 和 channelid 混淆:这是最常见的错误。typeid 是联动类别本身的ID,channelid 是它所属的频道模型的ID,通常情况下,你只需要正确设置 typeid 即可。
  2. 联动类别内容格式错误:后台填写联动类别内容时,务必严格按照 父ID,名称; 的格式,并且ID必须是数字,ID之间用英文逗号分隔,每组之间用英文分号结尾。
  3. JS 函数未定义:如果使用了 changefn,请确保对应的JS函数(如 loadCity)在页面中已经定义,并且函数名拼写正确。
  4. 数据提交问题:在表单中使用联动标签时,确保 fieldname 的值与后台处理程序中接收的变量名一致($_POST['province'])。
  5. 性能考虑:联动标签通常通过AJAX或JS动态加载数据,对服务器性能有一定影响,对于数据量非常大的联动(如全球国家城市),可以考虑优化数据结构或使用静态JSON数据。

通过以上步骤和示例,你应该能够熟练地在 DedeCMS 中调用和使用联动标签了。

-- 展开阅读全文 --
头像
dede当前位置样式如何修改?
« 上一篇 今天
dede轮播调用简单,具体怎么实现?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]