文档章节

Typecho - MyTagCloud标签云插件

天秤vs永恒
 天秤vs永恒
发布于 2016/06/29 14:22
字数 882
阅读 27
收藏 0

一、前言:

标签云是博客、CMS类系统的常见功能,读者可以根据标签快速的查找和浏览自己喜欢的文章。个人很喜欢Typecho的简洁,但对于后台不能控制前台标签栏目的显示还是略表遗憾。令人高兴的是Typecho的插件机制可以让Typecho Fans很容易的开发出自己想要的插件,于是决定自己开发一个标签云插件。

该插件已被Typecho官方merge。

二、资料:

三、效果:

 

四、使用帮助:

  1. 下载插件
  2. 将插件上传到/usr/plugins/目录
  3. 在需要使用标签云的模板中放入如下PHP代码 Typecho_Plugin::factory(‘usr/themes/sidebar.php’)->tagCloud();
  4. 登陆后台,在菜单“控制台->插件”中启用插件,并根据自己需求进行配置即可轻松使用
  5. 如果标签云模板结构不同,重写插件中render()方法即可

代码如下:(点击下载

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/** * MyTagCloud插件,后台控制前台标签智能显示 * * @package MyTagCloud * @author Ma Yanlong * @version 1.0.0 * @link http://www.mayanlong.com */
class MyTagCloud_Plugin implements Typecho_Plugin_Interface {

    // 是否启用
    const ENABLE_YES = 10;  //启用
    const ENABLE_NO = 20;  //不启用

    // 是否显示没使用的标签
    const ZERO_SHOW = 10;   //显示
    const ZERO_HIDE = 20;   //不显示

    /** * 激活插件方法,如果激活失败,直接抛出异常 * * @access public * @return void * @throws Typecho_Plugin_Exception */
    public static function activate() {
        // factory('name') name是插件接口名称 可以取任何名称 为方便寻找我们以文件目录命名
        Typecho_Plugin::factory('usr/themes/sidebar.php')->tagCloud = array('MyTagCloud_Plugin', 'process');
    }

    /** * 禁用插件方法,如果禁用失败,直接抛出异常 * * @static * @access public * @return void * @throws Typecho_Plugin_Exception */
    public static function deactivate(){}

    /** * 获取插件配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form 配置面板 * @return void */
    public static function config(Typecho_Widget_Helper_Form $form) {

        // 是否启用
        $compatibilityMode = new Typecho_Widget_Helper_Form_Element_Radio('enable', array(
            self::ENABLE_YES   =>  _t('启用'),
            self::ENABLE_NO   =>  _t('不启用')
        ), self::ENABLE_YES, _t('是否启用该插件'), _t("启用后将这段PHP代码放到需要显示标签的模板中即可 Typecho_Plugin::factory('usr/themes/sidebar.php')->tagCloud(); "));
        $form->addInput($compatibilityMode->addRule('enum', _t('必须选择一个模式'), array(self::ENABLE_YES, self::ENABLE_NO)));

        // 是否显示没使用的标签
        $compatibilityMode = new Typecho_Widget_Helper_Form_Element_Radio('zero', array(
            self::ZERO_SHOW   =>  _t('显示'),
            self::ZERO_HIDE   =>  _t('不显示')
        ), self::ZERO_SHOW, _t('显示没使用的标签'), _t("默认显示所有标签,请根据自己需要进行设置。"));
        $form->addInput($compatibilityMode->addRule('enum', _t('必须选择一个模式'), array(self::ZERO_SHOW, self::ZERO_HIDE)));

        // 前台显示栏目标题
        $title = new Typecho_Widget_Helper_Form_Element_Text('title', NULL, '标签', _t('前台显示栏目标题'));
        $form->addInput($title);

        // 最多显示标签数量
        $limit = new Typecho_Widget_Helper_Form_Element_Text('limit', NULL, '20', _t('最多显示标签数量'));
        $form->addInput($limit);
    }

    /** * 个人用户的配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form * @return void */
    public static function personalConfig(Typecho_Widget_Helper_Form $form){}

    /** * 插件实现方法 * * @access public * @return void */
    public static function process() {
        $enable = Typecho_Widget::widget('Widget_Options')->plugin('MyTagCloud')->enable;
        $zero = Typecho_Widget::widget('Widget_Options')->plugin('MyTagCloud')->zero;
        $title = Typecho_Widget::widget('Widget_Options')->plugin('MyTagCloud')->title;
        $limit = (int)Typecho_Widget::widget('Widget_Options')->plugin('MyTagCloud')->limit;

        // 是否启用
        if ($enable != self::ENABLE_YES) {
            return;
        }

        // 查找满足条件的标签
        $tags = Typecho_Widget::widget('Widget_Metas_Tag_Cloud', array(
            'sort' => 'count',
            'ignoreZeroCount' => $zero == self::ZERO_HIDE ? true : false,
            'desc' => true,
            'limit' => $limit
        ));

        // 是否有标签
        if ($tags->have()) {
            self::render($title, $tags);
        }
    }

    /** * 输出Html标签 * * @access public * @return void */
    public static function render($title, $tags) {
        // 拼接并输出html
        $html = '<section class="widget"> <h3 class="widget-title">'. $title .'</h3> <div class="widget-list">';

                        while ($tags->next()) {
                            $html .= "<a href='{$tags->permalink}' style='display: inline-block; margin: 0 5px 5px 0;'>{$tags->name}</a>";
                        }

        $html .=    '</div> </section>';

        echo $html;
    }


}

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

© 著作权归作者所有

天秤vs永恒
粉丝 4
博文 39
码字总数 18402
作品 0
长宁
项目经理
私信 提问
基于LNMP搭建Typecho博客平台

前面我已经搭建好了LNMP环境:http://msiyuetian.blog.51cto.com/8637744/1688048 也可以参考我之前写的另一篇文章:http://msiyuetian.blog.51cto.com/8637744/1740236 下面基于LNMP来搭建T...

M四月天
2018/06/26
0
0
支持上传文件的xhEditor for Typecho EX插件

Typecho是一套超轻量的开源博客,界面简洁,功能紧凑,但是Typecho的文本编辑器实在是不好,需要自己写html代码,插图也不方便。试用了几个插件,发现TinyMCE回车总有问题,每次保存就多几个...

Shawphy
2012/03/06
0
0
xhEditor for Typecho

Typecho是一套超轻量的开源博客,界面简洁,功能紧凑,但是Typecho的文本编辑器实在是不好,需要自己写html代码,插图也不方便。试用了几个插件,发现TinyMCE回车总有问题,每次保存就多几个...

匿名
2012/03/06
1K
0
typecho插件编写教程1 - 从HelloWorld说起

/** Hello World * @package HelloWorld @author qining @version 1.0.0 @link http://typecho.org */ ... ......

thinkyoung
2015/06/17
0
0
​Typecho支持上传本地图片的编辑器插件

搭建Typecho博客平台参考我之前的文章:http://msiyuetian.blog.51cto.com/8637744/1920161 Typecho自带的文章编辑器太简洁了,很多功能都缺少,比如本地上传图片等功能。本文主要介绍一款插...

M四月天
2017/04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lua字符串和时间戳相互转换

1. 时间戳转成格式化字符串 直接利用函数os.date()将时间戳转化成格式化字符串.```local timestamp = 1561636137;local strDate = os.date("%Y/%m/%d %H:%M:%S", timestamp)print("strD......

书香神
今天
3
0
代码规范

代码格式化 安装vscode插件:Prettier - Code formatter 格式化配置:将下列配置写入到vscode的settings.json文件 (遵照代码格式化) "prettier.disableLanguages": ["vue"], "prettier.......

TreeZhou0511
今天
6
0
python实现人工神经网络的一个例子

人工神经网络已经有无数的开源框架,比如tensorflow,caffe等,可以直接用。但最近需要做一个小样例,把基本思想讲一讲,因此自己写了一个demo,以供参考。 下面直接上代码,代码中有注释,比...

propagator
今天
8
0
远程dubugger

1、在tomcat的bin下/data/project/XXX/apache-tomcat-8.5.23/bin 在catalina.bat文件中新增如下即可 JAVA_OPTS="-Xmx1024m -Xms1024m -agentlib:jdwp=transport=dt_socket,server=y,suspend......

一只小青蛙
今天
3
0
jemter 连接MySQL

jemter 连接MySQL 点击测试计划,测试计划最后”添加目录或jar包到ClassPath“,点击浏览,添加mysql-connector.jar mysql-connector.jar的下载地址: https://mvnrepository.com/artifact/my...

xiaobai1315
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部