Typecho - MyTagCloud標籤雲插件

1、前言:

標籤雲是博客、CMS類系統的常見功能,讀者能夠根據標籤快速的查找和瀏覽本身喜歡的文章。我的很喜歡Typecho的簡潔,但對於後臺不能控制前臺標籤欄目的顯示仍是略表遺憾。使人高興的是Typecho的插件機制可讓Typecho Fans很容易的開發出本身想要的插件,因而決定本身開發一個標籤雲插件。php

該插件已被Typecho官方merge。html

2、資料:

3、效果:

MyTagCloud02.gif

4、使用幫助:

  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/immayanlong
馬燕龍Github主頁:https://github.com/yanlongmagit

相關文章
相關標籤/搜索