2015-06-29 54 views
2

我正在开发一个Magento 1.9.1.0项目,并且搜索结果没有以正确的顺序显示。我修改了一个按位置顺序(几乎可行)获取结果的函数,但它似乎首先循环遍历每个类别,按照位置和名称的顺序列出该类别的产品,然后继续前进到下一个类别 - 例如,如果我搜索“a”:Magento搜索结果以错误的顺序排列

防滑浴垫,浴安全条,方形淋浴垫,步行架,(这里是命令中断,因为它进入了一个新类别)闹钟,放大电话。

我会喜欢它已经恢复:

闹钟,扩增电话,洗浴安全条,广场淋浴垫,助行架,防滑浴垫

(防滑浴垫将是最后一个,因为其他所有东西的位置都是0,因为这个产品的位置是10)。

有没有办法可以修改此搜索只显示所有产品,而无需按类别顺序排序?我写要达到什么我迄今为止的功能是:

public function setListOrders() 
{ 
    $category = Mage::getSingleton('catalog/layer') 
     ->getCurrentCategory(); 
    /* @var $category Mage_Catalog_Model_Category */ 
    $availableOrders = $category->getAvailableSortByOptions(); 
    unset($availableOrders['position']); 
    $availableOrders = array_merge(array(
     'relevance' => $this->__('Relevance'), 
     'name' => $this->__('Name'), 
     'position' => $this->__('Position') 
    ), $availableOrders); 

    $this->getListBlock() 
     ->setAvailableOrders($availableOrders) 
     ->setDefaultDirection('asc') 
     ->setSortBy('position'); 
    return $this; 

} 

和...

protected function _getProductCollection() 
{ 
    if (is_null($this->_productCollection)) { 
     $this->_productCollection = $this->getListBlock()->getLoadedProductCollection(); 
    } 

return $this->_productCollection->addAttributeToSort('position')->addAttributeToSort('name'); 

} 

编辑:我试图做到的,是由一个自定义属性的产品进行排序称为“pay_in_store”,但结果似乎以正确的顺序吐出第一类结果,然后检查没有“pay_in_store”选项的结果。然后它跳到下一个类别并执行相同的操作。我不希望在每个类别的基础上 - 我只需要所有产品清空结果。

回答

0

添加下面的代码你local.xml中或在任何layout.xml文件

<catalogsearch_result_index> 
<reference name="search_result_list"> 
    <action method="setDefaultDirection"><param>asc</param></action> 
    <action method="setSortBy"><param>attribute_you_want_to_use</param></action> 
</reference> 
</catalogsearch_result_index> 
+0

我想这原本但它不按位置顺序整个结果进行排序。 –

+0

我试图实现的是按照名为“pay_in_store”的自定义属性对产品进行排序,但结果似乎以正确顺序吐出第一类结果,然后该类别的结果没有选项“pay_in_store”被选中。然后它跳到下一个类别并执行相同的操作。我不希望在每个类别的基础上 - 我只需要所有产品清空结果。 –

+0

在app/code/core/Mage/Catalog/Model/Config.php in function getAttributeUsedForSortByArray()中,添加$ options = array('position'=> Mage :: helper('catalog') - > __('Position' ),'name'=> Mage :: helper('catalog') - > __('Name'));在上面的代码中,在之间添加属性名称。 –