模块覆盖magento中的问题

时间:2014-09-11 07:04:59

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

大家好,感谢您的阅读, 我使用magento和插件扩展

  

核心/存储

使用模型

  

插件/存储

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

  

插件/商店

我的自定义模型模型

  

自定义/存储

所以告诉现在,所有视图应该如下结束:

  

核心/商店----被--->覆盖插件/存储----覆盖   --->定制/存储

但如果我致电Mage::getModel('Core/Store');,我会获得

的实例
  

插件/存储

模型。这是因为magento正在阅读Core模块配置,它发现插件/存储覆盖了Core / Store模型,而没有检查插件/存储是否被任何其他模型(在我的情况下是Custom / Store)覆盖。 这意味着所有磁电编码中的所有Mage::getModel('Core/Store');都不会返回

  

自定义/存储

实例,不会使用新开发的功能。 我说对了还是有办法使它有效?

PS:在我的情况下,甚至在通过自定义/存储覆盖插件/存储之后:

  

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

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

3-电话Mage::getModel('Core/Store');将返回插件/存储   实例

1 个答案:

答案 0 :(得分:1)

模块之间的依赖关系

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

e.g。 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安装程序或数据安装程序时,需要创建依赖关系

e.g。 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();

e.g。 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之间的依赖关系。