您的位置:首页 > 其它

“约定优于配置”与Magento改造尝试二之布局xml文件加载

2016-01-07 15:22 288 查看
上一章讲到语言包加载的改造,这一章准备对布局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>


碰到这样的第三方插件,还想像上面这么玩的话,需要改一下布局文件的文件名了


好了,请期待下一章!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: