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