我在 Magento 安装的管理区域中对目录搜索进行了扩展,以使搜索结果更好。
如果我有以下产品标题:“Logitech Wireless USB keyboard and mouse”并搜索“wireless mouse”,该产品会出现,但是,如果我搜索“usb mouse keyboard”,它不会出现,因为他们不' 按此顺序出现。我用于修改当前搜索的代码如下。
protected function _addColumnFilterToCollection($column){
$cond = $column->getFilter()->getCondition();
if ($column->getId() == "name" && isset($cond)) {
$filterOrig = $cond['like'];
$filterReplaced = str_replace(" ", "%", $filterOrig);
$newZendDbExpr = new Zend_Db_Expr($filterReplaced);
$modifCond = array('like'=>$newZendDbExpr);
$this->getCollection()->addFieldToFilter($column->getId() , $modifCond);
}elseif ($column->getId() == 'websites') {
$this->getCollection()->joinField('websites',
'catalog/product_website',
'website_id',
'product_id=entity_id',
null,
'left');
}else{
parent::_addColumnFilterToCollection($column);
}
return $this;
}
最佳答案
您应该遍历条件并为每个术语添加like。我会做这样的事情:
if ($column->getId() == "name" && isset($cond)) {
$filtersOrig = explode(' ', $cond['like']);
foreach ($filtersOrig as $filterOrig) {
$filterReplaced = '%' . $filterOrig . '%';
$newZendDbExpr = new Zend_Db_Expr($filterReplaced);
$modifCond = array('like'=>$newZendDbExpr);
$this->getCollection()->addAttributeToFilter($column->getId() , $modifCond);
}
}
关于php - Magento admin catalog 以任何顺序从搜索词中搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36511385/