Magento 典型的module模块结构介绍

一个典型的Magento 模块应该有如下的目录结构层次, 同时, 它还应符合MVC架构标准:

app/code/local/Alanstormdotcom/Configviewer/Block
app/code/local/Alanstormdotcom/Configviewer/controllers
app/code/local/Alanstormdotcom/Configviewer/etc
app/code/local/Alanstormdotcom/Configviewer/Helper
app/code/local/Alanstormdotcom/Configviewer/Model
app/code/local/Alanstormdotcom/Configviewer/sql

让我们一起对每个目录进行一一介绍吧!

Block
这个目录的责任就是为了显示页面, 如果我们用经典的MVC架构来看的话, Block起到了联合model 和template文件的作用, 它能从数据库里面取出数据并把它传递到Theme里面的模板文件.其实, Block是介于controller 和view之间的附加的一个层

Controllers
Controllers包含了所有的业务逻辑的actions, 它为Magento的分发请求(dispatch(), preDispatch(), postDispatch())提供了对应的相应, 同时它还为系统的其他部分提供了其相关的指令.

etc
它包含了模块所有的xml配置文件, 一个模块可能包含多个xml配置文件, 但必须至少含有一个config.xml文件, 这个文件用来配置模块的所有models, routers, blocks, helpers等相关的信息.
下面是一个最简单的config.xml
    
<config>
    <modules>
        <Namespace_Modulename>
            <version>0.1.0</version>
        </Namespace_Modulename>
    </modules>
</config>

通常情况下, 这个文件夹下还包含了一个adminhtml.xml 和system.xml文件, adminhtml.xml主要是用来配置模块在后台的菜单的访问权限, 如果模块需要在magento后台的system->Configuration里面设置相应的配置选项的话, 那么我们就需要在system.xml里面做相关的设置了.
如果你想了解更多的信息, 你可以访问这里.

Helper
在Helpers里面,我们可以根据不同的需要来定义一些常用的方法, 通常情况下, 这些helper类中定义的方法可以在template模板文件,Block,Model,Controller等整个系统中使用, 调用的方式通常如下:
    
Mage::helper('modulename/helpername')->methodName();

每一个模块都应该有一个默认的helper类Modulename/Helper/Data.php, 当然, 我们可以通过如下的方式调用它:
    
Mage::helper('modulename')->methodName();

Model
在经典的MVC架构里, Models是用来连接数据库和存取数据操作的. 但Magento 有不同的解释, 如果你是第一次接触, 可能感觉理解起来有点困难:
“几乎所有的Magento的Models都可以归于两种类型, 一种是基本的ActiveRecord类型(一张表对应一个对象), 另外一种是Entity Attribute Value模式, 也就是我们通常说的EAV模式, 同时, 每个Model还有一个Model collection, 它主要是用来存放一些私有的Magento model的实例. 同时,Magento团队已经实现了PHP Standard Library里面的IteratorAggregate and Countable的接口, 这样就允许每个Model类型有它自己的collection类型, 如果你不熟悉PHP Standard Library, 那你也可以把Model Collection当成附带有方法的数组.
Magento的model里面没有直接包括任何连接数据库的代码, 但是, 每个模块分别使用两个modelResource 类来和数据库打交道, 其中一个是用来读操作, 另一个是写操作,”
更多详情,请参考这里

sql
这个文件夹里面的文件主要是负责处理用于模块里面需要用到的自定义数据库表, 以及该模块相关的升级.

etc/modules/Namespace_Modulename.xml
每一个模块都包含了一个总的配置文件, 这个文件放在etc/modules/目录下, Magento运行时将加载该目录下所有的配置文件, 同时, magento将根据这些文件来判断那些模块是开启的,它们被放置在哪儿.
下面是其一个典型的配置实例
    
<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Modulename>
            <active>true</active>
            <codePool>local</codePool>
        </Namespace_Modulename>
    </modules>
</config>

同时,你也可以定义其他的附加参数, 例如depends, version和platform, 当然这些参数也可以在模块的config.xml里面定义.

Depends
    
<depends>
    <Mage_Catalog />
</depends>

Version
    
<version>0.1.0</version>

Platform
    
<platform>сe</platform> <!– (ce=community edition,pe=professional etc.) –>