joomla源代码探析(三) 万源之源

来源:互联网 发布:大数据广告投放 编辑:程序博客网 时间:2024/04/28 20:43

万源之源,这个名字非常有意思,老是让我想起小时候,玩的那种圆圆的纸牌,在土地中玩的,用自己的纸牌把别人的打翻了就赢了别人的,大部分都是纸壳剪的,偶尔也有用油毡纸,或者石棉纸做的,通常把这种好的牌或者那种连赢了几次的纸牌作为自己的镇家宝贝,在牌背面上写上“保家之宝”,也有“宝家之宝”,我曾经留了几张一直到高三毕业。哈哈哈!现在不知道去那里了,也许父母还留着吧。

documentroot/index.php ,以及 template/***/index.php ,可以称为万源之源,因为可以说所有的页面都是这两个文件的成果。

/index.php 是所有页面程序的起点,让我们来看看这个文件到底做了什么?

 

define( '_JEXEC', 1 );   //标志这是一个根文件

define('JPATH_BASE', dirname(__FILE__) );  //取得Document root,就是 /index.php所在的绝对路径
define( 'DS', DIRECTORY_SEPARATOR ); // 定义目录分隔符

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); //defines.php定义了一些目录变量,以后详细的写
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

//framework.php是另一个非常重要的文件,在framework.php读入了config.php中定义的变量,同时
//framework中引入了一些的基础类,例如JFactory,JUser等等

//全局对象,工厂类JFactory,JFactory符合设计模式中的工厂模式,基本生成的对象大部分是单例模式,接下来我详细描述JFactory,JFactory 在/libraries/joomla/factory.php中定义,
$mainframe =& JFactory::getApplication('site');

//取得JApplication 对象,JApplication是一个工厂类,提供了一些指定对象的生成,并提供了一系列的api函数

//application初始化过程,设置语言,并缺的editor的设置,并生成Juser对象
$mainframe->initialise();

//引入system 组的插件
JPluginHelper::importPlugin('system');

// 触发初始化完毕后定义的pluging响应事件
$mainframe->triggerEvent('onAfterInitialise');

//route()函数,根据url生成进行解析,设置JRequest 
$mainframe->route();

// authorization
$Itemid = JRequest::getInt( 'Itemid');
$mainframe->authorize($Itemid);

//触发route后plugin
JDEBUG ? $_PROFILER->mark('afterRoute') : null;
$mainframe->triggerEvent('onAfterRoute');

//根据JRequest的的option参数,dispatch到那个组件,也就决定页面的内容部分是那个组件生成
$option = JRequest::getCmd('option');
$mainframe->dispatch($option);

//触发dispatch后的plugin
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;
$mainframe->triggerEvent('onAfterDispatch');

//页面的渲染过程,生成整个页面html
$mainframe->render();

// trigger the onAfterDisplay events
JDEBUG ? $_PROFILER->mark('afterRender') : null;
$mainframe->triggerEvent('onAfterRender');

echo JResponse::toString($mainframe->getCfg('gzip'));

 以上是 /index.php的内容,从这个index.php的引出了几个重要的文件需要我们去注意

/includes/defines.php
/includes/framework.php
/libraries/joomla/application.php
/libraries/joomla/factory.php

接下来我们主要看看这些文件