opencart伪静态magentophp
2022-08-19 11:13:09 - 米境通
模块(module)是Magento的核心。站点上的任何一个动作(action),无论是在前台和还是在后台的每一个操作都是通过模块来实现的。模块是可以视为一个容器,它可包含下面这几项:设置(settings),数据库模式(databaseschema),呈现对象(renderingobject),辅助工具类(utilityhelpers),数据模型(datamodels)或动作控制器(actioncontroller)。一个模块可以包含全部的这六项也可以只包含其中的几项,甚至只有一项。所有的模块可以通过app/etc/modules/目录中XML配置系统来进行开关。每个模块也可以在自己模块目录下的etc子目录中创建一个XML文件来保存自己的配置信息。
由于Magento中的一切都是模块而且模块本身又可以有自己的配置文件和数据库设置,这样就允许开发人员对Magento进行扩展。
模块结构
下面是Catalog模块的目录结构,它包含了模块的所有项目(上面提到的六项):
代码池(CodePools)
Magento中所有的模块被放在三个代码池中,它们分别是core,local,community。Magento本身所附带的模块全部放在core代码池中。你自己开发的模块则就安装在local代码池中。至于community代码池则是用来安装第三方模块,但是这种想法也有可能会过时,因为模块可以安装在lcoal代码池,也可以安装在community代码池,而并不是必须那样划分。
包(Package)
所有的模块都不是直接保存代码池目录中,而是保存在包目录(代码池的子目录)中。引入包概念的主要目的是类命名的统一和一贯性。所有的Magento模块是保存在core代码池中的Mage包中。所以,所有的Magento类名都以Mage_为前缀。而对我们自己开发的代码我们应该在lcoal代码池中创建一个包,比如以你公司的名字作为包名,这样就可以避免类名的重复的可能性。
模型(Model)
模型可以说是Magento的肌肉。它主要是用来从数据库提取数据到程序中。数据的输出,呈现是通过块(Block)来实现的。也就是说它主要是用来负责数据库操作的。事实上在任何一个编程环境中,模型都是被用来识别处理数据域的工作,也就是说它在数据组的定义和其它相关数据组之间起到联系的作用。
为了说明前面模型化的理论,我们举个例子来说明一下:在创建一个购物车系统时,我们有一个Product类。每个产品需要一个指定一个图片。问题是图片如何模型化?只是简单的给Product类一个$image_url属性?还是创建一个Image_Gallery类,然后在两个类之间创建一个接口,如getDefaultImage。最终的模型类取决于你决定如何实现数据之间的操作。
块(Block)
块是Magento模板模式背后的大脑。所有的块形成一套嵌套的对象集协调模型和模板文件。每个块对应一个模板文件——模板文件是以.phtml为扩展名的html和php代码混合的文件。也就是说对于在Magento上的任何一个请求,其实你在处理的是一系列的块对象和相应数量的模板文件。