如何在magento中停止覆盖模块的config.xml中的文件?

时间:2015-03-17 06:45:04

标签: magento

实际上我的模块正在覆盖两个文件。我的模块覆盖了默认搜索。这是代码: -

<models>
<catalogsearch>
<rewrite>
<indexer_fulltext>WY_SearchIndex_Model_Catalogsearch_Indexer_Fulltext</indexer_fulltext>
<layer>WY_SearchIndex_Model_Catalogsearch_Layer</layer>
</rewrite>
</catalogsearch>
...

现在我想要的是我正在从admin&amp;中进行模块启用/禁用假设它已从管理员禁用,它不应覆盖上面的那两个文件&amp;因此默认搜索将运行。

现在我不能把ifconfig放在这个config.xml中吗?像这样: -

<models>
<catalogsearch ifconfig="searchsphinx/general/enabledornot">

那么可以做些什么呢?我现在做了什么 - 将条件放在一个文件中,即我的模块的Layer.php文件,如下所示 -

if(!Mage::getStoreConfig('searchsphinx/general/enabledornot'))
{
//This will call default module's search...there is no method inside the below class
    class WY_SearchIndex_Model_Catalogsearch_Layer extends WY_SearchIndex_Model_Catalogsearch_Layer_Extends
    {
    }
}
else
{
//This will call my module's search
class WY_SearchIndex_Model_Catalogsearch_Layer extends WY_SearchIndex_Model_Catalogsearch_Layer_Extends
    {...}
}

我知道这是非常糟糕的方式,但我在想如果管理员禁用该模块,那么上面的文件不应该被覆盖。

我该怎么办?有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分:1)

Magento管理员禁用模块实际上是禁用模块输出,并且使用自定义模块它可能无法正常工作。

如果我理解您不希望此模块在管理面板中运行,那么我是正确的:

if( Mage::app()->getStore()->isAdmin() )
{
    // Code...

如果您想要条件而不是您的方法是正确的 - 您还可以扩展管理界面以提供在管理面板中编辑模块配置的方法:

  

http://inchoo.net/magento/create-configuration-for-your-magento-extension/

答案 1 :(得分:1)

有一种方法可以进行条件重写,但我不确定它是否被视为有效的练习。但无论如何,

  1. 从配置中删除重写
  2. 在config.xml中插入以下内容

    <global>
    ...
        <events>
            <controller_front_init_before>
                <observers>
                    <wy_search_rewrite_classes>
                        <type>model</type>
                        <class>searchsphinx/observer</class>
                        <method>rewriteClasses</method>
                    </wy_search_rewrite_classes>
                </observers>
            </controller_front_init_before>
        </events>
    ...
    </global>
    
  3. 在Model文件夹中创建Observer.php文件(如果没有)

    class WY_SearchIndex_Model_Observer
    {
    
    ...
    
        /**
         * Rewrite necessary classes
         *
         * @param Varien_Event_Observer $observer
         */
        public function rewriteClasses(Varien_Event_Observer $observer)
        {
            $isRewriteEnabled = Mage::getStoreConfig('searchsphinx/general/enabledornot');
            if ($isRewriteEnabled) {
    
                Mage::getConfig()->setNode('global/models/catalogsearch/rewrite/indexer_fulltext',
                    'WY_SearchIndex_Model_Catalogsearch_Indexer_Fulltext');
    
                Mage::getConfig()->setNode('global/models/catalogsearch/rewrite/layer',
                    'WY_SearchIndex_Model_Catalogsearch_Layer');
    
            }
        }
    }