上一章讲到语言包加载的改造,这一章准备对布局xml文件的配置下手。把布局xml文件加载的改造放第二章,是因为本章开始会引入一个我自己定义的概念,相比第一章对底层的改动更大。
这个新概念我称之为模块的别名,设置方式如下(修改模块的config.xml):
<modules> <Mage_Wishlist> <version>1.6.0.0</version> <alias>wishlist</alias> </Mage_Wishlist> </modules>
我在这个系列概论(“约定优于配置”与Magento)的时候有提到,Magento的潜规则之一是,blocks的别名,helper的别名,布局xml文件的文件名,用的都是同一个。那么这里我就来给整个模块定义一个别名alias,然后给blocks,helper,布局xml文件的文件名等等共用,他们各自不再需要单独命名一次,比如
<layout> <updates> <wishlist module="Mage_Wishlist"> <file>wishlist.xml</file> </wishlist> </updates> </layout>
通过对底层的改造,不再通过上面这整段xml来定义模块对应的布局文件,而是直接用模块的别名wishlist拼接后缀字符串“.xml”来定义模块对应的布局文件。
需要修改的文件是Mage_Core_Model_Config和Mage_Core_Model_Layout_Update,详见
https://github.com/walexer/Yli_Coc/blob/master/app/code/local/Mage/Core/Model/Config.php
https://github.com/walexer/Yli_Coc/blob/master/app/code/local/Mage/Core/Model/Layout/Update.php
主要修改的方法是:public function getFileLayoutUpdatesXml
跟上一章对语言包的处理方式不同的是,这里对布局文件加载的修改并没有推翻原有的逻辑,而是添加了一种默认逻辑。换句话说,在经过这样的修改之后,下面这种配置方式依然是有效的,当模块不对布局文件人为指定时,系统才会去用模块的别名拼接“.xml”来寻找该文件
<layout> <updates> <wishlist module="Mage_Wishlist"> <file>wishlist.xml</file> </wishlist> </updates> </layout>
这种方式更符合“约定优于配置”的理念,不配置时按约定,同时保留配置的权利,语言包的处理方式应该算是“约定取代配置”。(我的个人理解是这样)
经过这一章的修改之后,理论类似上面的这种<layout>块都可以删掉了,不过我倒是真的发现了一个插件没有遵循我之前所说的潜规则(算说大话了),这个插件就是普及度超级高的AW_Blog,它的布局文件名是aw_blog.xml而不是blog.xml
<layout> <updates> <blog module="AW_Blog"> <file>aw_blog.xml</file> </blog> </updates> </layout>
碰到这样的第三方插件,还想像上面这么玩的话,需要改一下布局文件的文件名了
好了,请期待下一章!!!