手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

JianHua Zhang的Typecho阅读笔记三:插件机制

首页 > PHP >

文章来自:http://blog.csdn.net/jh_zzz/archive/2010/01/11/5173876.aspx
由于我也正在看 typecho这个玩意所以,就记录下来。虽然我一天下来,也看了不少代码,但毕竟没有深读过。对于流程啥的,还没有开始关心,只是为了写而写。

第三篇:插件机制

index.php 为例:

/** 初始化组件 */

Typecho_Widget:: widget('Widget_Init' );

 

Init execute 中会初始化 Typecho_Plugin ,这里 $options -> plugins 是从数据库读出来后反序列化的:

Typecho_Plugin:: init($options -> plugins);

init 中分别将 plugins 中的 activated handles

PHP代码
  1. $component  =  $this -> _handle .  ':'  .  $component ;  
  2. $last = count($args );  
  3. $args [$last ] = $last > 0 ? $args [0 ] : false ;   
  4.   
  5. if (isset (self:: $_plugins ['handles' ][$component ])) {  
  6.     $args [$last ] = NULL ;  
  7.     $this -> _signal = true ;  
  8.     foreach (self:: $_plugins ['handles' ][$component ] as $callback ) {  
  9.         $args [$last ] = call_user_func_array($callback , $args );  
  10.     }  
  11. }   

__call 查找对应 index.php:begin Typecho_Plugin ,如果找到的话,就会调用相应的方法。例如如果找到的是 HelloWorld_Plugin ,则 HelloWorld_Plugin.render() 会被执行。

  (

  [0] => HelloWorld_Plugin

  [1] => render

)

 

简单说一下 Plugin 是如何加载的,在 config.inc.php 中首先设置了包含路径,插件路径也在其中:

/** 设置包含路径 */

@ set_include_path(get_include_path() . PATH_SEPARATOR .

__TYPECHO_ROOT_DIR__ . '/var' . PATH_SEPARATOR .

__TYPECHO_ROOT_DIR__ . __TYPECHO_PLUGIN_DIR__ );

 

HelloWorld_Plugin 此时尚未被加载,所以当执行到 HelloWorld_Plugin.render() Typecho_Common::__autoLoad 函数被执行,这里会自动加载指定的插件文件:

@ include_once str_replace('_' , '/' , $className ) . '.php' ;

例如对于 HelloWorld_Plugin ,文件就是 HelloWorld\Plugin.php ,因为 usr/plugin 目录已经在包含的路径中,所以这个文件可以正常加 载。

 

当初我学习 php 的时候还是 php3 ,现在一些新特性我都不知道,这一段我看了半天才搞 清楚,这次读这些代码了解了不少 php 的新特性:)

---EOF---

至此,JianHua Zhang的三篇博客都已经转载完毕,但是对于最后这个插件,我是建议在开发的时候,Typecho_Plugin类的__call方法里加上一行:

echo $component . '<br>';

这样可以在显示页面的时候让你了解你每块区域加载了哪些插件,也就是说,这些插件位置,是可以被你注入代码的。OK。了解了这一点,你可以根据你想要的效果为各个地方加上你的代码。

 





本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: typecho, 笔记

« 上一篇 | 下一篇 »

只显示10条记录相关文章

typecho 插件:内容分页SplitArchivePage (浏览: 44473, 评论: 14)
利用.htaccess绑定域名到子目录 (浏览: 30241, 评论: 2)
typecho 插件开发(一) (浏览: 28343, 评论: 6)
了解Typecho页面中可以被注入对象的地方 (浏览: 25893, 评论: 4)
typecho 插件:搜索来源关键字高亮 (浏览: 25541, 评论: 3)
将typecho移植到bae (浏览: 25086, 评论: 2)
typecho 一天下来的心得 (浏览: 24569, 评论: 0)
typecho 文章附件的小BUG (浏览: 24536, 评论: 1)
dedecms 笔记 (浏览: 24489, 评论: 1)
typecho 插件开发(二) (浏览: 22126, 评论: 3)

发表评论

评论内容 (必填):