Magento模块介绍

                magento的module(模块)
Magento模块结构,是Mgento的核心组成部分,Magento的每一个请求都要执行这里面的东西,app/code/core/Mage下面放的是magento的核心代码,magento的模块都在这里面,我们自己写的一般放在app/code/core/community或者app/code/core/local下面,
参看下面的目录结构和相关的代码中定义的类名:
- App/
|- code/
| |- community/
| |- core/
| | |- Mage/
| | |- Zend/
| |- local/
|- design/
|- etc/
那么Magento模块是由那些部分组成呢,下面详细介绍:
Magento是由下面几部分组成
Block        
Etc       配置文件
Sql            数据库相关的sql文件
Helper        辅助类
Controller    控制类
Contrillers    控制类
Model        模型

下面要引入几个概念:

包(Package)
所有的模块是放在代码池中都是先建立一个包,然后在写模块,这样可以保持一定的同义和连贯,同时也避免了类名的重复性,易于magento工程结构的搭建。

模型(Model)
magento的数据库操作一般放在这里,可以说是magneto的数据层,比作为magento的肌肉,block一般所需的数据库操作都是从这里取数据,在请求执行过程中负责底层的数据工作。


块(Block)
一个block和一个phtml文件对应,,phtml文件中所需的数据是通过block文件给予的,有点像smarty的结构,将业务逻辑和前台显示分离,这样可以让设计师和程序员的工作分开,从这里看,Magento的一个请求,实际上是在处于模板文件和他所对应的block这个对象,

当然,Magento的模板系统是用PHP文件编写的。所以renderView()方法也只不过是简单的调用include来包含相关的模板文件。也就是说,如果你想使用 某个模板引擎,你可以通过修改Mage_Core_Block_Template类的renderView方法去调用你所选择的模板系统的呈现函数。

控制器(Controller)

控制器是Magento所有业务逻辑的起点。业务逻辑是指业务理论中的规则。至于

Magento业务逻辑和域逻辑(数据处理指令)的区分是不太明显的。有的人认为检查必须栏位和可选栏位就是属于业务逻辑,而有人认为那应该属于域逻辑。Magento中的大多数的逻辑的是在模型中实现的。

控制器类继承了Mage_Core_Controller_Varien_Action基类,而这个基类是Zend框架的Zend_Controller_Action类的修改版本。其中比较重要的方法包括:
l  dispatch($action)
l  preDispatch();
l  postDispatch()
辅助类(Helper)
对于一些写在block和model不合适的类,就写在了helper中
比较有用 的两个类就是    
l  __(两个下划线)
l  htmlEscape
双下划线方法是翻译接口,用来实现magento的翻译功能,也就是你把翻译文件包写好后,当你选定那个store的时候,他就会使用那个store中的翻译文件,然后就会呈现那种语言,对于这个函数,它几乎被所有的对象封装使用,也就是说你几乎可以在代码中的任何地方调用这个方法来翻译一个字符串。
htmlEscape只是简 单封装了htmlspecialchars函数,不过它也可以接收一个数组并对数组中的每个元素应用htmlspecialchars函数。

配置文件(config files)
Magento的牛逼之处就是在配置文件,配置文件保存在etc这个目录下,比较有用的有三个配置文件,config.xml,system.xml,convert.xml,其实另外两个文件的东西都可以写在config文件中,然后通过标签标示,但是为了更好的明确,还是分开比较好,一般说来,config.xml是直接影响你模块的行为,其它的两个文件system.xml和convert.xml会自动为你在后台配置页面创建设置表单。
组后,所有的配置文件在magento初始化的时候会被组合在一起,这就是说,可以通过配置文件覆盖或者重写模块的任何位置的模块的配置,由此,体现出magento强大的功能

到此magento模块的功能介绍完毕,这里只是介绍了一个大概,后续的工作需要大量的使用来更好的了解magneto的模块机制,学习magneto是一个体力活!

转载请注明链接地址:MagentoWater