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

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, 笔记

typecho 一天下来的心得

自从评论里有人推荐typecho后,自己也下载了看了一下。确实,代码很漂亮,最关键的是注释是中文的。这点很让人心情愉快。虽然wordpress的英文注释也很容易懂,但毕竟不是自己的语言,总有点心里障碍。

前天晚上下载了一份看看,昨天在参考官方的一些插件的同时,自己临摹了两个。一个是搜索引擎来源关键字高亮,一个就是微博上有朋友提出的内容分页。

东西嘛。都扔在http://neatstudio.com/typecho/上面。还没有正式完成,只能算是一个测试版吧。

下面就是一些心得,希望可以给其他开发人员带来一点帮助,当然我这个只是看了一天的心得,与其他人员的相比应该是差很多了。但分享总比藏着好吧?

1、文档中Typecho::widget('Options') 错误,应当为:Typecho_Widget::widget('Widget_Options');
2、全局地址为:Typecho_Common::url('index.php', Typecho_Widget::widget('Widget_Options')->siteUrl) ,再与Router组合
3、Router,当前名称为:Typecho_Router::$current
4、针对内容做插件,需要在activate中加入:
    Typecho_Plugin::factory('Widget_Abstract_Contents')->content = array('HelloWorld_Plugin', 'parse');
    Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('HelloWorld_Plugin', 'parse'); // contentEx好象是处理过的字符串。
5、针对摘要处理(摘要是用在列表中的),如同4一样,只是contentEx换 为excerptEx
    由于4、5都没有官方说明,但是,在官方的插件示例中,采用的是contentEx,而且源码中,___content和___excerpt的最后return都是有Ex的版本。(这两个函数在入口时都是先对没有Ex的的变量作了处理,具体还是需要sluke的鉴定)
6、其实4、5的功能,都能算是代码植入吧,在后台页面中,更容易被植入,比如Typecho_Plugin::factory("admin/post.php")->content = array('classname','functionname'),你只需要把源文件打开,看看哪里有能够植入的类就行了。就象post.php和page.php中都有一个richEdit,就是专门等着别人为text这个textarea进行扩展的。

Tags: typecho, wordpress, sablog, 文档, 心得

sablog 1.6小bug

有几次遇到这个bug了。不过。说来也不算太大的BUG
重现:发表博客,选择附件。
OK,你发现附件选错了,然后删除,重选附件,并插入内容,这时候应该是 localfile=2 了。

这时候发表后,你会发现附件并没有被正确的在内容中替换。而是当成附件了。

让我们重试一下吧:
[localfile=2]

图片附件(缩略图):
大小: 1.55 M
尺寸: 500 x 375
浏览: 2224 次
点击打开新窗口浏览全图

Tags: sablog, bug, 上传附件

TCPDF:php classes for generating pdf documents

手册中介绍PHP生成PDF用的是fpdf,网上也有一些代码其于Fpdf的看起来好象都不错,但是前提是有fpdf。。因此后来都放弃了。
这一个php class我没有试过,但是看上去好象不错,因为:1开源2原生PHP,不用组件(听说,没试过。)主要是看它可以直接把网页生成PDF,因为他支持html,xhtml,css。所以感觉不错

TCPDF is an Open Source PHP class for generating PDF documents.
TCPDF project was started in 2002 and now it is freely used all over the world by millions of people. TCPDF is a Free Libre Open Source Software (FLOSS).

官方的说明也很详细:

Main Features:

  • no external libraries are required for the basic functions;(看来也只是针对基本功能,不过我想应该够了。)
  • all ISO page formats, custom page formats, custom margins and units of measure;
  • UTF-8 Unicode and Right-To-Left languages;
  • TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts;
  • Font subsetting;
  • methods to publish some XHTML + CSS code, Javascript and Forms;
  • images, graphic (geometric figures) and transformation methods;
  • native support for JPEG, PNG and SVG images;
  • 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, QR-Code, PDF417;
  • Grayscale, RGB, CMYK, Spot Colors and Transparencies;
  • automatic page header and footer management;
  • document encryption and digital signature certifications;
  • transactions to UNDO commands;
  • PDF annotations, including links, text and file attachments;
  • text rendering modes (fill, stroke and clipping);
  • multiple columns mode;
  • bookmarks and table of content;
  • text hyphenation;
  • automatic page break, line break and text alignments including justification;
  • automatic page numbering and page groups;
  • move and delete pages;
  • page compression.

