上一篇我们说到M1开发总结:模块基础常识,而这一篇,我们再进入了解一下模块的配置文件config.xml,这是magenot模块的核心,是非常折腾人的地方,以下的解释也可能比较烧脑,建议是自己找个空闲时间,同时结合config.xml慢慢阅读,好好用心掌握,理解完了也就基本上能搞明白magento了,咱先看看config.xml基本结构。
以上结构,涉及模块声明一级标签modules、全局global标签、二级标签models、resources、blocks、helpers、events,涉及前台的是一级标签frontend,涉及后台的是一级标签adminhtml、涉及计划任务的是一级标签crontab
在此对核心、前台、后台等常用到的标签做一下基本解说,其它标签的意义就不过多解释,读者后期可自行查看代码进行深入了解
Modules核心配置
modules:是模块的声明, 下级的Mage_Sales一般跟目录路径一样的名字,Mage_Sales就代表着app/code/core下的Mage/Sales,如果是本机重写功能,如重写sales功能,那么目录会是app/code/local/Sna/Sales,而对应的<Mage_Sales>将会改成<Sna_Sales>,再下级的version就是模块的版本号,自行定义就行,如需要增加数据表之类的话,结合sql目录的下级文件名一起使用就行。
更多创建表的信息,就不过多说明自行百度或查看源代码
global全局配置 (这里面的标签是全局都有效的,不区分前后台)
models:Model数据层的声明 magento的Model层获取数据声明就在此,有models标签就意味着能用getModel方式获取数据了,< sales>是自定义的标签,字符自己定就行,一般跟模块名字一致,而更重要一点是在调用模块时使用,如
Mage::getModel('sales/order')调用model时,sales就对应配置里面的< sales>标签,此原理同样适用于block\helper等配置……
models >sales > class标签: 声明model所对应的文件路径,Mage_Sales_Model对应是Mage/Sales/Model文件夹;
models >sales > rewrite标签: 声明model重写之用,这个标签在核心配置文件里面并没有出现,加在此位置,是为了对magento重写功能做一个说明,有rewrite标签,即意味着要对某一个功能进行重写,下级的order对应着order.php文件,里面的Sna_Sales_Model_Order代表着重写文件所处位置,如果是二级目录将会变成<order_status>Sna_Sales_Model_Order_Status<order_status>这种写法,Block\control都有着类似的写法
models >sales > resourceModel标签: 是声明资源功能(上一文提到的拿多条数据就涉及此配置),里面定的值sales_resource是自定义的(一般是当前模块名_resource的方式,也有_mysql4的写法),不管怎么写,往下还是有一个相应的<sales_resource>或<sales_mysql4>的标签;
entities:声明实体名称 什么是实体?可以理解为表实体,能看到sales_entity、sales_resource标签下都有一样的entities标签,这是定义表实体用的,要使用到数据表,可以在此位置下声明;
entities下级的quote标签:声明模块实体实例 自定义名称,与之对应的是在模块功model目录下要建立一个与之相同的Quote.php文件,实现使用getModel,功能,如:Mage::getModel('sales/quote')->load($id);将会调quote(购物车信息)
entities》quote下级table标签:其实就是表名 结合sql文件完成模块安装/升级后,就会在数据库生成一个sales_flat_quote表
resources标签:数据库资源读取声明 这其实就是定义模块(安装/读/写)数据库时用哪个类(资源)进行操作,sales_write是写数据库调用的是core_write,sales_read是读数据库调用的是core_read,这部分配置在实际开发中,模块开发过程中一般是从Mage核心代码复制过来,保证数据读取正常即可,在使用主从数据库的时候才会有所调整!
events标签: 是magento事件的声明,有此标签意味着将对某些事件进行响应,执行一些逻辑处理,sales_order_place_after代表着订单结算完成后事件
template标签: 是声明邮件模板及位置的,就不多解说了
blocks标签: 是block块的声明,跟models标签是差不多的结构,block下级的snacustomer其实跟models下的sales一样的意义,可随便起,但在代码里面调用时就会用到,如CreateBlock('snacustomer'),就意味着创建一个Block块,rewrite也跟models的rewirte标签一样的意思,就不再重复了!
Helpers标签: 是帮助类的声明,与block、models差不多的,就不多解说了
frontend前台配置 (这里面的标签只对前台生效)
routers:路由标签 下级的frontName标签就是声明路由地址的,声明后就可在浏览器地址输入sales/控制器名/方法名,调用Magento的控制器,如:app/code/core/Mage/Sales/controllers/OrderController.php,对应就是sales/order/index,(index为默认值,方法名不输入则默认为index)
translate:翻译标签 声明翻译文件所在的位置,不过多解释了
layout:布局文件声明 这是一个很重要的标签,声明此模块的控制器页面输出将使用哪个布局文件进行定义,布局文件是前台View层(templete模板、block块)的重要配置文件,file标签里的值sales.xml对应的文件位置在app/design/frontend/主题包/主题/layout,主题包/主题会依据后台配置的主题而变,没有找到的话,最终会到base/default下找,而关于layout文件会在后面章节再解说。
events标签事件: 跟global的events标签一样,属于magenot事件,只不过,这里面的只对前台事件进行响应而已
adminhtml后台配置 (这里面的标签只对后台生效)
adminhtml标签跟frontend标签内容是差不了多少的,同样有routers:路由、ranslate:翻译、layout:布局文件声明、events事件……等标签,只不过对应着是magento后台起效果而已,这里面,就不过多说明了
关于config.xml的解说就这么多了,而magento模块的etc目录下的除了config.xml,还有api.xml(api接口的配置文件)、adminhtml.xml(后台导航/权限配置文件)…在此也就不再多解说了,留给开发者自行了解。
建议magento1的开发者多去看看magento的核心代码(app/code/core/Mage),这里面是magento系统的核心,里面每一个模块都可以看看,如:订单sales,结算checkout、用户Customer、产品Catalog…在你看完那些模块之后,自然就会有所成长
后记:
用magento1开发已经4年,从不熟悉到现在独立开发模块、拆分magento系统做独立接口去实现业务…此magento开发教程,将会从开发角度讲解一些开发细节的问题,这也算是对M1开发记录的一个小总结吧。
目前magento官方已经停止对1版本更新,但依然有很多公司还会用着M1版本(功能太多,平滑迁移还是要花时间)希望此文章能对m1开发者一些帮助。