织梦联动标签怎么调用?

99ANYc3cd6
预计阅读时长 24 分钟
位置: 首页 织梦建站 正文

联动类别是织梦一个非常实用的功能,常用于地区选择、品牌选择、职位分类等具有层级关系的字段,调用它主要分为两种情况:

织梦如何调用联动标签
(图片来源网络,侵删)
  1. 在后台表单中调用发布时让用户选择。
  2. 在前台页面中调用:用于展示已选择的联动类别信息,或者制作一个筛选表单。

下面我们分别对这两种情况进行详细说明。


发布表单中调用联动类别

这是联动类别最常见的用途,当你在后台添加或编辑文章时,让作者可以从一个下拉菜单中选择联动分类。

步骤 1:在后台创建联动类别

  1. 登录织梦后台,进入【核心】 -> 【联动类型管理】。
  2. 点击【增加联动类型】。
  3. 填写基本信息
    • 类型名称:给你的联动类别起个名字,"所在地区"。
    • 类型目录:英文名称或拼音,district,这个很重要,会在调用时用到。
    • 项目名称:默认项的名称,"请选择..."。
    • 是否开启:选择 "是"。
    • 父类选项:选择 "无"。
    • 是否启用多选:根据需要选择,通常地区选择是单选。
  4. 添加子项
    • 点击你刚创建的类型名称(如 "所在地区"),进入项目编辑页面。
    • 你可以像管理栏目一样,添加层级关系。
      • 一级:广东省
      • 二级:广州市, 深圳市, 东莞市...
      • 三级:天河区, 越秀区... (对应广州市)
  5. 保存所有设置。

步骤 2:在模型中添加联动类别字段

  1. 进入【核心】 -> 【内容模型管理】,选择你要修改的模型("文章模型"),点击【字段管理】。
  2. 点击【增加新字段】。
  3. 填写字段信息
    • 字段名称district (必须和你上面设置的“类型目录”完全一致)。
    • 字段提示文字:在后台表单中显示的提示文字,"请选择所在地区"。
    • 字段类型务必选择 "联动类型"
    • 联动类型:从下拉菜单中选择你刚刚创建的 "所在地区"。
    • 是否显示:选择 "是"。
    • 前台表单调用:选择 "是"。
    • 其他选项:根据需要设置,比如是否必填等。
  4. 保存字段。

步骤 3:在前台发布表单中调用

织梦默认会自动识别模型中的联动类型字段并生成表单,你无需手动写代码,只需要确保你使用的模板文件(通常是 article_add.htmarticle_edit.htm)包含了默认的表单标签 {dede:field name='body'/}{dede:field name='body2'/}

如果你想在自定义模板中手动调用它,可以使用以下标签:

织梦如何调用联动标签
(图片来源网络,侵删)
{dede:global.name='district'/}

district 就是你设置的“字段名称”/“类型目录”。

效果:当你发布文章时,就会看到一个可以逐级选择的联动下拉菜单。


在前台页面中调用联动类别

前台调用也分为两种:展示已保存的数据制作一个独立的筛选表单

展示文章中已保存的联动类别信息

假设你已经用上面的方法,发布了一篇文章,并且选择了 "广东省 > 广州市 > 天河区",现在想在文章详情页或列表页显示这个地区。

使用默认字段(推荐)

织梦会自动为联动类别生成一个默认的显示字段,字段名通常是 联动类型目录 + 'link'

你的联动类型目录是 district,那么显示字段就是 districtlink

在文章详情页模板 article_article.htm 中,你可以这样调用:

<p>发布地区:{dede:field name='districtlink'/}</p>

输出效果广东省 > 广州市 > 天河区

手动获取各级ID并显示(更灵活)

如果你想分别获取每一级的ID或名称,可以使用 GetInfos 函数。

假设你的联动类型目录是 district,并且你在模型中只保存了最终的ID(这是默认行为)。

在模板文件中,使用如下代码:

{dede:field name='district' function='GetInfos(@me, "district")'/}

代码解释

  • {dede:field name='district'}:获取当前文章中 district 字段的值(即最终选择的项的ID)。
  • function='GetInfos(@me, "district")':这是一个自定义函数。
    • @me:代表当前字段的值(那个ID)。
    • "district":代表你要查询的联动类型的“类型目录”。

这个函数会返回一个包含所有层级信息的数组,为了显示完整的路径,通常需要结合PHP代码片段来实现,一个更完整的写法如下(在织梦V5.7及更高版本中,推荐使用channelartlist标签或直接写PHP):

