Typecho源码分析(6)
上回说到index.php
这个文件里,会初始化组件,就是Widget
。然后分析了这个Widget干了些什么。接下来,其实还有三行,但这三行,是初始化插件和路由器的。
但是呢,暂时先不钻到这个黑洞里去了,因为这个事太复杂, 不如先看看theme,这个比较简单。而且更进一步了解Widget
是干什么的。
好, 主题在哪里?在/usr
这个目录下,有2个目录,plugins
和themes
。Typecho
自带一个default
主题,就是/usr/thems/default
这个目录。
在默认主题里,显然是首先看index.php
,注意,完整路径是/usr/thems/default/index.php
。这个文件里包含了一些其他文件,header.php
,footer.php
和sidebar.php
。注意看这个用的是这也一个函数<?php $this->need('header.php')
。
那么问题来了,这个关键字$this
是啥?
如果你有基本的面向对象的知识的话,就会知道,这个$this
是某个对象(object
),是哪个对象呢?
其实至此为止,我也不知道。但忘了从哪里看来的,我记得是这个class,Widget_Archive
。这个命名有点古怪哈,但其实就是这个class,具体文件是/var/Widget/Archive.php
。
可以看到,这个类,有很多函数,比如header
, footer
等等,都可以在这个主题里看得到。
但这个类,首先是命名,不好,最好是Widget_Post
之类的,能一眼看出来干嘛的,对吧。
其次,这个类最大的问题是做了很多view
层应该做的事。注意,我是在用MVC
的思维方式来看待这个类的。
以我个人浅薄的理解,MVC
里的M
,其实就是Model
,只负责向View
层传递数据,至于View
层是专职展示数据的。至于怎么展示这个数据,那是另外一件事了。
所以在XinXin Shop 鑫鑫小店
里,我一定会改造这个类,不仅要重命名,还要清理一些原本应该由View
层做的事,比如这个header
和footer
,以及一些其他的东西。
总之呢,切勿盲目崇拜,觉得人家这开源十多年的项目就全是精华,正所谓尽信书不如无书
。总体上当然是非常优秀的,但毕竟是老项目,必然会有一些历史遗留问题,所以可以重构的地方,也要相信自己的直觉。这点自信还是要有的。