您的位置:首页 > 其它

详解Magento执行流程

2013-05-29 12:05 351 查看
目前Magento作为全世界最先进的电子商务框架, 无数人趋之若鹜, 惊讶于它的完美, 惊世之作呼之欲出, 但也无数人拜倒在这位巨人的迷宫中, 留下走不出之旋窝的遗憾, 现本人把自己对Magento的苦苦专研得出的一些见解给大家分享, 希望解救需要帮助的人.

本人对Magento的整体框架做了一些研究并抽象出Magento的程序执行流程图, 仅代表个人对Magento的研究结果, 如有出入, 请留言告知.



下面是对该执行图做的注释:

F ①: Magento的URL形式分为两种, 一种是Page类型, 是来之Magento后端的CMS中创建的页面, 也即是对CMS模块的请求, 另外一种是对其他模块的URL请求. 所有这些URL都可以通过Magento中的核心Modules和自定义Modules或全局配置文件Config.xml中获知所使用的控制器和方法, 全局配置文件Config.xml中的<frontName>模块名称</frontName>, 找到<module>模块</module>, 从而能找到该模块对应的Layout文件<layout>....xml</layout>.

F ②: 根据URL中的{模块名称}_{控制器}_{方法}来在该layout文件中匹配控制标签而找到该URL使用的layout. 在layout文件对可以看到对于每个layout都有说明, 对于layout文件中<default>...</default>布局, 是默认每个页面都会使用的布局, 这些layout包括catalog_msrp.xml, catalog.xml, checkout.xml, cms.xml, customer.xml, googleanalytics.xml, newsletter.xml,
page.xml, poll.xml, rss.xml, tag.xml, wishlist.xml里面的<default>...</default>. layout中是通过reference的方式来增加或替换Block, 通过remove来移除Block, 通过update来更新Block, 通过after或before来调整Block位置等等.

F ③: 根据使用的layout中的block标签中的template="....phtml"找到使用的模板, Page模块对应的Template是母模板, 这个母模板是自动加载进来, 用于被其他的Template使用$this->getChildHtml('Block as value')的方式(使用该方式的前提是这个Block一定是嵌套在其他Block之内)或从相应的Block实例对象$this来增加内容.

F ④: 根据使用的layout中的block标签中的type="..."找到使用的Block, Page模块对应的Block是所有其他Block的"父类", 会自动加载, 这个Block里面的方法可以被其他Block使用.

D ①: 控制器和方法中会通过Mage静态工厂方式(例如: Mage::getModel('catalog/product'), Mage::helper('checkout/cart')等)根据参数从对应模块中的Model和Helper文件中的模型获取数据.

D ②: 每个Block其实就是对应template的一个控制器, 它也是通过Mage静态工厂方式(同上)获取数据.

D ③: Block获取的数据是存储在该Block的实例对象中, 对应的template可以通过$this(即该Block的实例对象)来获取数据, 放置在Html中.

(提示: 本文为个人原创, 请尊重辛苦劳作, 拷贝本文, 请附上链接: Magento执行流程详解)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  magento