手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:命名空间

JianHua Zhang的Typecho阅读笔记一:页面渲染及路由机制

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

第一篇:页面渲染及路由机制

index.php 开始看,

 

/** 初始化组件 */

Typecho_Widget:: widget('Widget_Init' );

 

Typecho_Widget:: widget 函数,查找 Widget\Init.php Widget 下的文件都是从 Typecho_Widget 派生的,这里创建该对象实例,并将相关的 Request Response 对象作为参数传递过去,然后调用该对象的 execute 方法。

 

看一下 Init 中的 execute ,首先会初始化一些参数,重点看看 MVC 架构的路由:

Typecho_Router:: setPathInfo($this -> request-> getPathInfo());

Typecho_Router:: setRoutes($options -> routingTable);

首先设置路径,然后初始化路由, $options -> routingTable 默认值是在安装时写在数据库中的,运行时再读出来, Typecho_Router setRoutes 函数调用了 Typecho_Router_Parser parse 函数, parse 函数遍历整个 routingTable 数组,将处理后的路由数组返回给 Typecho_Router ,保存在 $_routingTable

PHP代码
  1. if  (! $validated  &&  ! emptyempty ($this -> _archiveSlug)) {  
  2.     $themeFile = $this -> _archiveType . '/' . $this -> _archiveSlug . '.php' ;  
  3.     if (file_exists($themeDir . $themeFile )) {  
  4.         $this -> _themeFile = $themeFile ;  
  5.         $validated = true ;  
  6.     }  
  7. }   

 

这里需要看一下 _archiveType _archiveSlug 是怎么来的:

Widget_Archived execute 函数中会根据 $this -> parameter-> type 执行相应的 handler

PHP代码
  1. if  (isset ($handles [$this -> parameter-> type])) {  
  2.     $handle = $handles [$this -> parameter-> type];  
  3.     $this -> {$handle }($select , $hasPushed );  
  4. else {  
  5.     $hasPushed = $this -> pluginHandle()-> handle($this -> parameter-> type, $this , $select );  
  6. }   

 

$this -> parameter-> type 这个变量是在构造函数中赋值的 :

$this -> parameter-> type = Typecho_Router:: $current ;

Typecho_Router:: $current 根据路由表可以查到对应于 index.php 就是 index

 

所以对于上面标黄的代码对应于 index.php 最终执行的是的是 $handles [‘index’] 对应的 handle ,就是 indexHandle 。可以看到对于其他的 Handle 一般都会设置 _archiveType _archiveSlug 变量, indexHandle 没有,因为 _archiveType 默认就是 index ,所以在 index.php _archiveType 等于 index _archiveSlug 为空。

 

所以根据前面 render 函数中的代码,最终是找到对应于 $themeDir 下的 $this -> _archiveType . '/' . $this -> _archiveSlug . '.php' 文件,然后直接包含进来,我们看到的就是这个文件的输出了。

 

/** 注册一个结束插件 */

Typecho_Plugin:: factory('index.php' )-> end();

Tags: typecho, 笔记

有趣的输入法细节

apple4.us上今天贴出来一篇:

XML/HTML代码
  1. 刚才看东西,看到「揭橥」一词,突然想起前两天听说 Snow Leopard 的拼音中添加了一个小功能:如何拼写罕见字。  
  2.   
  3. 比如「橥」,如果你不认识这个字,怎么打出来?  
  4.   
  5. Snow Leopard 的拼音提供了这样一种选择:先拆字,打 zhu mu 两字,然后按 shift+ 空格,系统会自动写出「橥」来。  
  6.   
  7. 是个不会太多用、但贴心的功能。而我此前没有听说过其它中文的拼音系统有这样的功能(如果有,请指正),为什么?  

结果回复纷纷,有人说搜狗就可以。。。由于我是用五笔的,所以我试不出。
回复中说:zhu mu输入后可以显示“橥”,但我试了一下,直接输入 zhu 也能显示,只是要翻页,而且要很多页。我没有用过snow leopard,所以我不知道与它比起来效果如何?再加上,我用的是五笔输入法中的纯拼音输入。或许与拼音输入又不一样。所以我也没有办法测试。。

不过。这样的贴心功能,确实很不错。(如果实在不会打,以前的老金山词霸,有个偏旁部首检字的。直接去里面翻字典就行了。哈哈)

Tags: 苹果, 搜狗