上回说到index.php这个文件里,会初始化组件,就是Widget。然后分析了这个Widget干了些什么。接下来,其实还有三行,但这三行,是初始化插件和路由器的。

但是呢,暂时先不钻到这个黑洞里去了,因为这个事太复杂, 不如先看看theme,这个比较简单。而且更进一步了解Widget是干什么的。

好, 主题在哪里?在/usr这个目录下,有2个目录,pluginsthemesTypecho自带一个default主题,就是/usr/thems/default这个目录。

在默认主题里,显然是首先看index.php,注意,完整路径是/usr/thems/default/index.php。这个文件里包含了一些其他文件,header.phpfooter.phpsidebar.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层做的事,比如这个headerfooter,以及一些其他的东西。

总之呢,切勿盲目崇拜,觉得人家这开源十多年的项目就全是精华,正所谓尽信书不如无书。总体上当然是非常优秀的,但毕竟是老项目,必然会有一些历史遗留问题,所以可以重构的地方,也要相信自己的直觉。这点自信还是要有的。

标签: Typecho, 源码分析

添加新评论