SlideShare a Scribd company logo
1 of 15
Magento 页面载入的执行流
         程
       如何快速找到需要修改的页面?
简介


 后台对 URL 的请求是如何被翻译成到某个特定模
  块的执行呢?我们来看一下下面的这个 URL :
 http://example.com/frontName/actionControllerName
 以反斜杠为分隔符, URL 分成以下这几部分:
简介


 http://example.com/frontName/actionControllerName
 http://example.com       域名
 frontName                前台控制器名
 actionControllerName     执行控制器
 actionMethod             执行方法
简介
原理
 URL 请求被一个 PHP 拦截,通常为前端控制器
  ( Front Controller )
 这个 PHP 文件分析这个 URL ,获得一个执行控
  制 器( Action Controller )的名字和一个执行方
  法( Action Method )的名字,这个过程通常称
  为路由( Routing )
 实例化上一步获得的执行控制器,并调用相应的
  执行方 法
原理

 执行方法中处理业务逻辑,模型数据
 控制器实例化布局对象( Layout )
 布局对象根据请求的参数,系统配置创建一个块
  对象 ( Block )列表,并实例化
 布局对象会调用块对象的 output 方法生成
  HTML 。这是一个递归的过程,因为块对象可以
  嵌套块对象
原理
 每一个块对象都和一个模板文件( Template
  File )对应。块对象包含了显示逻辑,模板文件
  包含了 HTML 和 PHP 输出代码
 块对象直接从模型那里获得数据,换句话说,在
  Magento 的 MVC 架构中,控制器并不直接把数
  据传给视图
实例一
 http://v2.example
  .com/promoprops/index/present/?sid=v4s7fhls7i37as
 v2.example.com 确定主目录文件夹
  (…/chaodaxiu)
 promoprops        前台控制器
  (…/chaodaxiu/app/code/Promoprops)
 Index             执行控制器
  (…/Promoprops/IndexController.php)
 present            执行方法 (public function
  presentAction)
实例一分析
 public function presentAction()
{
 $this->loadLayout();
 $this->_setActiveMenu('promoprops');
      $this->renderLayout();
}
 loadLayout—— 这边的 Layout 是指:
  … /chaodaxiu/app/design/layout ; 找到对应的配
  置文件 promoprops.xml
实例一分析
 <promoprops_index_present>
     <reference name="content">
        <block type="promoprops/present" name="promoprops_present">
               <block type="promoprops/subMenu"
  name="promoprops_submenu" as="promoprops_submenu"></block>
               <block type="core/page_pager" name="pager"/>
        </block>
     </reference>
   </promoprops_index_present>
 找到对应的块:… /chaodaxiu/app/code/Promoprops/Block/Present.php
实例一分析
 class Promoprops_Block_Present extends Core_Block_Template
 {
    protected function _construct()
    {
       $shop = Hlg::getShop();
       $versionNo = $shop->getData('version_no');
       if($versionNo == '3'){
                 $this->setTemplate('promoprops/present.phtml');
       } else {
                  $this->setTemplate('promoprops/list_free.phtml');
       }
    }
 }
实例一拓展
 打开 promoprops/present.phtml 文件后,发现页面内容
  只包括 <div id=“wrapper” class=“promotion”>…</div>, 这
  是为什么呢?
 再看下配置文件 promoprops.xml ,可以看到有这么一句
  : <reference name=“content”> ,说明这个页面的内容
  只作为整个页面中内容而存在,完整的页面是
  … /chaodaxiu/app/design/template/page.phtml
 在 page.phtml 页面中,有这么一句 <?php echo $this-
  >getChildHtml(‘content’) ?></div> ,于是把内容块独立
  出来,可以自由的引用
实例一拓展
 默认的配置文件地址:
  … /chaodaxiu/app/design/layout/core.xml
 默认的配置信息:
   <layout>
      <default>
        <block type="core/page" name="root" output="toHtml">
        <block type="core/page_head" name="head" as="head" />
           <block type="core/page_notices" name="global_notices" as="global_notices" />
           <block type="core/page_header" name="header" as="header" />
           <block type="core/page_menu" name="menu" as="menu" />
           <block type="core/text_list" name="content" as="content" />
           <block type="core/messages" name="messages" as="messages" />
           <block type="core/page_footer" name="footer" as="footer" />
           <block type="core/profiler" name="profiler" as="profiler" />
        </block>
    </default>
   </layout>
练习题

 根据这个方法找五个不熟悉的页面
  例如: http://v2.example
   .com/tool/adjust/distriTotal/adjustPlanId/137785/?
   sid=v4s7fhls7i37astol46gkgnir0
  http://crm.example.cn/plugin/item/index/flag/dangqian/?
   sid=am12vhscq9aofugc8digkknuc4
Magento页面载入的执行流程

More Related Content

Similar to Magento页面载入的执行流程

Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
Django development
Django developmentDjango development
Django developmentloveyudu
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
Django
DjangoDjango
DjangoTao He
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
HTML5概览
HTML5概览HTML5概览
HTML5概览Adam Lu
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范Hongjian Wang
 
高粒度模块化的前端开发
高粒度模块化的前端开发高粒度模块化的前端开发
高粒度模块化的前端开发iddcn
 
Zen cart全集
Zen cart全集Zen cart全集
Zen cart全集fxiong99
 
Drupal 版型設計 - 瞭解版型程式
Drupal 版型設計 - 瞭解版型程式Drupal 版型設計 - 瞭解版型程式
Drupal 版型設計 - 瞭解版型程式Chris Wu
 

