“约定优于配置”与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的修改只是先实现了用约定来取代部分配置的功能,可能写法上并不是性能最优的,以后再陆续改进性能(如果需要的话)。

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

目录
相关文章
|
11月前
|
Linux 网络安全 开发工具
Git学习笔记(一):基础与应用
本文档详细介绍了如何将本地项目关联到Gitee上的空仓库并上传代码,以及如何验证本机与Git服务器的SSH连接。同时,还概述了Git的基本概念、安装步骤、初始配置、常见命令及如何配置多个SSH-Key,适用于初学者快速上手Git操作。
283 51
Git学习笔记(一):基础与应用
|
存储 自然语言处理 数据可视化
【办公自动化】用Python按时间分割txt文件中的数据
【办公自动化】用Python按时间分割txt文件中的数据
278 1
|
11月前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
358 1
|
11月前
|
缓存 安全 数据安全/隐私保护
在实际应用中,如何根据具体场景选择合适的请求方法?
【10月更文挑战第29天】在实际应用中,需要综合考虑各种因素,如数据的性质、操作的语义、安全性要求、性能优化等,来选择最合适的 HTTP 请求方法。同时,还需要根据具体的业务逻辑和系统架构,对请求方法的使用进行合理的设计和规范,以确保系统的安全、稳定和高效运行。
|
12月前
|
存储 前端开发 NoSQL
拿下奇怪的前端报错(四):1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点
在一个使用MongoDB GridFS存储文件的项目中,音频和视频文件在大部分设备上播放时长显示为无限,而单独播放则正常。经调查发现,问题源于HTTP Range请求的处理不当,导致最后一个字节未被正确返回。通过调整请求参数,使JavaScript/MongoDB的操作范围与HTTP Range一致,最终解决了这一问题。此案例强调了对HTTP协议深入理解及跨系统集成时注意细节的重要性。
251 0
|
数据可视化 SDN Python
广义曼德勃罗特集的探索与交互式可视化
这篇文章介绍了如何使用Python和matplotlib库创建广义曼德勃罗特集的交互式可视化。作者探讨了曼德勃罗特集的基本概念,包括其自相似性和复杂边界,并扩展到广义集合,其中幂运算指数可以是任意复数。通过提供的Python代码示例,读者可以学习如何绘制并实现鼠标驱动的放大缩小功能,从而深入探索这个数学结构的细节。文章鼓励读者修改指数以观察不同形态,并提供了相关参考资料链接。
|
运维 Linux KVM
KVM详解(七)——KVM常用命令详解
KVM详解(七)——KVM常用命令详解
444 5
|
SQL 存储 大数据
大数据Hive Join连接查询
大数据Hive Join连接查询
436 0
|
JSON 负载均衡 前端开发
Spring Cloud Feign 声明式服务调用
通过对前面Spring Cloud Ribbon和 Spring Cloud Hystrix ,我们已经掌握了开发微服务应用时的两个重磅武器,学会了如何在微服务框架中进行服务间的调用和如何使用断路器来保护我们的服务,这两者被作为基础工具类框架广泛的应用在各个微服务框架中。既然这两个组件这么重要,那么有没有更高层次的封装来整合这两个工具以简化开发呢?Spring Cloud Feign就是这样的一个工具,它整合了Spring Cloud Ribbon 和 Spring Cloud Hystrix 来达到简化开发的目的。
188 0
Spring Cloud Feign 声明式服务调用