在 DedeCMS 中,并没有一个后台设置让你直接选择“Tag 颜色1”、“Tag 颜色2”等,实现颜色的方法通常是通过 PHP 代码动态生成一个颜色数组,然后为每个 Tag 随机分配一个颜色。

下面我将为你提供两种最常用、最实用的方法,并附上详细的步骤和代码。
使用 织梦标签 在任意页面调用(推荐,最灵活)
这种方法的核心思想是:创建一个自定义的函数,然后在需要显示 Tag 的地方使用织梦的自定义标签 {dede:mytag} 来调用它,优点是可以在任何模板(首页、列表页、内容页等)自由使用。
第 1 步:创建自定义函数文件
- 找到你的 DedeCMS 根目录下的
/include/extend.func.php文件。 - 用编辑器打开这个文件,在文件的最后面(
?>之前)添加以下 PHP 代码:
/**
* 获取指定数量的随机颜色
* @param int $count 需要的颜色数量
* @return array 包含随机颜色的数组
*/
function getRandomColors($count = 10) {
// 你可以在这里定义你想要的所有颜色
// 十六进制格式
$colors = array(
'#FF5733', '#33FF57', '#3357FF', '#F333FF', '#FF33A1',
'#33FFF6', '#FFD733', '#8C33FF', '#33FF8C', '#FF8C33',
'#FF3333', '#33FF33', '#3333FF', '#FFFF33', '#FF33FF',
'#00CED1', '#FF6347', '#7CFC00', '#9370DB', '#20B2AA'
);
// 如果需要的颜色数量比预设的多,则循环预设数组来补充
if ($count > count($colors)) {
$times = ceil($count / count($colors));
for ($i = 1; $i < $times; $i++) {
$colors = array_merge($colors, $colors);
}
}
// 打乱数组顺序,确保随机性
shuffle($colors);
// 截取指定数量的颜色
return array_slice($colors, 0, $count);
}
代码说明:
$colors数组里存放了所有你希望 Tag 可能用到的颜色,你可以根据自己网站的配色方案自由修改或增减。shuffle($colors);会打乱颜色数组的顺序,确保每次调用时颜色的分配都是随机的。array_slice(..., 0, $count);确保我们只取需要的数量,避免颜色过多。
第 2 步:在模板文件中使用自定义标签
你可以在任何模板文件(如 index.htm, article_artlist.htm 等)中使用这个功能了。

