Joomla 組件的執(zhí)行流程

2023-03-10 10:59 更新

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

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

假設(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搭建的,那么它開始請求的文件都是網(wǎng)站根目錄下的index.php這個文件。

joomla組件執(zhí)行流程圖

componet.png

 

插件的描述圖

 plugin01.png

 文字描述

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

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

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

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

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

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

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

接下來是頁面的渲染,除了上一步的組件數(shù)據(jù),模塊和通知消息也被渲染并放置在它們在模板中定義的位置

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

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

關(guān)鍵代碼描述

進入入口點文件index.php

初始化(Initialisation)

  • 加載:defines.php
  • 加載:framework.php修改魔術(shù)引號和 Zend 兼容性的配置選項檢查是否存在 configuration.php。不存在則重定向到安裝目錄的index.php(installation/index.php)加載: import.php加載: configuration.php設(shè)置PHP的錯誤報告模式初始化性能分析器(只有在檢查后臺設(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
  • 性能分析器標記點:afterLoad
  • 設(shè)置全局的$mainframe變量,調(diào)用 JFactory::getApplication('site')調(diào)用 JApplication::getInstance 創(chuàng)建并且返回一個實例.
  • 調(diào)用 JSite::initialise 初始化應(yīng)用程序application. 
  • 加載基礎(chǔ)的語言文件
  • 調(diào)用 parent::initialise首先調(diào)用 JFactory::getUser (初始化用戶對象)導(dǎo)入 joomla.user.user調(diào)用 JFactory::getSession 創(chuàng)建會話.基于用戶的設(shè)置偏好加載編輯器
  •  調(diào)用 JPluginHelper::importPlugin('system') 導(dǎo)入系統(tǒng)插件
  • 性能分析器標記點: afterInitialise
  • 觸發(fā)事件: onAfterInitialise

路由和認證(Routing and Authorisation)

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

調(diào)度(Dispatching)

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

渲染(Rendering)

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號