实际上我的模块正在覆盖两个文件。我的模块覆盖了默认搜索。这是代码: -
<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
{...}
}
我知道这是非常糟糕的方式,但我在想如果管理员禁用该模块,那么上面的文件不应该被覆盖。
我该怎么办?有什么建议吗?
谢谢
答案 0 :(得分:1)
Magento管理员禁用模块实际上是禁用模块输出,并且使用自定义模块它可能无法正常工作。
如果我理解您不希望此模块在管理面板中运行,那么我是正确的:
if( Mage::app()->getStore()->isAdmin() )
{
// Code...
如果您想要条件而不是您的方法是正确的 - 您还可以扩展管理界面以提供在管理面板中编辑模块配置的方法:
http://inchoo.net/magento/create-configuration-for-your-magento-extension/
答案 1 :(得分:1)
有一种方法可以进行条件重写,但我不确定它是否被视为有效的练习。但无论如何,
在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>
在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');
}
}
}