在magento中使用或条件进行高级搜索
我想用高级表单搜索,但是用mysql或语句而不是AND语句 例如,我在产品名称字段中搜索产品“A”,在产品类型字段中搜索产品“B”。搜索结果必须是A或B 我也改变了条件 系统>配置>目录>目录>目录搜索>搜索类型 搜索类型=LIKE在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
但这不起作用,所以有其他方法解决这个问题吗?您需要在自定义模块中重写
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);