Magento页面载入的执行流程
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Magento页面载入的执行流程

on

  • 526 views

 

Statistics

Views

Total Views
526
Views on SlideShare
526
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Magento页面载入的执行流程 Presentation Transcript

  • 1. Magento 页面载入的执行流 程 如何快速找到需要修改的页面?
  • 2. 简介 后台对 URL 的请求是如何被翻译成到某个特定模 块的执行呢?我们来看一下下面的这个 URL : http://example.com/frontName/actionControllerName 以反斜杠为分隔符, URL 分成以下这几部分:
  • 3. 简介 http://example.com/frontName/actionControllerName http://example.com 域名 frontName 前台控制器名 actionControllerName 执行控制器 actionMethod 执行方法
  • 4. 简介
  • 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