【问题标题】:Magento - Model Override Not Working in local codePoolMagento - 模型覆盖在本地代码池中不起作用
【发布时间】:2014-07-10 21:18:29
【问题描述】:

我正在尝试覆盖 Magento 1.9 的目录层类,以便在长时间查找错误后无法工作:(

日志中没有错误,模块工作正常,除了模型重写。

app/etc/modules/comx_fab.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Comx_Fab>
            <active>true</active>
            <codePool>local</codePool>

        <depends>
                <Mage_Catalog />
        </depends>
        </Comx_Fab>
    </modules>
</config>

app/code/local/Comx/Fab/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Comx_Fab>
            <version>0.2.0</version>
        </Comx_Fab>
    </modules>

    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <product_list_toolbar>Comx_Fab_Catalog_Block_Product_List_Toolbar</product_list_toolbar>
                </rewrite>
            </catalog>
        <page>
        <rewrite>
            <html_topmenu>Comx_Fab_Page_Block_Html_Topmenu</html_topmenu>
        </rewrite>
        </page>
        </blocks>
        <models>
        <catalog>
                <rewrite>
                    <layer>Comx_Fab_Catalog_Model_Layer</layer>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

app/code/local/Comx/Fab/Catalog/Model/Layer.php:

<?php
class Comx_Fab_Catalog_Model_Layer extends Mage_Catalog_Model_Layer {
/**
 * Initialize product collection
 *
 * @param Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection
 * @return Mage_Catalog_Model_Layer
 */
public function prepareProductCollection($collection) {
    exit('Good!');
}
}

已经完成:

  • 缓存刷新,“缓存”文件夹已删除,
  • 将我的 magento 代码与当前的 magento 版本进行比较(无差异)
  • 检查所有者/chmod

相关: Magento: how to override a model in a local module

【问题讨论】:

    标签: php magento magento-1.9


    【解决方案1】:

    您的模块结构中的问题....

    Cong=fig xml 路径和模型 ID 路径中的主要问题

    app/code/local/Comx/Fab/Catalog/Model/Layer.php
    

    应该是

    app/code/local/Comx/Fab/Model/Catalog/Layer.php
    

    还有 根据文件路径改变路径类

    class Comx_Fab_Catalog_Model_Layer extends Mage_Catalog_Model_Layer {
    

    class Comx_Fab_Model_Catalog_Layer extends Mage_Catalog_Model_Layer {

    所有Path结构模块错误和类路径。修改所有Block文件路径

    这里是修改后的config.xml

    <?xml version="1.0"?>
    <config>
        <modules>
            <Comx_Fab>
                <version>0.2.0</version>
            </Comx_Fab>
        </modules>
        <global>
            <blocks>
                <catalog>
                    <rewrite>
                        <product_list_toolbar>Comx_Fab_Block_Catalog_Product_List_Toolbar</product_list_toolbar>
                    </rewrite>
                </catalog>
            <page>
            <rewrite>
                <html_topmenu>Comx_Fab_Block_Page_Html_Topmenu</html_topmenu>
            </rewrite>
            </page>
            </blocks>
            <models>
            <catalog>
                    <rewrite>
                        <layer>Comx_Fab_Model_Catalog_Layer</layer>
                    </rewrite>
                </catalog>
            </models>
        </global>
    </config>
    

    Magento模块结构的更多细节

    http://www.insync.co.in/creating-custom-module-magento/
    https://mementia.com/creating-custom-magento-module/
    http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table
    

    【讨论】:

    • 您好,感谢您的回复。在你提出问题出现之前,我的结构已经是这样了。我刚刚更改了我的文件结构以符合您的描述,我清空了缓存,但它并没有更好地工作。 Magento 简单地忽略了“重写”指令。
    【解决方案2】:

    找到了! :)

    这是扩展冲突!

    如何解决:

    1. 检查扩展与这个免费的 magento 模块冲突:https://marketplace.magento.com/alekseon-modules-conflict-detector.html
    2. 找到冲突的扩展并使用一种解决方案来解决(阅读底部“如何解决冲突?”)
    3. 清除缓存

    就我而言,只需将扩展顺序添加到“依赖”功能中:

    <depends>
        <Mage_Catalog />
        <Trego_Ajaxfilter />
    </depends>
    

    如何解决冲突? 您有 3 个解决冲突的选择:

    1. 将一个冲突文件中的代码合并到另一个文件中,并在一个文件中关闭重写 config.xml
    2. 在一个 config.xml 中关闭重写,然后使冲突的扩展 PHP 文件扩展另一个扩展
    3. 使用使一个扩展依赖于另一个扩展的能力。然后他们将按该顺序重写

    阅读全文: http://www.webshopapps.com/blog/2010/11/resolving-magento-extension-conflicts/

    【讨论】:

      【解决方案3】:

      其他来到这里的人可能会觉得这很有用,尤其是如果他们可以在“禁用模块输出”列表中找到正在加载的模块:管理面板 > 配置 > 高级 > 高级。

      根据您设置本地环境的方式,您可能已经复制到 app/etc/local.xml 的 local.xml 中,其中包含: &lt;disable_local_modules&gt;false&lt;/disable_local_modules&gt;

      这会阻止本地 codePool 中的任何内容运行,但仍会显示在 Disable Module Outputs 列表中。

      【讨论】:

        猜你喜欢
        • 2011-06-26
        • 1970-01-01
        • 2013-02-03
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-15
        相关资源
        最近更新 更多