这里也还有一些例子,有61个之多:

  1. Simple PDF with default Header and Footer: [PHP] [PDF]
  2. Simple PDF without Header and Footer: [PHP] [PDF]
  3. Custom Header and Footer: [PHP] [PDF]
  4. Cell stretching: [PHP] [PDF]
  5. Multicell: [PHP] [PDF]
  6. WriteHTML and RTL support: [PHP] [PDF]
  7. Independent columns with WriteHTMLCell: [PHP] [PDF]
  8. External UTF-8 text file: [PHP] [PDF]
  9. Image: [PHP] [PDF]
  10. Multiple columns: [PHP] [PDF]
  11. Colored Tables: [PHP] [PDF]
  12. Graphic Functions: [PHP] [PDF]
  13. Graphic Transformations: [PHP] [PDF]
  14. Javascript and Forms: [PHP] [PDF]
  15. Bookmarks (Table of Content): [PHP] [PDF]
  16. Document Encryption: [PHP] [PDF]
  17. Independent columns with MultiCell: [PHP] [PDF]
  18. Persian and Arabic language on RTL document: [PHP] [PDF]
  19. Non unicode / Alternative config file: [PHP] [PDF]
  20. Multicell complex alignment: [PHP] [PDF]
  21. writeHTML alignment: [PHP] [PDF]
  22. CMYK colors: [PHP] [PDF]
  23. Page Groups: [PHP] [PDF]
  24. Object Visibility: [PHP] [PDF]
  25. Object Transparency: [PHP] [PDF]
  26. Text Clipping: [PHP] [PDF]
  27. Barcodes: [PHP] [PDF]
  28. Multiple page formats: [PHP] [PDF]
  29. Set PDF viewer display preferences: [PHP] [PDF]
  30. Colour gradients: [PHP] [PDF]
  31. Pie Chart Graphic: [PHP] [PDF]
  32. EPS/AI vectorial image: [PHP] [PDF]
  33. Mixed font types (TrueType Unicode, core, CID-0): [PHP] [PDF]
  34. Clipping masks: [PHP] [PDF]
  35. Line styles with cells and multicells: [PHP] [PDF]
  36. Text Annotations: [PHP] [PDF]
  37. Spot Colors: [PHP] [PDF]
  38. NON-embedded CID-0 CJK font: [PHP] [PDF]
  39. HTML Justification: [PHP] [PDF]
  40. Booklet (double-sided pages): [PHP] [PDF]
  41. File attachment: [PHP] [PDF]
  42. Image with Alpha Channel Transparency: [PHP] [PDF]
  43. Disk caching: [PHP] [PDF]
  44. Move, Copy and delete page: [PHP] [PDF]
  45. Table Of Content with Bookmarks: [PHP] [PDF]
  46. Text hyphenation: [PHP] [PDF]
  47. Transactions and UNDO: [PHP] [PDF]
  48. Table header and rowspan: [PHP] [PDF]
  49. TCPDF methods in HTML: [PHP] [PDF]
  50. 2D Barcode (QR Code): [PHP] [PDF]
  51. Full page background: [PHP] [PDF]
  52. Digital Signature Certification: [PHP] [PDF]
  53. Javascript functions: [PHP] [PDF]
  54. XHTML Form: [PHP] [PDF]
  55. Font Dump: [PHP] [PDF]
  56. Crop Marks and Registration Marks: [PHP] [PDF]
  57. Cell vertical alignments: [PHP] [PDF]
  58. SVG Image: [PHP] [PDF]
  59. Table Of Content with HTML templates: [PHP] [PDF]
  60. Advanced page settings: [PHP] [PDF]
  61. XHTML + CSS: [PHP] [PDF]

可以尝试试用一下吧。

Tags: tcpdf, fpdf, pdf

zen coding for editplus

前段时间我推荐了zen coding,并为此用上了notepad++,感觉在作网页的时候还行。而且,我的同事用dreamweaver的,也用上了它,感觉同样很爽。比如他输入:

XML/HTML代码
  1. div#page>(div#header>ul#nav>li*4>a)+(div#page>(h1>span)+p*2)+div#footer 
生成如下页面:
XML/HTML代码
  1. <div id="page">  
  2.     <div id="header">  
  3.         <ul id="nav">  
  4.             <li><a href=""></a></li>  
  5.             <li><a href=""></a></li>  
  6.             <li><a href=""></a></li>  
  7.             <li><a href=""></a></li>  
  8.         </ul>  
  9.     </div>  
  10.     <div id="page">  
  11.         <h1><span></span></h1>  
  12.         <p></p>  
  13.         <p></p>  
  14.     </div>  
  15.     <div id="footer"></div>  
  16. </div>  
早上推荐给小茗时,他说,Zen coding有for editplus的了。欣欣下载下来。运行后却发现,生成后的代码与官方不一样,看来还是有待改进啊,zen coding for editplus生成的代码是:
XML/HTML代码
  1.   <div id="page"></div>  
  2. <div id="header">  
  3.     <ul id="nav">  
  4.         <li>  
  5.             <a href=""></a><div id="page"></div>  
  6.             <h1>  
  7.                 <span></span><p></p>  
  8.                 <p></p>  
  9.                 <div id="footer"></div>  
  10.             </h1>  
  11.         </li>  
  12.         <li>  
  13.             <a href=""></a><div id="page"></div>  
  14.             <h1>  
  15.                 <span></span><p></p>  
  16.                 <p></p>  
  17.                 <div id="footer"></div>  
  18.             </h1>  
  19.         </li>  
  20.         <li>  
  21.             <a href=""></a><div id="page"></div>  
  22.             <h1>  
  23.                 <span></span><p></p>  
  24.                 <p></p>  
  25.                 <div id="footer"></div>  
  26.             </h1>  
  27.         </li>  
  28.         <li>  
  29.             <a href=""></a><div id="page"></div>  
  30.             <h1>  
  31.                 <span></span><p></p>  
  32.                 <p></p>  
  33.                 <div id="footer"></div>  
  34.             </h1>  
  35.         </li>  
  36.     </ul>  
  37. </div>  
这个与标准的偏 差实在是太大了。。。不过。在简单的情况下,还是可以使用的。将就着喽。总比没有的好。

下载地址为:http://www.vfresh.org/w3c/914

Tags: zencoding, editplus, notepad++