dede联动类别如何正确调用?

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

联动类别是 DedeCMS 的一个非常实用的功能,常用于制作地区选择、品牌选择、学历、职位等具有层级关系的数据,它由“联动类别”和“联动类别项”组成。

dede联动类别的调用
(图片来源网络,侵删)

核心概念:

  1. 联动类别 (Channel): 相当于一个“数据集”或“表”,地区”、“品牌”,你需要先创建一个联动类别。
  2. 联动类别项 (Item): 相当于数据集中的具体“数据”或“行”,地区”下的“中国”、“美国”;“中国”下的“北京”、“上海”等,这些项有层级关系(父子关系)。

调用联动类别的核心步骤是:获取类别ID -> 使用 GetList 函数获取类别项列表 -> 循环输出


第一步:准备工作(创建一个联动类别)

在调用之前,你必须先在后台创建一个可用的联动类别。

  1. 登录 DedeCMS 后台。
  2. 进入【核心】 -> 【联动类别】。
  3. 点击【增加联动类别】。
    • 类别名称: 填写一个你容易识别的名字,“销售地区”。
    • 类别目录: 系统自动生成,用于内部识别,一般不用修改。
    • 是否开启: 选择 “是”。
    • 显示方式: 根据需要选择,“下拉列表”、“下拉联动菜单”(这个效果最好,但需要配合JS)。
    • 其他选项: 默认即可。
  4. 点击【确定】。
  5. 进入刚刚创建的 “销售地区” 联动类别的管理页面,点击【增加顶级类别】,添加一级分类,如“中国”、“美国”。
  6. 然后可以为每个一级分类添加二级分类,例如在“中国”下添加“北京”、“上海”、“广东”等。
  7. 完成后,记录下这个联动类别的 ID(在列表页可以看到)。

假设我们创建了一个名为 “销售地区” 的联动类别,其 ID = 1

dede联动类别的调用
(图片来源网络,侵删)

第二步:调用联动类别的方法

这里介绍三种最常用的调用方法,从简单到复杂。

使用 {dede:linkage} 标签(推荐,最简单)

这是 DedeCMS 内置的专用标签,专门用于调用联动类别,非常方便。

基本语法:

{dede:linkage type='id' islist='0' cache='0'}
    <a href='[field:typelink/]'>[field:typename/]</a>
{/dede:linkage}

参数详解:

dede联动类别的调用
(图片来源网络,侵删)
  • type='id': (核心参数) 指定你要调用的联动类别的 ID。type='1' 调用 ID 为 1 的“销售地区”。
  • islist='0': (重要参数)
    • islist='0': 表示获取所有层级的类别项,并以层级关系缩进显示,适合制作面包屑或分类列表。
    • islist='1': 表示只获取顶级分类(第一级)。
  • cache='0': 是否使用缓存。0 表示不使用,适合内容经常变动的场景;1 表示使用,能提高速度,调试时建议设为 0
  • row='数量': 获取的记录条数,默认不限制。
  • linktype: 链接类型。0 为无链接(只显示文字),1 为链接到列表页,2 为链接到内容页(联动类别本身没有内容页,12 效果类似,通常用于关联其他模型)。

使用 GetList 函数(更灵活,适用于复杂逻辑)

{dede:linkage} 标签无法满足你的需求时(比如需要配合 if 判断、在PHP代码块中处理等),可以使用 GetList 函数。

基本语法:

<?php
    // 调用 ID 为 1 的联动类别
    $linkage = new Linkage(1);
    $items = $linkage->GetItems(0); // 获取顶级分类项
    // 循环输出顶级分类
    foreach($items as $item) {
        // $item 是一个数组,包含当前项的所有信息
        // 常用字段:id, typename, parentid, issystem, etc.
        echo "<a href='{$item['typelink']}'>{$item['typename']}</a> | ";
        // 如果需要获取其子分类,可以再次调用 GetItems
        $childItems = $linkage->GetItems($item['id']);
        if(!empty($childItems)) {
            echo "<ul>";
            foreach($childItems as $child) {
                echo "<li><a href='{$child['typelink']}'>{$child['typename']}</a></li>";
            }
            echo "</ul>";
        }
    }
