【问题标题】:module override issue in magentomagento 中的模块覆盖问题
【发布时间】:2014-09-11 07:04:58
【问题描述】:

大家好,感谢阅读, 我正在使用带有扩展插件的magento

核心/商店

使用模型

插件/商店

模型。现在是时候扩展这个插件并更新模块功能了,所以我想重写

插件/商店

按我的自定义模型建模

自定义/商店

现在告诉大家,整体视图应该如下结束:

Core/Store ---- 被覆盖 ---> Plugin/Store ---- 被覆盖 ---> 自定义/存储

但如果我打电话给Mage::getModel('Core/Store');,我会得到 ​​p> 的实例

插件/商店

模型。那是因为 magento 正在读取核心模块配置,它发现核心/存储模型被插件/存储覆盖,而没有检查插件/存储是否被任何其他模型(在我的例子中是自定义/存储)覆盖。 这意味着所有磁电机代码中的所有Mage::getModel('Core/Store'); 都不会返回

自定义/商店

实例并且不会使用新开发的功能。 我说得对还是有办法让它发挥作用?

PS:在我的情况下,即使在 Custom/Store 覆盖 Plugin/Store 之后:

1- 调用 Mage::app() 将返回一个具有 _stores 数组的对象,并且 其中的所有商店都是插件/商店实例。

2- the call `Mage::getModel('Plugin/Store');` will return Custom/Store instance

3- 调用 Mage::getModel('Core/Store'); 将返回 Plugin/Store 实例

【问题讨论】:

    标签: php magento magento-1.7 overriding magento-1.8


    【解决方案1】:

    模块之间的依赖关系

    1) 扩展Magento核心模块时,需要配置模块之间的依赖关系

    例如app/etc/modules/MyNamespace_Customer.xml:

    <MyNamespace_Customer>
        <active>true</active>
        <codePool>local</codePool>
        <priority>1</priority>
        <depends>
            <Mage_Customer/>
        </depends>
    </MyNamespace_Customer>
    

    2) 在更新 Magento 核心模块实体的自定义模块中创建 SQL 安装程序或数据安装程序时,需要创建依赖项

    例如MyCustomModule中的安装程序:

    $installer = $this;
    $installer->startSetup();
    
    $sqlQuote = 'ALTER TABLE ' . $this->getTable('sales_flat_quote') .
                ' ADD `is_urgent` TINYINT UNSIGNED NOT NULL DEFAULT 0';
    
    $installer->run($sqlOrder);
    $installer->run($sqlQuote);
    
    $installer->endSetup();
    

    例如dependency config(销售报价实体已更改,需要添加与“销售”模块的依赖关系):

    <MyNamespace_MyCustomModule>
        <active>true</active>
        <codePool>local</codePool>
        <priority>1</priority>
        <depends>
            <Mage_Sales/>
        </depends>
    </MyNamespace_MyCustomModule>
    

    3) Magento 核心模块中的Extending/Rewriting a file (model, helper, block, controller) 需要模块之间的依赖关系,否则最后更改的版本将是任意的,您将失去对重写的控制。

    模块依赖关系对于优先考虑SQL 语句的顺序很重要,并且在全新安装时,它们将避免冲突、崩溃或错误的最终数据。

    基于上述,您可以定义模块 Plugin/StoreCustom/Store 之间的依赖关系。

    【讨论】:

    • 感谢您提供信息丰富的回答,但我在新的自定义模块和插件模块之间添加了依赖关系(例如自定义模块配置中的&lt;depends&gt; &lt;new_plugin/&gt; &lt;/depends&gt;
    • 它应该是这样的 Plugin/Store 取决于 Core/StoreCustom/Store 取决于 Plugin/Store
    • 现在就是这样,但与我在问题中解释的一样。
    • 安装模块时,您必须确保它们相互兼容。有时您必须根据需要进行修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多