Magento二次开发 Magento模块/模型 示例

Magento模型

Magento 理所当然的也追随潮流应用了ORM。虽然 Magento自带的 Zend框架提供了SQL 抽象层,但是在大多数情况下我们将通过 Magento自带的模型和我们自己的模型来进行数据访问。他和视图层(View)一样,Magento的模型层也不是简单的 ORM,而是一个高度灵活, 高度抽象甚至有点令人费解。

Magento的模型解剖

大部分的 Magento模型分为两类。第一类是基本的 ActiveRecord类型,一张表一个对象的模型。第二类是Entity Attribute Value(EAV)模型。【译者注:EAV翻译成“实体属性值”有点词不达意,还是就叫 EAV的好】Magento 自己定义了一个数据类型叫做模型集合 (Model Collection)。顾名思义,模型集合就是一个对象里面包含了很多模型对象。Magento 的创造者Varien团队实现了PHP类库的标准接 口,“IteratorAggregate”,“Countable”。这样模型集合就能调用这些方法,这也是模型集合和数组的区别。

Magento 的模型并不直接访问数据库。每一个模型都有一个资源模型(ResourceModel),每一个资源模型拥有两个适配器(Adapter),一个读,一个写。这样的话逻辑模型和数据库访问就分开了,所以从理论上讲更改底层数据库 只需要重写适配器就可以了,所有上层代码都不需要更改。

创建基本模型

下面我们开始创建一个基础的Magento模型,我们以简单的weblog博客为例,构建一个模型,总的分为以下几步。

  1. 创建一个新的“Weblog”模块
  2. 为magento加载该模块,在app/etc/modules下添加配置文件Magentotutorial_Weblog.xml
  3. 检查模块是否已加载
  4. 为我们的模型创建一个数据库表
  5. 配置Magentotutorial/Weblog/etc/config.xml
  6. 完善模型php文件
  7. 实例化模型
  8. helper/block
  9. layout/Template display
  10. 结束

1.新建一个新的“Weblog”模块

 

2.为magento加载该模块,在app/etc/modules下添加配置文件Magentotutorial_Weblog.xml

 

3.查看magento是否加载到该模块:

进入管理后他,System->Configuration->ADVANCED,查看Magentotutorial_Weblog是否为Enable

4.为我们的模型创建一个数据库表

5.配置Magentotutorial/Weblog/etc/config.xml

6.完善模型php文件

Magentotutorial/Weblog/Model/Blogpost.php

Magentotutorial/Weblog/Model/Resource/Blogpost.php

Magentotutorial/Weblog/Model/Resource/Blogpost/Collection.php

7.实例化模型

Magentotutorial/Weblog/controllers/IndexController.php

 

至此,简单模型已经建立,后台管理清空下缓存后,通过http://127.0.0.1/magento/weblog/index/testModel  即可访问

getModel /getResourceModel 有一定区别,请自行参考以上代码区分

如果你的代码运行有问题,请开启调试模式,点这里

以下篇章是如何将数据显示到页面的,这里先修改下Magentotutorial/Weblog/controllers/IndexController.php 文件,增加function indexAction

 

8.创建好Model后,继续添加Helper和Block,在配置文件Magentotutorial/Weblog/etc/config.xml中添加

 

Magentotutorial/Weblog/Helper/Data.php

 

 

Magentotutorial/Weblog/Block/Weblog.php

 

9.这里遇到的问题是,得到了数据,但是如何才能将数据传递到Template的phtml页面,TP有$this->assign(),$this->display()来传递,magento是如何传递的呢?是否想过这个问题?我也在这里卡了很久,一直在说Magento的配置文件很强大,之前一直没有体现,这里的解决方式,还是magento的配置文件。 在design/frontend/rwd/default/layout文件夹下,新建local.xml,添加如下代码:

 

 

这里解释下含义:

weblog_index_index:表示weblog模块下的IndexController下的indexAction;

<reference>表示引入模块,name=“root”表示替换掉默认的以name=“root”的模块;

<block>表示新建一个模块, type=”weblog/weblog”,表示从weblog模块下,找block下的weblog.php文件, template=”weblog/blog_posts.phtml”,表示在Template文件夹下,找到weblog/blog_posts.phtml文件。

10.在design/frontend/rwd/default/template文件夹下新建weblog/blog_posts.phtml

 

通过http://127.0.0.1/magento/weblog/index/index 即可访问,到此为止,一个简单的模块就跑通了。

打赏
暂无评论

请到【后台 - 用户 - 我的个人资料】中填写个人说明。

发表评论