Magento 1.x项目做大了后难免会有一些扩展功能是扩展在同一对象上,这样就容易生冲突。2.x版本有namespace,1.x就比较见鬼了,冲突了一般是不会报错的。即便当时不出问题也保不齐哪天你的网站因为刷个缓存就突然挂了或者网站总是很慢或者不稳定之类的。其实很多人诟病magento慢嘛,确实有很明显的瓶颈,但是我觉得只要不是做超级大站很多时候慢是人为原因。绕远了,问题是那么多模块我怎么知道谁冲突了呢?
上工具:FireGento_Debug
安装好后会多出这样一个菜单,点击后会把所有的模块冲突情况列出来,红色的就是不ok的:
找到相应的这2个模块,开始解决办法有三:
一、就是把这2个地方的扩展写到一个里面去,只有一个当然不会冲突了
二、按依赖关系扩展,例如你有2个模块都扩展在同一个Core_Class上面
class Extension_A extends Core_Class
class Extension_B extends Core_Class
那么我们可以这样让B继承基类,A继承B
class Extension_A extends Extension_B
class Extension_B extends Core_Class
当然不要忘记了把config里面之前的rewrite拿掉大概长这样:
<newsletter>
<rewrite>
<subscriber>Extension_A</subscriber>
</rewrite>
</newsletter>
三、直接声明依赖
需要在模块的安装xml里面声明依赖关系:app/etc/modules/extension_B.xml
<config>
<modules>
<Extension_B>
<depends>
<Extension_A/>
</depends>
</Extension_B>
</modules>
</config>
然后扩展关系还是这样
class Extension_B extends Extension_A
class Extension_A extends Core_Class
当然也不要去掉Extension_B的config.xml里面相应的rewrite部分
最后刷新Check rewrites冲突没有了。