久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

joomla ? joomla mvc

 sumi2005 2011-12-26

MVC組件的執(zhí)行

時間:2011/05/08 11:21 am  作者:冰凍解封 |  28次閱讀 | 評論:0

以前的文章中,,我們曾經(jīng)說過 $mainframework->dispatch 是如何最終調(diào)用組件的,通過這個dispatch,,最終 include 相應(yīng)組件目錄下的 組件名稱.php 文件,現(xiàn)在我們來看看,,這個文件是怎么按部就班的聯(lián)系了MVC模式相關(guān)的各個文件,。

require_once (JPATH_COMPONENT.DS.'controller.php');

// Require specific controller if requested
if($controller = JRequest::getVar('controller')) {
require_once (JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php');
}

// Create the controller
$classname = 'HelloController'.$controller;
$controller = new $classname( );

// Perform the Request task
$controller->execute( JRequest::getVar('task'));

// Redirect if set by the controller
$controller->redirect();

其實就是根據(jù)request提交的controller參數(shù),創(chuàng)建相應(yīng)的JController對象,,然后由controoler對象執(zhí)行相應(yīng)的任務(wù),。

這樣我們就完全理解了,一個組件是如何被調(diào)用,MVC組件是如何執(zhí)行,,并最后返回html代碼的,。

模塊是如何被調(diào)用執(zhí)行并渲染?
文章分類:PHP編程
以前的文章中,,關(guān)于/index.php我們已經(jīng)分析完了 $mainframe->dispatch()是引入了組件,,并被執(zhí)行。我們知道對于Joomla,,一個頁面只能有一個或者0個組件,,而上,下左右的碎片都是module,,module是頁面豐富的有效補充,。比如我們知道菜單是  mod_mainmenu,而footer是mod_footer等等,那么這些module是怎么被引入的,,并最后執(zhí)行的,?

秘密都在$mainframe->render()這個函數(shù)上,我們看看這個函數(shù)都做了什么工作,。

以下是JSite 的render 函數(shù)的內(nèi)容

  $document =& JFactory::getDocument();
  $user     =& JFactory::getUser();

  // get the format to render
  $format = $document->getType();

  switch($format)
  {
   case 'feed' :
   {
    $params = array();
   } break;

   case 'html' :
   default     :
   {
    $template = $this->getTemplate();
    $file   = JRequest::getCmd('tmpl', 'index');

    if ($this->getCfg('offline') && $user->get('gid') < '23' ) {
     $file = 'offline';
    }
    if (!is_dir( JPATH_THEMES.DS.$template ) && !$this->getCfg('offline')) {
     $file = 'component';
    }
    $params = array(
     'template'  => $template,
     'file'  => $file.'.php',
     'directory' => JPATH_THEMES
    );
   } break;
   }

  $data = $document->render( $this->getCfg('caching'), $params);
  JResponse::setBody($data);

其實重要的部分是引入了相應(yīng)的模板文件(template/***/index.php),,并調(diào)用了 JDocumentHtml的 render 函數(shù)。

看到這里,,我們終于明白了,,模板的index.php原來是這個時候被引入的。

我們再看看 JDocumentHtml 的render函數(shù),。

這個函數(shù)中最重要的兩句程序是

  $data = $this->_loadTemplate($directory.DS.$template, $file); 載入模板文件
  $data = $this->_parseTemplate($data); 解析模板

再繼續(xù)看看解析模板是什么過程:

  $replace = array();
  $matches = array();
  if(preg_match_all('##iU', $data, $matches))
  {
   $matches[0] = array_reverse($matches[0]);
   $matches[1] = array_reverse($matches[1]);
   $matches[2] = array_reverse($matches[2]);

   $count = count($matches[1]);

   for($i = 0; $i < $count; $i++)
   {
    $attribs = JUtility::parseAttributes( $matches[2][$i] );
    $type  = $matches[1][$i];

    $name  = isset($attribs['name']) ? $attribs['name'] : null;
    $replace[$i] = $this->getBuffer($type, $name, $attribs);
   }

   $data = str_replace($matches[0], $replace, $data);
  }

  return $data;
}

對了,,就是這部分,對模板中 JDOC標簽進行了解析,,獲得了相應(yīng)的module名稱和參數(shù),,并調(diào)用getBuffer函數(shù)執(zhí)行。

至此 調(diào)用 $renderer->render($name, $attribs, $result);

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多