Typecho 文档:给标签云新增分类功能

2023年06月18日

适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/3464.html
许可方式:CC BY-NC-SA / 付费改造

注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。

敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。

文档说明

Typecho 默认自带有标签云功能,但是,只能按照标签的 mid(或标签量)的正反序输出,当博客中创建了很多标签后,标签云的效果就显得比较混乱,在与网友 Demo Chen 的交流中,发现他对标签云进行了分类输出,一目了然,由此得到启发,于是琢磨出本文档,让标签云可以实现按照自定义的分类输出,还可以隐藏不想显示的标签。

工作原理:分类和标签都具有 order 字段,用于排序,而标签的 order 字段默认被闲置了,所以,把它用起来。


使用方法

A 涉及文件

var/Widget/Metas/Tag/Edit.php

B 改造文件

作用:给标签云新增分类功能。

打开文件 var/Widget/Metas/Tag/Edit.php 替换两处、新增两处代码:

1. 搜索找到以下代码,有两处:

    $tag = $this->request->from('name', 'slug'

2. 将以上两处代码都替换为以下代码:

    $tag = $this->request->from('name', 'slug', 'order'

3. 搜索找到以下代码:

    $form->addInput($slug);

4. 在以上代码的下一行,添加以下代码:

    /** 标签分类 */
    $order = new Form\Element\Radio(
        'order',
        [
            '0' => _t('默认'),
            '1' => _t('年份'), // 可自定义标签分类名称
            '2' => _t('城市'), // 可自定义标签分类名称
            '3' => _t('作者'), // 可自定义标签分类名称,以此类推,可以继续新增 4、5、6…… 个标签分类,需与调用输出的数量对应
        ],
        '0',
        _t('标签分类'),
        _t('此功能用于分类标签, 在特定调用中它会被显示.')
    );
    $form->addInput($order);

5. 搜索找到以下代码:

    $slug->value($meta['slug']);

6. 在以上代码的下一行,添加以下代码:

    $order->value($meta['order']);

至此,在后台》管理》标签,已经可以看到(标签分类)的功能选项,点击每个标签的编辑按键(铅笔状图标)后,给对应的标签添加分类,提交即可。

C 调用输出

1. 在需要呈现标签云的文件适当位置,添加以下代码:

    <link rel="stylesheet" href="<?php $this->options->themeUrl('lopwon/css/lopwon.tagCat.css'); ?>" />

    <?php

    $this->widget('Widget_Metas_Tag_Cloud@tagCat', 'ignoreZeroCount=true')->to($tagCat); //将 true 改为 false 后,零数量的标签也将显示
    $dateArr = [];
    $cityArr = [];
    $authorArr = [];
    $otherArr = [];

    while($tagCat->next()) {
        $tagItem = '<a href="'.$tagCat->permalink.'"><span class="clamp">'.$tagCat->name.'<sup>'.$tagCat->count.'</sup></span></a>';
        if (!in_array($tagCat->slug, array('标签一 slug 缩略名', '标签二 slug 缩略名'))) { //在 array 数组里,添加需要隐藏的标签 slug 缩略名
            if ($tagCat->order == 1) {
                $dateArr [] = [$tagItem];
            } else if ($tagCat->order == 2) {
                $cityArr [] = [$tagItem];
            } else if ($tagCat->order == 3) {
                $authorArr [] = [$tagItem];
            } else if ($tagCat->order == 0) {
                $otherArr [] = [$tagItem];
            }
        }
    }

    echo '<div id="Lopwon_Tags" class="Lopwon_Tags">';
    echo '<div class="Lopwon_Tags-wrap">';

        echo '<div class="Lopwon_Tags-item"><span class="first-span">年份标签</span>';
        foreach ($dateArr as $date) {
            echo $date[0];
        }
        echo '</div>';

        echo '<div class="Lopwon_Tags-item"><span class="first-span">城市标签</span>';
        foreach ($cityArr as $city) {
            echo $city[0];
        }
        echo '</div>';

        echo '<div class="Lopwon_Tags-item"><span class="first-span">作者标签</span>';
        foreach ($authorArr as $author) {
            echo $author[0];
        }
        echo '</div>';

        echo '<div class="Lopwon_Tags-item"><span class="first-span">其他标签</span>';
        foreach ($otherArr as $other) {
            echo $other[0];
        }
        echo '</div>';

    echo '</div>';
    echo '</div>';

    ?>

2. 下载文件包,引入样式文件。

另有不需要修改程序核心文件的方法,电邮 lopwon@qq.com 付费改造。

This is a message

store