Magento - 模型覆盖不在本地codePool中工作

时间:2014-05-22 01:53:43

标签: php magento magento-1.9

我试图覆盖Magento 1.9的目录层类,以便在多次查找错误后无法正常工作:(

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

应用程序的/ etc /模块/ 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>

应用程序/代码/本地/ 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>

应用程序/代码/本地/ COMX / FAB /目录/型号/ 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!');
}
}

已经完成:

  • 缓存刷新,&#34;缓存&#34;文件夹已删除,
  • 将我的magento代码与当前的magento版本(无差异)进行比较
  • check owner / chmod

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

3 个答案:

答案 0 :(得分:2)

<强>实测值! :)

它的扩展冲突!

如何解决:

  1. 检查扩展程序与此免费magento模块冲突:https://marketplace.magento.com/alekseon-modules-conflict-detector.html
  2. 找到有冲突的扩展程序并使用一个解决方案进行解决(请阅读底部&#34;如何解决冲突?&#34;)
  3. 清除缓存
  4. 在我的情况下,只需将扩展订单添加到&#34;取决于&#34;能力:

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

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

    1. 将一个冲突文件中的代码合并到另一个文件中,并在一个
    2. 中关闭重写config.xml
    3. 在一个config.xml中关闭重写,然后使冲突的扩展名PHP文件扩展另一个扩展名
    4. 使用该功能可以使一个扩展依赖于另一个扩展。然后他们将按顺序重写
    5. 了解详情: http://www.webshopapps.com/blog/2010/11/resolving-magento-extension-conflicts/

答案 1 :(得分:1)

其他人来到这里可能会发现这很有用,特别是如果他们能够在“禁用模块输出”列表中找到正在加载的模块:管理员面板&gt;配置&gt;高级&gt;高级。

根据您设置本地环境的方式,您可能已复制到app/etc/local.xml中包含以下内容的local.xml中: <disable_local_modules>false</disable_local_modules>

这会阻止本地codePool运行任何内容,但它仍将显示在“禁用模块输出”列表中。

答案 2 :(得分:0)

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

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结构模块都是错误的类路径。修改所有阻止文件路径

这里是修改后的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