Joomla 的執(zhí)行流程

2023-03-10 11:00 更新

在本節(jié)將簡單的介紹一下Joomla的整個(gè)執(zhí)行流程,介紹的重點(diǎn)包括但不限于包含的關(guān)鍵文件、調(diào)用的關(guān)鍵方法、觸發(fā)的觸發(fā)器等。如有不正確的地方,可以留言討論。

joomla是一個(gè)單入口CMS文件,一切的請(qǐng)求都從index.php文件開始。我們將嘗試介紹你輸入一個(gè)joomla網(wǎng)站的地址,到如何生成頁面的整個(gè)流程。

假設(shè)你輸入的地址是 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

只要您的網(wǎng)站是基于joomla搭建的,那么它開始請(qǐng)求的文件都是網(wǎng)站根目錄下的index.php這個(gè)文件。

 

joomla執(zhí)行流程的時(shí)序圖

Mvc_part_1_big.png

 

 文字描述

當(dāng)請(qǐng)求達(dá)到網(wǎng)站根目錄下的 index.php 時(shí),一個(gè)全新的Joomla執(zhí)行周期開始了,其中包括:

導(dǎo)入定義文件包括定義應(yīng)用程序常量的文件,這些文件在應(yīng)用程序及其擴(kuò)展中廣泛使用。 

加載 Joomla 框架及其應(yīng)用程序正常工作所需的所有基本類,框架還會(huì)檢查是否有存在configuration.php這個(gè)配置文件,如果不存在那么就會(huì)重定向到 安裝程序(installtion),開始安裝一個(gè)新的Joomla 

創(chuàng)建JApplication 對(duì)象并且初始化,開始處理session狀態(tài)(如果存在,怎使用現(xiàn)有的session,如果不存在則新建一個(gè)session)。

加載configuration.php這個(gè)配置文件,在這個(gè)文件中記錄了數(shù)據(jù)庫的連接信息。

調(diào)用路由器,路由器負(fù)責(zé)將 URL 轉(zhuǎn)換為關(guān)聯(lián)的命令數(shù)組,反之亦然。這些命令數(shù)組將作為url參數(shù)發(fā)送到PHP的$_GET超全局變量中。在參數(shù)數(shù)組中有一個(gè)重要的變量是option.這個(gè)變量決定了系統(tǒng)將會(huì)執(zhí)行哪一個(gè)組件。

隨著組件的執(zhí)行,文檔對(duì)象被創(chuàng)建。文檔對(duì)象將需要展示的內(nèi)容存儲(chǔ)在內(nèi)存中,在輸出到瀏覽器之前,開發(fā)者可以依據(jù)需要?jiǎng)討B(tài)的修改文檔中的數(shù)據(jù)(也就是頁面顯示的內(nèi)容)。系統(tǒng)會(huì)從數(shù)據(jù)庫中讀取中當(dāng)前的模板設(shè)置,并且加載當(dāng)前需要使用的模板。之后joomla將控制權(quán)完全交給組件,組件輸出什么完全由組件自己決定。

接下來是頁面的渲染,除了上一步的組件數(shù)據(jù),模塊和通知消息也被渲染并放置在它們?cè)谀0逯卸x的位置

最后一步是將頁面輸出到瀏覽器。

需要注意的是,在上述執(zhí)行周期的各個(gè)階段,都會(huì)調(diào)用插件事件點(diǎn),從而允許各種事件干擾和擴(kuò)展 Joomla 功能。

關(guān)鍵代碼描述

進(jìn)入入口點(diǎn)文件index.php

初始化(Initialisation)

  • 加載:defines.php
  • 加載:framework.php修改魔術(shù)引號(hào)和 Zend 兼容性的配置選項(xiàng)檢查是否存在 configuration.php。不存在則重定向到安裝目錄的index.php(installation/index.php)加載: import.php加載: configuration.php設(shè)置PHP的錯(cuò)誤報(bào)告模式初始化性能分析器(只有在檢查后臺(tái)設(shè)置了調(diào)試模式后啟用)導(dǎo)入 joomla.application.menu (菜單相關(guān)的類)導(dǎo)入 joomla.user.user導(dǎo)入 joomla.environment.uri導(dǎo)入 joomla.html.html導(dǎo)入 joomla.utilities.utility導(dǎo)入 joomla.event.event導(dǎo)入 joomla.event.dispatcher導(dǎo)入 joomla.language.language導(dǎo)入 joomla.utilities.string
  • 性能分析器標(biāo)記點(diǎn):afterLoad
  • 設(shè)置全局的$mainframe變量,調(diào)用 JFactory::getApplication('site')調(diào)用 JApplication::getInstance 創(chuàng)建并且返回一個(gè)實(shí)例.
  • 調(diào)用 JSite::initialise 初始化應(yīng)用程序application. 
  • 加載基礎(chǔ)的語言文件
  • 調(diào)用 parent::initialise首先調(diào)用 JFactory::getUser (初始化用戶對(duì)象)導(dǎo)入 joomla.user.user調(diào)用 JFactory::getSession 創(chuàng)建會(huì)話.基于用戶的設(shè)置偏好加載編輯器
  •  調(diào)用 JPluginHelper::importPlugin('system') 導(dǎo)入系統(tǒng)插件
  • 性能分析器標(biāo)記點(diǎn): afterInitialise
  • 觸發(fā)事件: onAfterInitialise

路由和認(rèn)證(Routing and Authorisation)

  • 路由 URI: 調(diào)用 JSite::route
  • 調(diào)用 JSite::authorize檢查當(dāng)前的菜單項(xiàng)的訪問級(jí)別. 如果未登錄,則重定向。如果已登錄且未授權(quán),則停止
  • 性能分析器標(biāo)記點(diǎn): afterRoute
  • 觸發(fā)事件: onAfterRoute

調(diào)度(Dispatching)

  • 調(diào)度組件: 調(diào)用 JSite::dispatch
  • 性能分析器標(biāo)記點(diǎn): afterDispatch
  • 觸發(fā)事件: onAfterDispatch

渲染(Rendering)

  • 渲染頁面: 調(diào)用 JSite::render
  • 性能分析器標(biāo)記點(diǎn): afterRender
  • 觸發(fā)事件: onAfterRender
  • 輸出: 調(diào)用 JResponse::toString (在這里可以設(shè)置是否壓縮)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)