标签 plugin 下的文章
typecho插件编写教程1 - 从HelloWorld说起
最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的不断深入,老高也慢慢上手了,于是总结出此篇编写教程分享给大家!
如果你对typecho的源码有兴趣,可以参考老高的系列文章
typecho源代码解析1 - 系统初始化 typecho源代码解析2 - 插件机制 typecho源代码解析3 - 路由分发 typecho源代码解析4 - 业务逻辑
文章目录 Table Of Contents for Typecho
百度sitemap提交插件 for Typecho
几经开发,这款工具终于可以进入测试阶段。
其主要内容是向百度提交sitemap,参考了站长工具里wp的插件制作。
老高目测对SEO还是有一些用处的。
目前没有做分页sitemap,如果大家有这个需求,老高会考虑加上。
typecho源代码解析2 - 插件机制
上次我们讲到了系统完成了初始化,这一篇我们会更加深入typecho,同时会介绍typecho的插件机制。
插件点
热心的读者肯定会问,什么是插件点?当然你会不知道,因为这个名词是老高想出来的ಠ౪ಠ,本次要讲的插件机制的基础知识可以参考我的另一片博文thinkphp钩子的实现。钩子
这个词比较粗俗,其实高大上的叫法就是插件,而老高自创的插件点就是事件的意思。
index.php中Typecho_Plugin::factory('index.php')->begin()
,其实就是通知挂载到'index.php'这个事件的插件可以执行了。
具体流程如下:
Typecho_Plugin::factory('index.php')返回了Typecho_Plugin的实例,构造函数中确定了唯一的句柄,即'index.php',紧接着执行了该实例的begin()
方法,由于该方法不存在,所以调用了魔术方法__call
,最后由__call
方法执行所有在这个插件点挂载的插件。
__call
方法源代码:
public function __call($component, $args)
{
$component = $this->_handle . ':' . $component;
$last = count($args);
$args[$last] = $last > 0 ? $args[0] : false;
if (isset(self::$_plugins['handles'][$component])) {
$args[$last] = NULL;
$this->_signal = true;
foreach (self::$_plugins['handles'][$component] as $callback) {
$args[$last] = call_user_func_array($callback, $args);
}
}
return $args[$last];
}
关键点:
- __call是可以带参数的
-
$callback
是二位数组,一个类名,一个方法名 - 在该类
init
方法中,activated和handles是分开保存的,因为activated以插件名做键名,而handles以插件点为键,目的不同 - 插件的关联信息保存在数据库中
typecho_options
表中的plugins
- 需要禁用再启用才能使修改后的插件生效
当完成了第一个插件点的挂载后,程序开始路由分发。
码字不易,转载请注明出处。