<?php
// 在模板中直接嵌入PHP代码
$field_value = $arcRow['district']; // 获取字段值
if($field_value > 0){
    $infos = GetInfos($field_value, 'district');
    $linktext = '';
    foreach($infos as $info){
        $linktext .= $info['typename'] . ' > ';
    }
    echo rtrim($linktext, ' > '); // 输出:广东省 > 广州市 > 天河区
}
?>

注意:直接在模板中写PHP需要确保你的服务器环境支持,并且模板文件有执行PHP的权限(通常后端设置中开启)。

制作一个独立的联动筛选表单

这个功能常用于搜索或筛选,按地区筛选文章”,这需要结合JS和Ajax来实现。

步骤 1:准备模板文件

在你的列表页模板(list_article.htm)中,添加以下HTML结构,我们以“所在地区”为例,类型目录为 district

<div class="filter-area">
    <form name="selectform" action="/plus/search.php" method="get">
        <span id="district_area">
            <!-- 第一级联动将通过JS动态加载 -->
            <select name="district" id="district" onchange="changeDistrict(this.value)">
                <option value='0'>请选择省份</option>
                {dede:channelartlist typeid='0'}
                    {dede:sql sql="SELECT * FROM `dede_sys_enum` where egroup='district' and evalue > 0 ORDER BY disorder ASC, evalue ASC"}
                        <option value='[field:evalue/]'>[field:typename/]</option>
                    {/dede:sql}
                {/dede:channelartlist}
            </select>
        </span>
        <!-- 第二级联动将在这里动态插入 -->
        <span id="district_son"></span>
        <!-- 第三级联动将在这里动态插入 -->
        <span id="district_grandson"></span>
        <button type="submit">筛选</button>
    </form>
</div>

步骤 2:编写JavaScript和Ajax

在模板文件的 <head> 标签内或底部,加入以下JS代码,这些代码负责当用户选择上一级时,通过Ajax请求下一级的数据并填充到下拉框中。

<script language="javascript" type="text/javascript">
    // Ajax请求联动子类的函数
    function changeDistrict(id) {
        // 清空下级联动菜单
        document.getElementById('district_son').innerHTML = '';
        document.getElementById('district_grandson').innerHTML = '';
        if (id == 0) return;
        // 创建Ajax对象
        var ajax = null;
        if (window.XMLHttpRequest) {
            ajax = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (ajax) {
            // 发送请求到plus目录下的一个专门处理联动的文件
            ajax.open("GET", "/plus/diy.php?action=list&diyid=你的联动类型ID&pid=" + id, true);
            ajax.onreadystatechange = function() {
                if (ajax.readyState == 4 && ajax.status == 200) {
                    // 将返回的HTML插入到span标签中
                    document.getElementById('district_son').innerHTML = ajax.responseText;
                }
            };
            ajax.send(null);
        }
    }
    // 同上,用于第三级联动
    function changeDistrictSon(id) {
        document.getElementById('district_grandson').innerHTML = '';
        if (id == 0) return;
        var ajax = null;
        // ... (同上创建Ajax对象的代码) ...
        if (ajax) {
            ajax.open("GET", "/plus/diy.php?action=list&diyid=你的联动类型ID&pid=" + id, true);
            ajax.onreadystatechange = function() {
                if (ajax.readyState == 4 && ajax.status == 200) {
                    document.getElementById('district_grandson').innerHTML = ajax.responseText;
                }
            };
            ajax.send(null);
        }
    }
</script>

重要提示:

  • diyid=你的联动类型ID:你需要去数据库 dede_sys_enum 表中找到你的联动类型(如 'district')对应的 id 值,替换掉代码中的 你的联动类型ID
  • 更简单的做法:织梦官方或很多模板已经封装好了联动调用的JS,你只需要在后台找到对应的JS文件(如 js/selectjs.js),并在模板中引入它,然后使用特定的类名或ID来绑定即可,这比手写Ajax要简单得多,请查阅你所使用的织梦版本的文档,寻找 "联动菜单JS调用" 的相关说明。

调用场景 关键点 核心代码/标签
后台表单 创建联动类型(记下类型目录)
在模型中添加“联动类型”字段(字段名=类型目录)
{dede:global.name='你的类型目录'/} (通常自动生成)
前台展示 使用默认的 link 后缀字段 {dede:field name='你的类型目录link'/}
前台展示 手动获取各级信息 {dede:field name='你的类型目录' function='GetInfos(@me, "你的类型目录")'/} 或结合PHP
前台筛选表单 准备HTML结构
编写JS/Ajax实现级联
HTML结构 + <script> 中的 changeDistrict() 函数

希望这份详细的指南能帮助你完全掌握织梦联动标签的调用方法!

-- 展开阅读全文 --
头像
织梦手机模板怎么设置?
« 上一篇 03-14
C语言基本数据类型有哪些?
下一篇 » 03-14

相关文章

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

目录[+]