我想使用高级表单进行搜索,但是使用mysql OR语句而不是AND语句。
例如,我在产品名称字段中搜索产品“A”,在产品类型字段中搜索“B”。搜索结果必须是A OR B.
我也改变了条件
系统>配置>目录>目录>目录搜索>搜索类型
搜索Type = LIKE
但那不行,所以还有其他方法可以解决这个问题吗?
答案 0 :(得分:0)
您需要在自定义模块中重写
Mage_CatalogSearch_Model_Resource_Advanced_Collection
(\ app \ code \ core \ Mage \ CatalogSearch \ Model \ Resource \ Advanced \ Collection.php)
并替换为addFieldsToFilter
方法的结尾(Magento 1.7.0.2上的第132行)
if (!is_null($previousSelect)) {
$select->where('t1.entity_id IN (?)', new Zend_Db_Expr($previousSelect));
}
通过
if (!is_null($previousSelect)) {
$select->orWhere('t1.entity_id IN (?)', new Zend_Db_Expr($previousSelect));
}
使用orWhere
代替where
会将下一个条件添加为查询的OR。
我没有对它进行过如此多的测试,所以根据属性类型可能会有一些技巧,但它似乎与文本属性相关。
更新表示您需要在Magento 1.7.0.2上的第191行扩展(或修改用于测试目的)Mage_CatalogSearch_Model_Resource_Advanced
和更改addIndexableAttributeModifiedFilter
方法的下拉属性
$select->where("{$tableAlias}.value IN(?)", $value);
通过
$select->orWhere("{$tableAlias}.value IN(?)", $value);
请注意,这远非完整的解决方案,因为它在混合文本和dropdonws时不起作用。实现完整的OR应该稍微复杂一些,因为在添加过滤器时可能需要检查现有条件。
干杯