Magento 重写总结 (三)

piaoling  2011-07-13 16:18:10

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

类别 :  magento(258)  |  浏览(3484)  |  评论(0)
发表评论(评论将通过邮件发给作者):

Email: