Joomla3开发教程

Joomla组件的执行流程

在本节将简单的介绍一下Joomla的整个执行流程,介绍的重点包括但不限于包含的关键文件、调用的关键方法、触发的触发器等。如有不正确的地方,可以留言讨论。

joomla是一个单入口CMS文件,一切的请求都从index.php文件开始。我们将尝试介绍你输入一个joomla网站的地址,到如何生成页面的整个流程。

假设你输入的地址是 http://www.zmax99.com/index.php 或者 http://www.zmax99.com/index.php?option=com_zmaxshop&view=item&id=1  或者 http://www.zmax99.com/articles/test.html

只要您的网站是基于joomla搭建的,那么它开始请求的文件都是网站根目录下的index.php这个文件。

joomla组件执行流程图


componet

插件的描述图


 插件的描述图

 文字描述


当请求达到网站根目录下的 index.php 时,一个全新的Joomla执行周期开始了,其中包括:

导入定义文件
包括定义应用程序常量的文件,这些文件在应用程序及其扩展中广泛使用。
 

加载 Joomla 框架及其应用程序正常工作所需的所有基本类,框架还会检查是否有存在configuration.php这个配置文件,如果不存在那么就会重定向到 安装程序(installtion),开始安装一个新的Joomla 

创建JApplication 对象并且初始化,开始处理session状态(如果存在,怎使用现有的session,如果不存在则新建一个session)。

加载configuration.php这个配置文件,在这个文件中记录了数据库的连接信息。

调用路由器,路由器负责将 URL 转换为关联的命令数组,反之亦然。这些命令数组将作为url参数发送到PHP的$_GET超全局变量中。在参数数组中有一个重要的变量是option.这个变量决定了系统将会执行哪一个组件。

随着组件的执行,文档对象被创建。文档对象将需要展示的内容存储在内存中,在输出到浏览器之前,开发者可以依据需要动态的修改文档中的数据(也就是页面显示的内容)。系统会从数据库中读取中当前的模板设置,并且加载当前需要使用的模板。之后joomla将控制权完全交给组件,组件输出什么完全由组件自己决定。

接下来是页面的渲染,除了上一步的组件数据,模块和通知消息也被渲染并放置在它们在模板中定义的位置

最后一步是将页面输出到浏览器。

需要注意的是,在上述执行周期的各个阶段,都会调用插件事件点,从而允许各种事件干扰和扩展 Joomla 功能。

关键代码描述


进入入口点文件index.php

初始化(Initialisation)

  • 加载:defines.php
  • 加载:framework.php
    • 修改魔术引号和 Zend 兼容性的配置选项
    • 检查是否存在 configuration.php。不存在则重定向到安装目录的index.php(installation/index.php)
    • 加载: import.php
    • 加载: configuration.php
    • 设置PHP的错误报告模式
    • 初始化性能分析器(只有在检查后台设置了调试模式后启用)
    • 导入 joomla.application.menu (菜单相关的类)
    • 导入 joomla.user.user
    • 导入 joomla.environment.uri
    • 导入 joomla.html.html
    • 导入 joomla.utilities.utility
    • 导入 joomla.event.event
    • 导入 joomla.event.dispatcher
    • 导入 joomla.language.language
    • 导入 joomla.utilities.string
  • 性能分析器标记点:afterLoad
  • 设置全局的$mainframe变量,调用 JFactory::getApplication('site')
    • 调用 JApplication::getInstance 创建并且返回一个实例.
  • 调用 JSite::initialise 初始化应用程序application. 
  • 加载基础的语言文件
  • 调用 parent::initialise
    • 首先调用 JFactory::getUser (初始化用户对象)
      • 导入 joomla.user.user
      • 调用 JFactory::getSession 创建会话.
    • 基于用户的设置偏好加载编辑器
  •  调用 JPluginHelper::importPlugin('system') 导入系统插件
  • 性能分析器标记点: afterInitialise
  • 触发事件: onAfterInitialise

路由和认证(Routing and Authorisation)

  • 路由 URI: 调用 JSite::route
  • 调用 JSite::authorize
    • 检查当前的菜单项的访问级别. 如果未登录,则重定向。如果已登录且未授权,则停止
  • 性能分析器标记点: afterRoute
  • 触发事件: onAfterRoute

调度(Dispatching)

  • 调度组件: 调用 JSite::dispatch
  • 性能分析器标记点: afterDispatch
  • 触发事件: onAfterDispatch

渲染(Rendering)

  • 渲染页面: 调用 JSite::render
  • 性能分析器标记点: afterRender
  • 触发事件: onAfterRender
  • 输出: 调用 JResponse::toString (在这里可以设置是否压缩)


作者:张敏
原文:http://www.joomlachina.cn/shouce/doc/1916?article_id=2047

获取最新资讯

© 广州市番禺区新造草云信息技术咨询服务部版权所有。
粤ICP备13002429号.

Joomla系列教程

站内链接