在magento中使用或条件进行高级搜索

在magento中使用或条件进行高级搜索,magento,Magento,我想用高级表单搜索,但是用mysql或语句而不是AND语句 例如,我在产品名称字段中搜索产品“A”,在产品类型字段中搜索产品“B”。搜索结果必须是A或B 我也改变了条件 系统>配置>目录>目录>目录搜索>搜索类型 搜索类型=LIKE 但这不起作用,所以有其他方法解决这个问题吗?您需要在自定义模块中重写 Mage\u CatalogSearch\u Model\u Resource\u Advanced\u Collection (\app\code\core\Mage\CatalogSearch

我想用高级表单搜索,但是用mysql或语句而不是AND语句

例如,我在产品名称字段中搜索产品“A”,在产品类型字段中搜索产品“B”。搜索结果必须是A或B

我也改变了条件

系统>配置>目录>目录>目录搜索>搜索类型

搜索类型=LIKE


但这不起作用,所以有其他方法解决这个问题吗?

您需要在自定义模块中重写

Mage\u CatalogSearch\u Model\u Resource\u Advanced\u Collection

(\app\code\core\Mage\CatalogSearch\Model\Resource\Advanced\Collection.php)

并替换为
addFieldsToFilter
方法的末尾(Magento 1.7.0.2上的第132行)

使用
或where
而不是
where
将在查询中添加下一个条件

我没有对它进行过太多的测试,所以根据属性类型可能会有一些技巧,但它似乎对文本属性非常有效

更新对于需要扩展(或出于测试目的修改)的下拉属性
Mage\u CatalogSearch\u Model\u Resource\u Advanced
并更改
在Magento 1.7.0.2上第191行添加的dexableAttributeModifiedFilter
方法

if (!is_null($previousSelect)) {
    $select->where('t1.entity_id IN (?)', new Zend_Db_Expr($previousSelect));
}
$select->where("{$tableAlias}.value IN(?)", $value);

请注意,这远不是一个完整的解决方案,因为它在混合文本和删除内容时不起作用。由于在添加过滤器时可能需要检查现有条件,因此实现完全或更复杂


干杯

正如我所说,上述方法仅针对文本属性进行了测试。仅使用下拉列表时,它不会进入
Mage\u CatalogSearch\u Model\u Resource\u Advanced\u Collection
。所以你的属性肯定有问题。首先,你应该确保定期搜索在你的网站上能很好地使用下拉列表。比林说,你可以通过修改
Mage\u CatalogSearch\u Model\u Resource\u Advanced
来实现这一点或下拉列表的条件。我会更新我的答案。
$select->where("{$tableAlias}.value IN(?)", $value);
$select->orWhere("{$tableAlias}.value IN(?)", $value);