“约定优于配置”与Magento改造尝试一之语言包加载

上一篇文章(“约定优于配置”与Magento)讲到,Magento的模块结构运用了大量的xml内容来做配置,其中有一些其实是可以用约定来代替的。从本篇文章开始我会尝试对Magento从底层做一些改造,来让系统支持按照约定而不需要实际配置来加载一些东西。

第一步先挑简单的来,原始情况下,一个模块对语言包(csv)的加载是通过如下方式配置指定的

        <translate>
            <modules>
                <Mage_Wishlist>
                    <files>
                        <default>Mage_Wishlist.csv</default>
                    </files>
                </Mage_Wishlist>
            </modules>
        </translate>

之前有提到,Magento的潜规则是语言包文件名Mage_Wishlist.csv与模块名Mage_Wishlist都是一致的(除去后缀),那么我这里就尝试针对这个改造成不再需要再通过上面这样一组xml来认为指定加载哪个文件,直接使用模块名。

需要动的文件是Mage_Core_Model_Translate,我放到了github上,地址如下:

https://github.com/walexer/Yli_Coc/blob/master/app/code/local/Mage/Core/Model/Translate.php

具体的话修改了三个方法,分别是

public function init($area, $forceReload = false)
public function getModulesConfig()
protected function _loadModuleTranslation

经过这样的修改之后,所有的类似下面这种配置就可以不需要了(写了也没用)

<translate>
            <modules>
                <Mage_Wishlist>
                    <files>
                        <default>Mage_Wishlist.csv</default>
                    </files>
                </Mage_Wishlist>
            </modules>
        </translate>

理论上这样修改后的缺点是丧失了这部分的自由度,之前允许人为指定语言csv文件的文件名就是故意和模块名不一样(多拧巴),修改之后的语言csv文件命名必须和模块名(比如Mage_Wishlist)一致,否则系统会读不到语言文件。我个人人为这种自由度是可以抛弃下的。

如果有哪个第三方插件真的故意设置文件名和模块名不一致的话,要应用这个修改记得改下语言包的文件名。

理论上把系统所有模块的<translate>类配置都删掉的话,对整个系统加载时加载的xml内容量会有一点瘦身的效果,具体我还没测试过,准备等更多配置被约定取代之后再整体测试下性能如何。另外,上面对Mage_Core_Model_Translate的修改只是先实现了用约定来取代部分配置的功能,可能写法上并不是性能最优的,以后再陆续改进性能(如果需要的话)。

语言包部分的配置是改造的第一步,接下来我会继续尝试上篇文章提到的其它可供改造的内容,敬请期待!!

时间: 2024-09-24 15:07:15

“约定优于配置”与Magento改造尝试一之语言包加载的相关文章

“约定优于配置”与Magento改造尝试四之block、helper和model加载

暂定本章为这个系列最后一章,还是继续沿用模块的别名(alias)概念 <modules> <Mage_Wishlist> <version>1.6.0.0</version> <alias>wishlist</alias> </Mage_Wishlist> </modules> 看下Magento一般是怎么定义block.helper和model的别名的 <blocks> <wishlist&

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

上一章讲到语言包加载的改造,这一章准备对布局xml文件的配置下手.把布局xml文件加载的改造放第二章,是因为本章开始会引入一个我自己定义的概念,相比第一章对底层的改动更大. 这个新概念我称之为模块的别名,设置方式如下(修改模块的config.xml): <modules> <Mage_Wishlist> <version>1.6.0.0</version> <alias>wishlist</alias> </Mage_Wishl

“约定优于配置”与Magento

约定优于配置(convention over configuration)[1],也称作按约定编程[2],是一种软件设计范式,旨在减少软件 开发人员需做决定的数量,获得简单的好处,而又不失灵活性. 本质是说,开发人员仅需规定应用中不符约定的部分.例如,如果模型中有个名为Sale的类,那么数据库中对应的表 就会默认命名为sales.只有在偏离这一约定时,例如将该表命名为"products_sold",才需写有关这个名字的配置. 如果您所用工具的约定与你的期待相符,便可省去配置:反之,你可

Struts2 ActionWildcard(通配符配置)约定优于配置

新建web project:struts2_0500_actionwildcard Build Path 项目图: src:                   StudentAction.java TeacherAction.java struts.xml WebRoot: index.jsp Student_add.jsp Student_delete.jsp Student_edit.jsp Student_find.jsp Teacher_add.jsp Teacher_delete.j

magento -- 对版本升级带来的语言包重新修正发点牢骚

magento现在发展迅速,就2010年来说,更新了四个版本,1.4.0.0,1.4.0.1,1.4.1.0,1.4.1.1,这意味着magento功能变得更强大,bug变得更少(这点有争议),对广大使用者来说这当然是好事.但版本更新的同时也意味着语言包也在更新,对于老外和国内拿magento来做外贸站的人来说,这无所谓,用的就是原版的英文语言包,但对于非英语使用者,比如像我这样拿magento做中文站的人来说,语言包的频繁更新就是噩梦,国内的客户不会愿意在界面上看到任何英文,甚至后台也不行.我

约定大于配置--实战

约定优于配置是一个简单的概念. 系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置. 在大部分情况下,你会发现使用框架提供的默认值会让你的项目运行的更快. 零配置并不是完全没有配置,而是通过约定来减少配置, 减少 XML 约定代码结构或命名规范来减少配置数量 如果模型中有个名为Sale的类,那么数据库中对应的表就会默认命名为sale.只有在偏离这一约定时,例如将该表命名为"products_sold",才需写有关这个名字的配置. 比如 EJB3 持久化,将一个特殊的Bean

maven-约定优于配置

             maven是一个高度自动化的构建工具,在很多的项目开发过程中都用到maven,maven主要负责管理项目依赖关系以及jar包.运用了"约定优于配置"的思想,从而提高开发效率和管理秩序.下面谈一下maven中用到的几个重要概念.      一.坐标        什么是坐标?              在几何学上,坐标就是用来确定平面上唯一一个点的标识,而在maven中,坐标用来表示寻找到某个包的标识.        坐标的组成?              几何

android-Glide加载图片后,图片显示模糊,如何配置Glide?

问题描述 Glide加载图片后,图片显示模糊,如何配置Glide? 在项目中使用了Glide加载图片,但是有些图片显示的非常模糊,该如何处理?Glide应该也会像imageloader一样有个配置方法去控制加载图片的质量吧? 解决方案 Glide加载和显示图片 解决方案二: http://blog.csdn.net/fancylovejava/article/details/44747759 解决方案三: 确定不是图片本身很模糊?

Asea:一个轻量级的AS3模块配置与加载管理库

代码已经托管到github:https://github.com/boycy815/asea 该库的设计最初是为了方便配置RSL,后来发现功能逐渐与Spring接近,所以干脆对功能重新规划了一次取名为Asea,在AS3上实现了基本的IOC功能. 以下内容让您学会如何使用Asea. 一. Hello World package { import com.alibado.asea.*; import flash.display.Sprite; public class AseaTest extend