前面两篇文章, 我们主要介绍如何对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重写的一系列文章就到此为止吧…..