Magento学习手记(第三天)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Magento学习手记(第三天)相关的知识,希望对你有一定的参考价值。
第三天:
一、Magento Model设计分析(EAV为数据库模型设计模式,此处分析的是php代码模型设计)
Magento的Model模型分成三种:
- Model:Mega::getModel();
- ResourceModel:Mega::getResourceModel();
- ResourceModelCollection;
注:ResourceModel和ResourceModelCollection还分为一般的、基于EAV模型的两种;
第一步:配置xml文件,config.xml;
第二步:model对象操作;
- 获取model对象:$model = Mega::getModel(‘catalog/product‘);
- _contruct()方法:
1 protected function _construct() 2 { 3 $this->_init(‘catalog/product‘); 4 }
将调用父Mage_Core_Model_Abstract中的_init方法。他的参数值是catalog/product。这个cms/page与上面的getModel方法与的catalog/product的值虽然是一样的,但是他们的意义完全不同,_init方法中的catalog/product指资源model的名称,它表示我们怎样找到这个资源model,而getModel中的catalog/product表示值model的名称,它表示我们怎样去找到这个值model,他们的/前面部份catalog必须相同,但是/后面部份不一定相同,分别表示资源model类名的一部份(后面部份)和值model类名的一部份(后面一部份),只不过在此碰上了,刚好相同。Magento有很多都是相同的,但是要理解好这两个参数代表不同的意义,并且/后面部份可以是不相同的。
- _init()方法
1 protected function _init($resourceModel) 2 { 3 $this->_setResourceModel($resourceModel); 4 }
- _setResourceModel方法
1 protected function _setResourceModel($resourceName, 2 $resourceCollectionName=null) 3 { 4 $this->_resourceName = $resourceName; 5 if (is_null($resourceCollectionName)) { 6 $resourceCollectionName = $resourceName.’_collection’; 7 } 8 $this->_resourceCollectionName = $resourceCollectionName; 9 }
第3行把传过来的资源model的指示名给类变量_resourceName,供后继使用,如果没有第二个参数(这里是没有传的),将在_resourceName后加一个_collection作为资源Collection Model的指示名,这里_resourceName和_resourceCollectionName分别为catalog/product和catalog/product_collection.
注意在Magento中,一般都没有传第二个参数$resourceCollectionName,从而使得我们的资源Collection Model的类名都是Collection,从这个方法您可可能看出,这个不是必须的,你可以改变资源Collection Model的标示,这个是不对的,因为我们的_init方法根本没有机会给我们传入这个参数.所以目前为上,我们的资源Collection Model类名都为Collection。
二、xdebug分析magento后台产品模块相关内容调用情况:
方法:打开一个configurable product,分析xdebug文件;
app/code/core/Mage/Catalog/Model/Product.php文件分析:
1. 核心内容:Catalog product model商品模型;
2. 类型:Model类
app/code/core/Mage/Catalog/Model/Resource/Product.php文件分析:
1. 核心内容:Product entity resource model商品实体资源模型;
2. 类型:ResourceModel类;
三、Magento系统中使用的十二种设计模式
- MVC模式(MVC Pattern);
- 前端控制器模式(Front Controller Pattern);
- 工厂模式(Factory Pattern);
- 单例模式(Singleton Pattern);
- 注册表模式(Registry Pattern);
- 原型模式(Prototype Pattern);
- 对象池模式(Object Pool Pattern);
- 迭代器模式(Iterator Pattern);
- 懒加载模式(Lazy Loading Pattern);
- 服务定位器模式(Service Locator Pattern);
- 模块模式(Module Pattern);
- 观察者模式(Observer Pattern);
以上是关于Magento学习手记(第三天)的主要内容,如果未能解决你的问题,请参考以下文章