dede联动类别样式如何自定义与调用?

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

联动类别是 DedeCMS 中一个非常实用的功能,它允许你创建一组相互关联的下拉菜单,省-市-县”三级联动,要控制它的显示样式,主要有两种方法:

dede联动类别样式
(图片来源网络,侵删)
  1. 修改核心函数文件(全局生效,最常用)
  2. 使用模板标签的 style 属性(针对特定位置,最灵活)

修改核心函数文件(全局控制)

这是最标准、最常用的方法,通过修改 select 标签的 class 属性,你就可以用 CSS 来统一控制所有联动类别的样式。

步骤 1:定位核心文件

联动类别在后台模板中是通过 {dede:channeltype} 这个标签来调用的,其核心的 HTML 代码生成逻辑位于系统核心文件中。

你需要编辑的文件是: /include/typelink.class.php

步骤 2:修改代码

打开 typelink.class.php 文件,找到生成 <select> 标签的代码,通常在 GetOptionList() 或类似的方法中。

dede联动类别样式
(图片来源网络,侵删)

你会找到类似这样的代码行:

// 原始代码,大约在 280 行左右,具体版本可能略有不同
$s .= "<select name='$fieldname' id='$fieldname'>\r\n";

我们需要在这行代码中为 <select> 标签添加一个 class 属性,我们给它添加一个类名 联动类别样式

修改后:

// 修改后的代码
$s .= "<select name='$fieldname' id='$fieldname' class='联动类别样式'>\r\n";

代码解释:

dede联动类别样式
(图片来源网络,侵删)
  • name='$fieldname':表单提交时的名称。
  • id='$fieldname':元素的唯一 ID,方便 JavaScript 操作。
  • class='联动类别样式'这是我们添加的,它为这个下拉菜单定义了一个 CSS 类,名为“联动类别样式”。

步骤 3:添加 CSS 样式

你可以在你的 CSS 文件(/templets/你的模板/style/ 目录下的 css 文件,或者直接在模板的 <head> 标签内)中为这个类名定义样式。

示例 CSS:

/* 为所有联动类别添加统一的样式 */
.联动类别样式 {
    width: 200px;       /* 设置宽度 */
    padding: 8px;       /* 内边距 */
    font-size: 14px;    /* 字体大小 */
    border: 1px solid #ccc; /* 边框 */
    border-radius: 4px; /* 圆角 */
    background-color: #fff; /* 背景色 */
    margin-right: 10px; /* 与下一个元素间距 */
}
/* 可选:当鼠标悬停或获得焦点时的样式 */
.联动类别样式:hover,
.联动类别样式:focus {
    border-color: #66afe9;
    outline: none;
    box-shadow: 0 0 8px rgba(102, 175, 233, 0.6);
}

优点:

  • 全局统一:一次修改,所有使用 {dede:channeltype} 的地方都会应用此样式。
  • 维护方便:样式集中管理,易于修改。

缺点:

  • 侵入性强:修改了核心文件,升级 DedeCMS 时可能会被覆盖,需要重新修改。

使用模板标签的 style 属性(局部控制)

如果你只想在页面的某个特定位置为联动类别设置独特的样式,而不影响其他地方,可以使用这种方法。

步骤 1:在模板标签中添加属性

在你调用联动类别的模板文件中(article_add.htmlist_栏目ID.htm),找到 {dede:channeltype}

原始调用方式:

{dede:channeltype typeid='0' name='typeid'/}

修改后,添加 class 或直接内联 style

方式 A:添加自定义 Class(推荐)

{dede:channeltype typeid='0' name='typeid' class='我的自定义样式类名'/}

你在 CSS 文件中定义 .我的自定义样式类名 即可。

方式 B:直接内联样式(不推荐,用于快速测试)

{dede:channeltype typeid='0' name='typeid' style='width: 150px; border: 2px solid red;'/}

这种方式会将样式直接写在 HTML 标签里,不利于维护,仅适用于临时调试。

步骤 2:在 CSS 文件中定义样式

与方法一类似,在你的 CSS 文件中为你刚刚添加的 class 定义样式。

/* 仅应用于特定位置的联动类别 */
.我的自定义样式类名 {
    width: 150px;
    border: 2px solid #ff6a00;
    background-color: #fffbe6;
}

优点:

  • 灵活:可以针对不同位置设置不同的样式。
  • 非侵入:不修改核心文件,升级无忧。

缺点:

  • 需要重复定义:如果多个地方需要相同的特殊样式,就需要在每个标签上都加上 class 属性。

完整示例:实现一个美观的联动类别

假设我们要在文章发布页面实现一个“省-市-县”三级联动,并给它们加上统一的现代化样式。

修改核心文件(全局样式)

编辑 /include/typelink.class.php,在 GetOptionList 方法中找到 <select> 标签,添加 class

// 在 typelink.class.php 中
$s .= "<select name='$fieldname' id='$fieldname' class='联动-select'>\r\n";

添加 CSS 样式

在你的模板 CSS 文件(/templets/default/style/dedecms.css)中添加以下样式:

/* 联动类别容器,用于布局 */
.form-group {
    margin-bottom: 15px;
    display: flex;
    align-items: center;
}
.form-group label {
    margin-right: 10px;
    font-weight: bold;
    min-width: 60px;
}
/* 联动下拉框的样式 */
.联动-select {
    width: 150px;
    height: 36px;
    line-height: 36px;
    padding: 0 10px;
    font-size: 14px;
    color: #333;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    -webkit-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
    -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
}
.联动-select:focus {
    border-color: #66afe9;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
}
/* 为联动组添加间距,让它们不挤在一起 */
.联动-select + .联动-select {
    margin-left: 10px;
}

在模板文件中调用

在你的模板文件(如 article_add.htm)中,这样调用联动类别:

<div class="form-group">
    <label>文章栏目:</label>
    {dede:channeltype typeid='0' name='typeid'}
</div>

最终效果就是三个整齐、美观且具有交互效果的下拉框。

方法 适用场景 优点 缺点
修改核心文件 需要整个网站联动类别样式统一 统一、规范、维护方便 修改核心文件,升级可能被覆盖
模板标签属性 仅需对特定位置的联动类别进行样式定制 灵活、不侵入核心、升级无忧 需要为每个特殊样式单独添加属性,不够“一劳永逸”

对于大多数情况,推荐使用方法一(修改核心文件),因为它能确保整个网站的联动类别风格一致,如果只是少数页面需要特殊样式,再结合使用方法二。

-- 展开阅读全文 --
头像
C语言与C++思想的核心差异究竟是什么?
« 上一篇 04-08
dede下拉菜单跳转怎么设置?
下一篇 » 04-08
取消
微信二维码
支付宝二维码