Php Magento类方法重写不起作用
我试图覆盖Magento的目录搜索功能,以便它使用“AND”而不是“OR”搜索搜索词 做到这一点的“正确”方法是创建我自己的模块,这就是更新证明。这就是我所做的。不幸的是,这不起作用。未调用更新的方法 以下是配置文件部分:Php Magento类方法重写不起作用,php,magento,magento-1.7,Php,Magento,Magento 1.7,我试图覆盖Magento的目录搜索功能,以便它使用“AND”而不是“OR”搜索搜索词 做到这一点的“正确”方法是创建我自己的模块,这就是更新证明。这就是我所做的。不幸的是,这不起作用。未调用更新的方法 以下是配置文件部分: <global> <models> <catalogsearch> <rewrite> <fulltext&g
<global>
<models>
<catalogsearch>
<rewrite>
<fulltext>MyNameSpace_MyModule_Model_CatalogSearch_Fulltext</fulltext>
</rewrite>
</catalogsearch>
</models>
</global>
我曾在某个地方读到,如果您实际上试图覆盖的类从未使用特定的类“creator”方法调用过,那么进行这种“覆盖”是没有意义的?如果这是真的,这可以解释为什么我的新类方法从未被使用
那么在这种情况下,如何覆盖这个方法呢?我在这里做的对吗?正如Ashley所指出的,您必须尊重您要覆盖的方法的声明。
像这样的东西有用:
class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
{
public function prepareResult($query = null, $object = null, $queryText = null)
{
die('It works...');
}
}
正如Ashley所指出的,您必须尊重您要重写的方法的声明。
像这样的东西有用:
class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
{
public function prepareResult($query = null, $object = null, $queryText = null)
{
die('It works...');
}
}
您的config.xml应该如下所示
<global>
<models>
<catalogsearch>
<rewrite>
<catalogsearch_fulltext>MyNameSpace_MyModule_Model_CatalogSearch_Fulltext</catalogsearch_fulltext>
</rewrite>
</catalogsearch>
</models>
</global>
class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
{
// you should put default declaration of the function here.
// inside the function change the development as you want.
public function prepareResult($query = null)
{
die('It works...');
}
}
您的config.xml应该如下所示
<global>
<models>
<catalogsearch>
<rewrite>
<catalogsearch_fulltext>MyNameSpace_MyModule_Model_CatalogSearch_Fulltext</catalogsearch_fulltext>
</rewrite>
</catalogsearch>
</models>
</global>
class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
{
// you should put default declaration of the function here.
// inside the function change the development as you want.
public function prepareResult($query = null)
{
die('It works...');
}
}
我成功地覆盖了相同的功能查看代码: etc->modules:LevoSoft_CatalogSearch.xml
真的
地方的
我成功地覆盖了相同的功能查看代码:
etc->modules:LevoSoft_CatalogSearch.xml
真的
地方的
您的定义看起来不错。我注意到您在重写的函数中有更多的参数,所以您应该给出这些默认值(默认magento只有$query=null)。是否已清除缓存并检查模块是否显示在已启用的模块中。系统或异常日志中有错误吗?谢谢Ashley-好的,首先-函数声明只是一个剪切粘贴作业-不应该有任何其他参数?!另外-系统或异常日志中没有任何内容。抱歉-也已清除缓存,模块显示为Enabled。您的定义看起来很好。我注意到您在重写的函数中有更多的参数,所以您应该给出这些默认值(默认magento只有$query=null)。是否已清除缓存并检查模块是否显示在已启用的模块中。系统或异常日志中有错误吗?谢谢Ashley-好的,首先-函数声明只是一个剪切粘贴作业-不应该有任何其他参数?!另外-系统或异常日志中没有任何内容。抱歉-也已清除缓存,模块显示为enabledHi-谢谢。对不起,那没什么区别。还有其他想法吗?还有-你为什么要扩展Mage_CatalogSearch_Model_全文而不是Mage_CatalogSearch_Model_Resource_全文?还是没关系?还有-我没有遵循配置文件的逻辑?不应该是标签后面的标签,然后是标签后面的标签吗??在原始catalogsearch文件夹下没有名为catalogsearch的文件夹?@Mat:1。)首先,您应该清楚地标识要覆盖的类。2). 在my config.xml中,核心模型声明的config.xml中使用了节点。而
节点(就在
节点之后)应该在模型类的模型
之后包含类名。3) . 如果你对你的代码非常确定,请确保缓存被禁用或刷新。谢谢你回复我Su1:1)好的,对类的混淆是我问题的一部分,但为了清楚起见-类是Mage\u CatalogSearch\u Model\u Resource\u Fulltext。2) 对不起,这还不清楚。请使用上面给出的类重新确认config.xml节点,好吗?3) 我已经做到了这一点没有改变嗨-谢谢。对不起,那没什么区别。还有其他想法吗?还有-你为什么要扩展Mage_CatalogSearch_Model_全文而不是Mage_CatalogSearch_Model_Resource_全文?还是没关系?还有-我没有遵循配置文件的逻辑?不应该是标签后面的标签,然后是标签后面的标签吗??在原始catalogsearch文件夹下没有名为catalogsearch的文件夹?@Mat:1。)首先,您应该清楚地标识要覆盖的类。2). 在my config.xml中,核心模型声明的config.xml中使用了节点。而
节点(就在
节点之后)应该在模型类的模型
之后包含类名。3) . 如果你对你的代码非常确定,请确保缓存被禁用或刷新。谢谢你回复我Su1:1)好的,对类的混淆是我问题的一部分,但为了清楚起见-类是Mage\u CatalogSearch\u Model\u Resource\u Fulltext。2) 对不起,这还不清楚。请使用上面给出的类重新确认config.xml节点,好吗?3) 我这样做没有任何改变