依據HTTP Requestfu進入的執行先後順序撰寫如下:
程式的進入點(Entry Point)只有一個:index.php(安裝根目錄中,下述路徑皆以根目錄為相對參考)
- 定義一些常數名稱
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR ); - 呼叫定義檔,裡面更多常數名稱的定義
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); - 載入Joomla框架
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); - 匯入Joomla框架所需要的程式庫 require_once( JPATH_LIBRARIES.DS.'joomla'.DS.'import.php'); 並且利用JLoader::import方法,載入許多物件, 例如JLoader::import( 'joomla.factory');載入JFactory
- 設定Joomla框架的組態設定 require_once( JPATH_CONFIGURATION.DS.'configuration.php' );
- 產生應用程式物件,這是繼承於JApplication的JSite物件
$mainframe =& JFactory::getApplication('site'); - 初始化應用程式物件
$mainframe->initialise(); - 觸發事件$mainframe->triggerEvent('onAfterInitialise');
- 路由應用程式,決定HTTP Request應該傳送到哪個Component處理,建立JRouter物件。
$mainframe->route(); - 觸發事件$mainframe->triggerEvent('onAfterRoute');
- 批准授權使用者的權限,利用JMenu物件判斷
$mainframe->authorize($Itemid);
- 派遣應用程式,將HTTP Request的參數資料取出派遣到對應的Component處理,建立JDocument物件
$mainframe->dispatch($option); - 觸發事件$mainframe->triggerEvent('onAfterDispatch');
- 提交應用程式,將Component處理後的資料與template結合,提交給JResponse緩衝暫存。
$mainframe->render(); - 觸發事件$mainframe->triggerEvent('onAfterRender');
- 將JResponse輸出成為HTTP Response
echo JResponse::toString($mainframe->getCfg('gzip'));
實際上是實體化includes/application.php的定義JSite類別, 建立JSite物件,而不是JApplication, 但是注意JSite類別是泛生自JApplication類別,而JApplication類別則是泛生自JObject類別。
###