dede tag标签如何指定几种颜色?

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

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

dede tag标签指定几种颜色
(图片来源网络,侵删)

下面我将为你提供两种最常用、最实用的方法,并附上详细的步骤和代码。


使用 织梦标签 在任意页面调用(推荐,最灵活)

这种方法的核心思想是:创建一个自定义的函数,然后在需要显示 Tag 的地方使用织梦的自定义标签 {dede:mytag} 来调用它,优点是可以在任何模板(首页、列表页、内容页等)自由使用。

第 1 步:创建自定义函数文件

  1. 找到你的 DedeCMS 根目录下的 /include/extend.func.php 文件。
  2. 用编辑器打开这个文件,在文件的最后面(?> 之前)添加以下 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 等)中使用这个功能了。

dede tag标签指定几种颜色
(图片来源网络,侵删)
  1. 在你想要显示彩色 Tag 的地方,找到原来的织梦 Tag 标签,它通常是这样的:

    {dede:tag row='40' getall='0' sort='month'}
    <a href="[field:link/]">[field:tagname/]</a>
    {/dede:tag}
  2. 将其修改为以下形式,使用我们刚刚创建的自定义函数:

    {dede:tag row='40' getall='0' sort='month'}
    <a href="[field:link/]" style="color: [field:color/]">[field:tagname/]</a>
    {/dede:tag}
  3. 最关键的一步:在模板文件的开头,引入你刚刚创建的函数,在 <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} 标签更安全。

    dede tag标签指定几种颜色
    (图片来源网络,侵删)

第 3 步:修改标签源文件以支持颜色字段

默认的 tag 标签是不支持 color 这个字段的,我们需要修改织梦的核心文件来让它支持。

  1. 找到文件:/include/taglib/tag.lib.php

  2. 打开它,找到大约第 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 这个标签聚合页面上实现彩色标签,可以只修改这一个文件,这样更简单,但通用性较差。

  1. 找到文件:/tags.php

  2. 在文件开头,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);
    }
  3. 找到调用标签的代码,通常是类似这样的部分:

    $tags = '';
    $tags .= "<a href='".$cfg_cmsurl."/tags.php?/".urlencode($row['tagname'])."/'>".$row['tagname']."</a>";
  4. 修改为:

    // 假设$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.phptag.lib.php 仅需修改 tags.php
维护性 ,逻辑封装在函数中,易于管理 ,逻辑写在具体页面,不易复用
适用场景 所有需要彩色标签的场景 只想临时在标签列表页做个效果

强烈建议你使用【方法一】,因为它更符合 DedeCMS 的扩展机制,代码更整洁,未来如果想在其他地方使用彩色标签,直接调用 {dede:tag} 即可,非常方便。

完成设置后,记得清空一下 DedeCMS 的缓存(后台-系统-一键更新缓存-更新全部),然后刷新你的网站,就能看到五彩斑斓的 Tag 标签了!

-- 展开阅读全文 --
头像
dede列表文章图片不显示,如何解决?
« 上一篇 2025-12-22
C语言程序设计第四版课后习题答案是否完整准确?
下一篇 » 2025-12-22

相关文章

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

目录[+]