?>

代码详解:

  1. new Linkage(1): 创建一个联动类别对象,1 是你要调用的联动类别 ID。
  2. GetItems(0): 获取顶级分类项,参数 0 代表顶级分类的父 ID。
  3. GetItems($item['id']): 在循环内部,使用当前项的 id 作为参数,可以获取它的所有直接子项。
  4. $item['typename']: 分类项的名称。
  5. $item['typelink']: 分类项的链接(如果设置了链接类型)。
  6. $item['id']: 分类项自身的 ID。

在表单中调用(联动菜单)

这是联动类别最常见的应用场景之一,比如在发布内容时让用户选择地区。

模型中添加联动字段

  • 进入【核心】 -> 【内容模型管理】 -> 选择你的模型(如“文章”) -> 【字段管理】 -> 【增加字段】。
  • 字段名称: salesarea (英文,用于数据库)
  • 字段提示: 销售地区 (中文,后台显示)
  • 字段类型: 联动类型
  • 联动类型: 选择你之前创建的“销售地区”。
  • 保存。

在模板中调用发布模板(通常是 article_add.htm)中,使用 {dede:linkage} 标签来渲染成下拉菜单。

HTML 模板代码:

<tr>
    <td height="25" colspan="2" bgcolor="#F9FDF9" style="padding-left:10px;">销售地区:</td>
</tr>
<tr>
    <td height="25" colspan="2" bgcolor="#F9FDF9" style="padding-left:10px;">
        {dede:linkage 
            type='1' 
            name='salesarea' 
            formid='arcAdd' 
            einfo='请选择销售地区'
            }
        {dede:linkage}
    </td>
</tr>

参数详解:

  • type='1': 指定联动类别 ID。
  • name='salesarea': (关键) 必须与你在模型中添加的字段名 salesarea 保持一致,这是数据提交到后台的字段名。
  • formid='arcAdd': 指定表单的 ID,通常是 arcAdd(文章)或 myad(广告)等,确保 JS 能正确绑定。
  • einfo='请选择销售地区': 当未选择时显示的提示信息。

总结与示例

假设你的联动类别 “销售地区” ID 为 1

示例1:在首页显示所有顶级地区(使用标签)

<h2>销售地区</h2>
<ul>
    {dede:linkage type='1' islist='1' cache='0'}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:linkage}
</ul>

示例2:显示一个完整的地区分类树(使用函数)

<div class="category-tree">
    <h2>地区分类</h2>
    <ul>
        <?php
            $linkage = new Linkage(1);
            $topItems = $linkage->GetItems(0);
            foreach($topItems as $top) {
                echo "<li><strong>{$top['typename']}</strong>";
                $childItems = $linkage->GetItems($top['id']);
                if(!empty($childItems)) {
                    echo "<ul>";
                    foreach($childItems as $child) {
                        echo "<li><a href='{$child['typelink']}'>{$child['typename']}</a></li>";
                    }
                    echo "</ul>";
                }
                echo "</li>";
            }
        ?>
    </ul>
</div>

示例3:在文章内容页调用当前文章的联动字段值 如果文章使用了联动字段 salesarea页显示它,可以这样:

<p>本文销售地区:{dede:field name='salesarea'/}</p>

这里的 {dede:field name='salesarea'} 会自动读取数据库中 salesarea 字段存储的值(通常是选中的项的 ID),然后通过系统机制解析为对应的名称。

希望这份详细的教程能帮助你完全掌握 DedeCMS 联动类别的调用!

-- 展开阅读全文 --
头像
织梦如何修改图片路径?
« 上一篇 03-13
图片上传失败,原因何在?
下一篇 » 03-13
取消
微信二维码
支付宝二维码

目录[+]