分类 教程 下的文章

本来想继续分析Widget_Archive的,但是呢,这个类太复杂了,里面内容太多太杂。而且我希望的是,读完一段之后,就可以进行一些重构。所以读了这个类的代码后,暂时放一放,继续研究install.php

我其实一直好奇config.inc.php这个文件的来路,到底是怎么来的,但后来发现,你在install.php里搜索file_put_contents这个函数,其实会发现,就是把这个install.php文件的第1到31行代码了写入到这个新文件,然后把数据库连接配置也写入进去了。具体可以在这个安装文件里搜索初始化配置文件。如果如果要改造config.inc.php,比如写入更多的配置,可以改造第1到31行,并且修改下面的行数。

其实更重要的是,应该把这些代码都放到配置文件里, 并且在install.php里引入,然后再把数据库配置文件写入到新的配置里,比如config.db.php里。我会在鑫鑫小店里这么做。

上回说到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),是哪个对象呢?

- 阅读剩余部分 -

上回说到在config.inc.php文件里,执行了Typecho_Common::init()函数,自动加载了所有class,算是把Typecho启动起来了。

那么,接下来,就回到index.php文件里,接下来执行这个函数:

/** 初始化组件 */
Typecho_Widget::widget('Widget_Init');

这个函数做啥的呢?

- 阅读剩余部分 -

上回说到,在require 'Typecho/Common.php'文件后,立刻做了Typecho::init()这个操作。

这个从名字上来说,肯定就是启动Typecho了,但具体怎么启动呢?其实就是这样的代码:


class Typecho_Common {
  /**
  * 自动载入类
  *
  * @param $className
  */
 public static function __autoLoad($className)
 {
   @include_once str_replace(array('\\', '_'), '/', $className) . '.php';
 }

 /**
  * 程序初始化方法
  *
  * @access public
  * @return void
  */
 public static function init()
 {
   /** 设置自动载入函数 */
   spl_autoload_register(array('Typecho_Common', '__autoLoad'));
 
   // 删去了一些兼容性代码
   
   /** 设置异常截获函数 */
   set_exception_handler(array('Typecho_Common', 'exceptionHandle'));
 }
}

这代码啥意思呢?

- 阅读剩余部分 -

好,接着说怎么引入配置文件config.inc.php

这个文件是执行安装过程中,由程序生成的。所以有很多时候,安装会报错的一个原因,就是没有写入权限。

好,接下来,看这个配置文件干了什么。

首先是定义了一些全局变量,尤其是一些文件路径。比如:

/** 定义根目录 */
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));

/** 定义插件目录(相对路径) */
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');

/** 定义模板目录(相对路径) */
define('__TYPECHO_THEME_DIR__', '/usr/themes');

/** 后台路径(相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');

然后,再依据这些已经定义好的路径,来引入相应的文件(依赖),尤其是最关键的一个:

/** 载入API支持 */
require_once 'Typecho/Common.php';

/** 程序初始化 */
Typecho_Common::init();

初始化之后,会连接数据库。

那么,接下来有2个问题:

  • 根目录下,也没有Typecho这个目录啊,怎么引入的呢?
  • Typecho_Common::init()这行代码,到底初始化了哪些东西?

- 阅读剩余部分 -

上篇文章讲到,会引入一个config.inc.php文件,如果没有这个文件,就会开始执行安装步骤,install.php

关于怎么安装,这个事,暂且放一下。先看一下整体结构吧。
主要是这么几个目录和文件:

 - admin/
 - install/
 - usr/
 - var/
 - index.php
 - install.php

- 阅读剩余部分 -