網頁

搜尋此網誌

2010年7月30日 星期五

Joomla Operation 運作說明

這篇是記錄研究Joomla!的運作原理,主要方法是去分析Joomla!原始碼的內容,沒什麼深奧的技術,大家參考參考就好!還是參閱官方文件網站:http://docs.joomla.org/

依據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');
  • 實際上是實體化includes/application.php的定義JSite類別, 建立JSite物件,而不是JApplication, 但是注意JSite類別是泛生自JApplication類別,而JApplication類別則是泛生自JObject類別。
  • 初始化應用程式物件
    $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'));

    ###

    沒有留言:

    張貼留言

    熱門文章