Typecho GithubCorner小插件开发记录—从Hello World开始
之前一直想要了解Typecho插件开发的相关知识,本文将就自己开发的Github小插件来介绍如何开发一款简单的插件。
本文会简单介绍插件实现原理相关的内容来帮助大家理解,但由于篇幅限制不会过于深入探究。如果后续有机会将逐步整理Typecho的插件机制的博文。
其实Typecho中本身就包含了一个基础的插件原型Hello World
。这个插件的功能非常直观,就是在管理面板的导航栏中显示配置的一句话。程序开发当中最快的学习方法就是根据一个模板案例来修改,这次我们也是如此。
找到typecho代码树种的HelloWorld
插件,插件文件夹目录是typecho/usr/plugins/HelloWorld
进入目录我们可以看到这个简单插件仅包含Plugin.php
单个源文件。这对我们来说是巨大的福音,只有一个文件,更加便于梳理结构。更让人高兴的是,这里面居然还只有一个类Plugins
实现了PluginInterface
接口。那么我们的阅读思路就很明确了,先看PluginInterface
中声明的接口,然后再看源码中的实现来了解插件的工作机制。
从下面的源代码可以看到接口中分别提供了activate
, deactivate
, config
, personalConfig
等四个函数分别用于激活、禁用、管理面板配置和个人用户配置等功能。插件只需要实现说到的四个函数,其余的系统的插件机制会为我们管理。
/**
* 插件接口
*
* @package Plugin
* @abstract
*/
interface PluginInterface
{
/**
* 启用插件方法,如果启用失败,直接抛出异常
*
* @static
* @access public
* @return void
*/
public static function activate();
/**
* 禁用插件方法,如果禁用失败,直接抛出异常
*
* @static
* @access public
* @return void
*/
public static function deactivate();
/**
* 获取插件配置面板
*
* @param Form $form 配置面板
*/
public static function config(Form $form);
/**
* 个人用户的配置面板
*
* @param Form $form
*/
public static function personalConfig(Form $form);
}
再去看HelloWorld
这个插件的实现。由于这是个管理面板的插件,因此并没有实现个人用户的配置。我们后续写插件大概率也用不到,因为暂时只考虑单用户的博客。而禁用插件时也不需要做什么特殊操作,因此我们需要关注的仅有activate
和config
两个函数。
先来看activate
函数,也非常的精炼,将类中的定义的render
函数注册到管理菜单的navBar
接口上。在插件启用后,渲染管理页面的菜单栏是就会调用插件中的render
函数。
紧接着我们就去看render
函数到底都做了些什么事情,不难发现这个函数里也只做了意见事情,就是向浏览器写入了一个<span>
标签。值得注意的是,这个标签显示的内容还是动态的,来自于Options::alloc()->plugin('HelloWorld')->word
。
那么这个word
是哪来的呢?还记得我们的config
函数吗?在那里定义了一个插件的配置,而word
对象正与我们设置的文本输入框的名称对应。在插件机制中所有config
中配置的设置都会在加载调用插件前被加载到Options::alloc()
这个配置类中方便调用。
/**
* Hello World
*
* @package HelloWorld
* @author qining
* @version 1.0.0
* @link http://typecho.org
*/
class Plugin implements PluginInterface
{
/**
* 激活插件方法,如果激活失败,直接抛出异常
*/
public static function activate()
{
\Typecho\Plugin::factory('admin/menu.php')->navBar = __CLASS__ . '::render';
}
/**
* 禁用插件方法,如果禁用失败,直接抛出异常
*/
public static function deactivate()
{
}
/**
* 获取插件配置面板
*
* @param Form $form 配置面板
*/
public static function config(Form $form)
{
/** 分类名称 */
$name = new Text('word', null, 'Hello World', _t('说点什么'));
$form->addInput($name);
}
/**
* 个人用户的配置面板
*
* @param Form $form
*/
public static function personalConfig(Form $form)
{
}
/**
* 插件实现方法
*
* @access public
* @return void
*/
public static function render()
{
echo '<span class="message success">'
. htmlspecialchars(Options::alloc()->plugin('HelloWorld')->word)
. '</span>';
}
}
总结
开发一个Typecho
插件的基本要素
- 实现
PluginInterface
中的接口 - 在插件的激活函数中,将功能函数绑定到对应的句柄回调上,可以使用的功能见:Typecho插件接口及功能列表
- 实现在功能函数中使用到的必要配置参数设置表单
参考链接
感谢扫码支持