-
在你想要显示彩色 Tag 的地方,找到原来的织梦 Tag 标签,它通常是这样的:
{dede:tag row='40' getall='0' sort='month'} <a href="[field:link/]">[field:tagname/]</a> {/dede:tag} -
将其修改为以下形式,使用我们刚刚创建的自定义函数:
{dede:tag row='40' getall='0' sort='month'} <a href="[field:link/]" style="color: [field:color/]">[field:tagname/]</a> {/dede:tag} -
最关键的一步:在模板文件的开头,引入你刚刚创建的函数,在
<head>标签下方或其他合适的位置,添加如下代码:{dede:php} // 引入我们刚刚写的函数 function getRandomColors($count = 10) { $colors = array( '#FF5733', '#33FF57', '#3357FF', '#F333FF', '#FF33A1', '#33FFF6', '#FFD733', '#8C33FF', '#33FF8C', '#FF8C33', '#FF3333', '#33FF33', '#3333FF', '#FFFF33', '#FF33FF', '#00CED1', '#FF6347', '#7CFC00', '#9370DB', '#20B2AA' ); if ($count > count($colors)) { $times = ceil($count / count($colors)); for ($i = 1; $i < $times; $i++) { $colors = array_merge($colors, $colors); } } shuffle($colors); return array_slice($colors, 0, $count); } {/dede:php}注意:如果你的模板开启了
php支持,可以直接写<?php ... ?>,但为了通用性,使用{dede:php}...{/dede:php}标签更安全。
(图片来源网络,侵删)
第 3 步:修改标签源文件以支持颜色字段
默认的 tag 标签是不支持 color 这个字段的,我们需要修改织梦的核心文件来让它支持。
-
找到文件:
/include/taglib/tag.lib.php -
打开它,找到大约第 112 行左右的
GetInfos函数,修改while循环体内的代码,在$ctp->Assign($GLOBALS['autoindex'], $row);这一行之前,添加以下代码:// 为每个tag分配一个随机颜色 $row['color'] = getRandomColors($GLOBALS['totalresult'])[$GLOBALS['autoindex']];
整合后的 tag.lib.php 修改示例:
// ... 前面的代码 ...
while($row = $dsql->GetArray($this->CTag))
{
// 为每个tag分配一个随机颜色
// 注意:getRandomColors 函数必须在当前作用域可用,所以最好把它也放到这个文件里
// 或者确保在模板中已经引入了该函数
if (!function_exists('getRandomColors')) {
function getRandomColors($count = 10) {
$colors = array('#FF5733', '#33FF57', '#3357FF', '#F333FF', '#FF33A1', '#33FFF6', '#FFD733', '#8C33FF', '#33FF8C', '#FF8C33');
if ($count > count($colors)) {
$times = ceil($count / count($colors));
for ($i = 1; $i < $times; $i++) {
$colors = array_merge($colors, $colors);
}
}
shuffle($colors);
return array_slice($colors, 0, $count);
}
}
$row['color'] = getRandomColors($GLOBALS['totalresult'])[$GLOBALS['autoindex']];
$row['tagname'] = htmlspecialchars($row['tagname']);
$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['tagname'])."/";
$ctp->Assign($GLOBALS['autoindex'], $row);
$GLOBALS['autoindex']++;
}
// ... 后面的代码 ...
完成以上三步后,你的 Tag 标签就会随机显示你预设的颜色了!
修改 tags.php 文件(仅用于标签列表页)
如果你只想在 tags.php 这个标签聚合页面上实现彩色标签,可以只修改这一个文件,这样更简单,但通用性较差。
-
找到文件:
/tags.php -
在文件开头,
require_once (dirname(__FILE__) . "/include/common.inc.php");这一行之后,添加获取随机颜色的函数:// 获取随机颜色 function getRandomColors($count = 10) { $colors = array('#FF5733', '#33FF57', '#3357FF', '#F333FF', '#FF33A1', '#33FFF6', '#FFD733', '#8C33FF', '#33FF8C', '#FF8C33'); if ($count > count($colors)) { $times = ceil($count / count($colors)); for ($i = 1; $i < $times; $i++) { $colors = array_merge($colors, $colors); } } shuffle($colors); return array_slice($colors, 0, $count); } -
找到调用标签的代码,通常是类似这样的部分:
$tags = ''; $tags .= "<a href='".$cfg_cmsurl."/tags.php?/".urlencode($row['tagname'])."/'>".$row['tagname']."</a>";
-
修改为:
// 假设$row是从数据库里查出来的tag数据 $colorArray = getRandomColors($dsql->GetTotalRowNum()); // 获取总行数来生成颜色数组 $color = $colorArray[$i]; // $i是循环的索引 $tags = "<a href='".$cfg_cmsurl."/tags.php?/".urlencode($row['tagname'])."/' style='color:".$color."'>".$row['tagname']."</a>";
注意:你需要确保
$i变量在你的循环中可用,或者使用其他方式来为每个$row分配颜色。
这种方法相对简单,但只对 tags.php 页面有效,且不如方法一灵活和规范。
总结与建议
| 特性 | 方法一 (推荐) | 方法二 |
|---|---|---|
| 灵活性 | 极高,可在任何模板页面使用 | 低,仅限于 tags.php 页面 |
| 修改范围 | 需修改 extend.func.php 和 tag.lib.php |
仅需修改 tags.php |
| 维护性 | 好,逻辑封装在函数中,易于管理 | 差,逻辑写在具体页面,不易复用 |
| 适用场景 | 所有需要彩色标签的场景 | 只想临时在标签列表页做个效果 |
强烈建议你使用【方法一】,因为它更符合 DedeCMS 的扩展机制,代码更整洁,未来如果想在其他地方使用彩色标签,直接调用 {dede:tag} 即可,非常方便。
完成设置后,记得清空一下 DedeCMS 的缓存(后台-系统-一键更新缓存-更新全部),然后刷新你的网站,就能看到五彩斑斓的 Tag 标签了!