Similar to Magento页面载入的执行流程 (20)

Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
Php
Php Php
Php
 
Django development
Django developmentDjango development
Django development
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
Django
DjangoDjango
Django
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
HTML5概览
HTML5概览HTML5概览
HTML5概览
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
Web base 吴志华
Web base 吴志华Web base 吴志华
Web base 吴志华
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范
 
高粒度模块化的前端开发
高粒度模块化的前端开发高粒度模块化的前端开发
高粒度模块化的前端开发
 
Zen cart全集
Zen cart全集Zen cart全集
Zen cart全集
 
Drupal 版型設計 - 瞭解版型程式
Drupal 版型設計 - 瞭解版型程式Drupal 版型設計 - 瞭解版型程式
Drupal 版型設計 - 瞭解版型程式
 

Magento页面载入的执行流程

  • 1. Magento 页面载入的执行流 程 如何快速找到需要修改的页面?
  • 2. 简介  后台对 URL 的请求是如何被翻译成到某个特定模 块的执行呢?我们来看一下下面的这个 URL :  http://example.com/frontName/actionControllerName  以反斜杠为分隔符, URL 分成以下这几部分:
  • 3. 简介  http://example.com/frontName/actionControllerName  http://example.com 域名  frontName 前台控制器名  actionControllerName 执行控制器  actionMethod 执行方法
  • 5. 原理  URL 请求被一个 PHP 拦截,通常为前端控制器 ( Front Controller )  这个 PHP 文件分析这个 URL ,获得一个执行控 制 器( Action Controller )的名字和一个执行方 法( Action Method )的名字,这个过程通常称 为路由( Routing )  实例化上一步获得的执行控制器,并调用相应的 执行方 法
  • 6. 原理  执行方法中处理业务逻辑,模型数据  控制器实例化布局对象( Layout )  布局对象根据请求的参数,系统配置创建一个块 对象 ( Block )列表,并实例化  布局对象会调用块对象的 output 方法生成 HTML 。这是一个递归的过程,因为块对象可以 嵌套块对象
  • 7. 原理  每一个块对象都和一个模板文件( Template File )对应。块对象包含了显示逻辑,模板文件 包含了 HTML 和 PHP 输出代码  块对象直接从模型那里获得数据,换句话说,在 Magento 的 MVC 架构中,控制器并不直接把数 据传给视图
  • 8. 实例一  http://v2.example .com/promoprops/index/present/?sid=v4s7fhls7i37as  v2.example.com 确定主目录文件夹 (…/chaodaxiu)  promoprops 前台控制器 (…/chaodaxiu/app/code/Promoprops)  Index 执行控制器 (…/Promoprops/IndexController.php)  present 执行方法 (public function presentAction)
  • 9. 实例一分析  public function presentAction() {  $this->loadLayout();  $this->_setActiveMenu('promoprops');  $this->renderLayout(); }  loadLayout—— 这边的 Layout 是指: … /chaodaxiu/app/design/layout ; 找到对应的配 置文件 promoprops.xml
  • 10. 实例一分析  <promoprops_index_present>  <reference name="content">  <block type="promoprops/present" name="promoprops_present">  <block type="promoprops/subMenu" name="promoprops_submenu" as="promoprops_submenu"></block>  <block type="core/page_pager" name="pager"/>  </block>  </reference>  </promoprops_index_present>  找到对应的块:… /chaodaxiu/app/code/Promoprops/Block/Present.php
  • 11. 实例一分析  class Promoprops_Block_Present extends Core_Block_Template  {  protected function _construct()  {  $shop = Hlg::getShop();  $versionNo = $shop->getData('version_no');  if($versionNo == '3'){  $this->setTemplate('promoprops/present.phtml');  } else {  $this->setTemplate('promoprops/list_free.phtml');  }  }  }
  • 12. 实例一拓展  打开 promoprops/present.phtml 文件后,发现页面内容 只包括 <div id=“wrapper” class=“promotion”>…</div>, 这 是为什么呢?  再看下配置文件 promoprops.xml ,可以看到有这么一句 : <reference name=“content”> ,说明这个页面的内容 只作为整个页面中内容而存在,完整的页面是 … /chaodaxiu/app/design/template/page.phtml  在 page.phtml 页面中,有这么一句 <?php echo $this- >getChildHtml(‘content’) ?></div> ,于是把内容块独立 出来,可以自由的引用
  • 13. 实例一拓展  默认的配置文件地址: … /chaodaxiu/app/design/layout/core.xml  默认的配置信息:  <layout>  <default>  <block type="core/page" name="root" output="toHtml">  <block type="core/page_head" name="head" as="head" />  <block type="core/page_notices" name="global_notices" as="global_notices" />  <block type="core/page_header" name="header" as="header" />  <block type="core/page_menu" name="menu" as="menu" />  <block type="core/text_list" name="content" as="content" />  <block type="core/messages" name="messages" as="messages" />  <block type="core/page_footer" name="footer" as="footer" />  <block type="core/profiler" name="profiler" as="profiler" />  </block>  </default>  </layout>
  • 14. 练习题  根据这个方法找五个不熟悉的页面  例如: http://v2.example .com/tool/adjust/distriTotal/adjustPlanId/137785/? sid=v4s7fhls7i37astol46gkgnir0  http://crm.example.cn/plugin/item/index/flag/dangqian/? sid=am12vhscq9aofugc8digkknuc4