前面两篇文章, 我们主要介绍如何对magento核心文件进行重写, 但是如果一个第三方模块已经对某个magento核心文件进行了重写, 因为某种原因, 我们需要扩展另一个模块, 同时这个模块也要对同一核心文件进行重写, 那该怎么办?
今天我们将针对这种情况, 进行详细的探讨, 首先假设这个第三方模块名字叫Matrix_Catalog, 它主要目录结构应该如下:
app/code/local/Matrix/Catalog
app/code/local/ Matrix /Catalog/etc
app/code/local/ Matrix /Catalog/Model
app/code/local/ Matrix /Catalog/Block
假设这个第三方插件已经对magento核心类Mage_Catalog_Model_Product进行了重写, 新的类文件为Matrix_Catalog_Model_Product.php, 根据前两篇文章的介绍, 你肯定知道这个第三方插件的配置文件的结构应该如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?xml version="1.0"?><config> <modules> <Matrix_Catalog> <version>0.0.1</version> </Matrix_Catalog> </modules> <global> <models> <catalog> <rewrite> <product>Matrix_Catalog_Model_Product</product> </rewrite> </catalog> </models> </global></config> |
现在我们需要创建一个配置文件来激活这个插件, /app/etc/modules/Matrix_Catalog.xml
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version="1.0"?><config> <modules> <Matrix_Catalog> <active>true</active> <codePool>local</codePool> <depends> <Mage_Catalog /> </depends> </ Matrix _Catalog> </modules></config> |
这里出现了一对特别的标签, 不知道细心的你注意到没, 对, 就是<.depends>, 它是用来做什么的呢? 它是用来表述模块之间的依存关系的, 在这里表示模块Matrix _Catalog依赖于magento核心模块Mage_Catalog.
假设我们需要开发另一个模块, 同时也要对magneto核心类Mage_Catalog_Model_Product进行重写, 那该怎么办呢, 如果按前两篇的文章进行扩展, 肯定会引起一些不确定的问题, 可能有些同学直接修改第三方插件的文件, 但是这不利于保证模块间的独立性, 和模块间的低耦合的原则….. 其实, 我们还可以通过下面两个步骤达到这个目的:
1.在新模块的config.xml配置文件里, 我们应该这样定义:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?xml version="1.0"?><config> <modules> <Matrix_NewCatalog> <version>0.0.1</version> </Matrix_NewCatalog> </modules> <global> <models> <catalog> <rewrite> <product>Matrix_NewCatalog_Model_Product</product> </rewrite> </catalog> </models> </global></config> |
2.使用depends标签表述依赖关系 在app/etc/modules目录里的配置文件Matrix_NewCatalog.xml:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?xml version="1.0"?><config> <modules> <Matrix_NewCatalog> <active>true</active> <codePool>local</codePool> <depends> <Mage_Catalog /> <Matrix_Catalog /> </depends> </Matrix_NewCatalog> </modules></config> |
现在, magneto将首先加载Matrix_Catalog, 之后_NewCatalog 将通过rewrites Matrix完成加载. 好了, 关于magento重写的一系列文章就到此为止吧…..

