Typecho - MyTagCloud标签云插件
一、前言:
标签云是博客、CMS类系统的常见功能,读者可以根据标签快速的查找和浏览自己喜欢的文章。个人很喜欢Typecho的简洁,但对于后台不能控制前台标签栏目的显示还是略表遗憾。令人高兴的是Typecho的插件机制可以让Typecho Fans很容易的开发出自己想要的插件,于是决定自己开发一个标签云插件。
该插件已被Typecho官方merge。
二、资料:
- Typecho官方文档,在此不做过多介绍。
三、效果:
四、使用帮助:
- 下载插件
- 将插件上传到/usr/plugins/目录
- 在需要使用标签云的模板中放入如下PHP代码 Typecho_Plugin::factory(‘usr/themes/sidebar.php’)->tagCloud();
- 登陆后台,在菜单“控制台->插件”中启用插件,并根据自己需求进行配置即可轻松使用
- 如果标签云模板结构不同,重写插件中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/yanlongma
Typecho - MyTagCloud标签云插件的更多相关文章
- Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_138 其实很早以前就想搞一套完备的标签云架构了,迫于没有时间(其实就是懒),一直就没有弄出来完整的代码,说到底标签对于网站来说还是 ...
- JQCloud: 一个前端生成美化标签云的简单JQuery插件
本文原文地址:https://jiang-hao.com/articles/2018/blog-JQCloud.html 因为博客需要,发现了一个生成美化简约风格的标签云的JQuery插件. 官网地址 ...
- 很不错标签云js插件
在蓝色看到有需要标签云的球形效果,我记得之前在网上见到过,印象比较深刻,就找出地址发给他了,接下来却还有人需要这个效果的JQuery插件,网上好像也有,但是我看现在这个就不错,就想想自己改成jquer ...
- 基于纯 CSS3 技术实现美观的标签云效果
标签云是博客的标配功能,能够清晰的呈现博客的各个关键词和主题.在这个效果中,您将学习如何使用 CSS3 技术创建一个效果精美的标签云效果. 作为实验项目,使用了 CSS3 渐变,阴影和最重要的的 CS ...
- SP2010 3D标签云Web部分--很酷的效果,强烈推荐!!
SP2010 3D标签云Web部分--很酷的效果.强烈推荐! ! 项目描述叙事 基于简单Flash的3D标签云Web部件.SP Server 2010使用. 建立在内置标签云Web部件 ...
- WordPress彩色背景标签云实现
网上有很多的这种效果,但是却几乎没有什么关于彩色背景标签云的教程,网上讲的基本都是让标签云的字体变成彩色而不是背景,我觉得让字体变成彩色有的标签会看不清楚,而且也没有让背景变成彩色好看.先看看效果: ...
- jQuery 动态标签生成插件
前言: 最近对js的插件封装特别感兴趣,无耐就目前的技术想做到js的完全封装,还是有一定困难,就基于jQuery封装了一个小的插件,而且是基于对象级开发的,不是添加全局方法.高深的语法几乎没有,就有一 ...
- Android自定义控件之自定义ViewGroup实现标签云
前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...
- 原生js文字标签云上下滚动播放
效果:http://hovertree.com/texiao/js/25/ 效果图: 代码如下: <!DOCTYPE html> <html> <head>< ...
随机推荐
- JavaScript重新介绍
本文转载自 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript 引言 为什么 ...
- SQL Server里书签查找的性能伤害
在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题.在今天的文章里,我想从性能角度进一步谈下书签查找,还有它们如何拉低你整个SQL Server性能. 书签查找—— ...
- 首个写博客的Android任务
任务1 单击按钮图片选择器 使用TextView,RadioGroup,RadioButton完成. 设置单击按钮选择显示花朵. 首先设置了页面布局 <LinearLayout xmlns:an ...
- shiro权限控制
1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...
- ECMA script 6的新特性
简单介绍下ES6的新特性: (1)箭头操作符 :简化了函数的书写 (2)类的支持:引入了class关键字,对象的创建,继承更加直观,父类方法的调用,实例化,构造函数等概念更加形象化. (3)增强的对象 ...
- JavaScript高级程序设计---学习笔记(一)
今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...
- 【转】一个小工具类,利用shareObject把数据缓存
原文链接:http://bbs.9ria.com/thread-284082-1-2.html 之前做一个数据缓存,就顺便把写入缓存,清除缓存,获取缓存都整理了一下,其中也做了些参考,个人水平有限,有 ...
- 3.Java集合总结系列:Set接口及其实现
一.Set接口 Set 接口与 List 接口相比没有那么多操作方法,比如: 1.List 接口能直接设置或获取某个元素的值,而Set接口不能. 2.List 接口能直接在指定位置删除.增加元素,而S ...
- hive 动态分区数设置
当对hive分区未做设置时,报错如下: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: ...
- JAVA加密算法系列-DESCoder
package ***; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher ...