一、前言:
標(biāo)簽云是博客、CMS類系統(tǒng)的常見(jiàn)功能,讀者可以根據(jù)標(biāo)簽快速的查找和瀏覽自己喜歡的文章。個(gè)人很喜歡Typecho的簡(jiǎn)潔,但對(duì)于后臺(tái)不能控制前臺(tái)標(biāo)簽欄目的顯示還是略表遺憾。令人高興的是Typecho的插件機(jī)制可以讓Typecho Fans很容易的開(kāi)發(fā)出自己想要的插件,于是決定自己開(kāi)發(fā)一個(gè)標(biāo)簽云插件。
該插件已被Typecho官方merge。
二、資料:
- Typecho官方文檔,在此不做過(guò)多介紹。
三、效果:
MyTagCloud02.gif
四、使用幫助:
- 下載插件
- 將插件上傳到/usr/plugins/目錄
- 在需要使用標(biāo)簽云的模板中放入如下PHP代碼 Typecho_Plugin::factory('usr/themes/sidebar.php')->tagCloud();
- 登陸后臺(tái),在菜單“控制臺(tái)->插件”中啟用插件,并根據(jù)自己需求進(jìn)行配置即可輕松使用
- 如果標(biāo)簽云模板結(jié)構(gòu)不同,重寫(xiě)插件中render()方法即可
代碼如下:(點(diǎn)擊下載)
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/**
* MyTagCloud插件,后臺(tái)控制前臺(tái)標(biāo)簽智能顯示
*
* @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; //不啟用
// 是否顯示沒(méi)使用的標(biāo)簽
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代碼放到需要顯示標(biāo)簽的模板中即可 Typecho_Plugin::factory('usr/themes/sidebar.php')->tagCloud(); "));
$form->addInput($compatibilityMode->addRule('enum', _t('必須選擇一個(gè)模式'), array(self::ENABLE_YES, self::ENABLE_NO)));
// 是否顯示沒(méi)使用的標(biāo)簽
$compatibilityMode = new Typecho_Widget_Helper_Form_Element_Radio('zero', array(
self::ZERO_SHOW => _t('顯示'),
self::ZERO_HIDE => _t('不顯示')
), self::ZERO_SHOW, _t('顯示沒(méi)使用的標(biāo)簽'), _t("默認(rèn)顯示所有標(biāo)簽,請(qǐng)根據(jù)自己需要進(jìn)行設(shè)置。"));
$form->addInput($compatibilityMode->addRule('enum', _t('必須選擇一個(gè)模式'), array(self::ZERO_SHOW, self::ZERO_HIDE)));
// 前臺(tái)顯示欄目標(biāo)題
$title = new Typecho_Widget_Helper_Form_Element_Text('title', NULL, '標(biāo)簽', _t('前臺(tái)顯示欄目標(biāo)題'));
$form->addInput($title);
// 最多顯示標(biāo)簽數(shù)量
$limit = new Typecho_Widget_Helper_Form_Element_Text('limit', NULL, '20', _t('最多顯示標(biāo)簽數(shù)量'));
$form->addInput($limit);
}
/**
* 個(gè)人用戶的配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form
* @return void
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
/**
* 插件實(shí)現(xiàn)方法
*
* @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;
}
// 查找滿足條件的標(biāo)簽
$tags = Typecho_Widget::widget('Widget_Metas_Tag_Cloud', array(
'sort' => 'count',
'ignoreZeroCount' => $zero == self::ZERO_HIDE ? true : false,
'desc' => true,
'limit' => $limit
));
// 是否有標(biāo)簽
if ($tags->have()) {
self::render($title, $tags);
}
}
/**
* 輸出Html標(biāo)簽
*
* @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;
}
}
本文首發(fā)于馬燕龍個(gè)人博客,歡迎分享,轉(zhuǎn)載請(qǐng)標(biāo)明出處。
馬燕龍個(gè)人博客:http://www.mayanlong.com
馬燕龍個(gè)人微博:http://weibo.com/imayanlong
馬燕龍Github主頁(yè):https://github.com/yanlongma