2

我想使用高级表单进行搜索,但使用 mysql OR 语句而不是 AND 语句。

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

我也改变了条件

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

搜索类型 = LIKE

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

4

1 回答 1

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 添加到查询中。

我没有对它进行太多测试,所以可能有一些取决于属性类型的技巧,但它似乎对文本属性很有效。

更新您需要扩展(或出于测试目的而修改)Mage_CatalogSearch_Model_Resource_Advanced和更改addIndexableAttributeModifiedFilterMagento 1.7.0.2 上第 191 行的方法的下拉属性

$select->where("{$tableAlias}.value IN(?)", $value);

经过

$select->orWhere("{$tableAlias}.value IN(?)", $value);

请注意,这远不是一个完整的解决方案,因为它在混合文本和 dropdonws 时不起作用。实现完整的 OR 应该稍微复杂一些,因为您在添加过滤器时可能必须检查现有条件。

干杯

于 2013-04-11T20:42:54.423 回答