2015-06-29 58 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'));在上面的代碼中,在之間添加屬性名稱。 –