簡體   English   中英

如何在Magento搜索中重置addAttributeToFilter

[英]How can I reset addAttributeToFilter in Magento searches

我在循環中獲取addAttributeToFilter函數以在Magento中運行時遇到問題。 我在我的商店中有測試數據,以支持搜索以下所有數據;

$attributeSelections=array( array('size' => 44, 'color' => 67, 'manufacturer' => 17),
                        array('size' => 43, 'color' => 69, 'manufacturer' => 17),
                        array('size' => 42, 'color' => 70, 'manufacturer' => 17));

我的代碼可以搜索這些組合;

foreach ($attributeSelections as $selection) {
    $searcher = Mage::getSingleton('catalogsearch/advanced')->getProductCollection();
    foreach ($selection as $k => $v) {
        $searcher->addAttributeToFilter("$k", array('eq' => "$v"));
        echo "$k: $v<br />";
    }
    $result=$searcher->getData();
    print_r($result);
}

這個循環給出了以下結果(稍微消毒了veiwing樂趣);

size: 44
color: 67
manufacturer: 17
Array ( [0] => Array ( [entity_id] => 2965 [entity_type_id] => 4 [attribute_set_id] => 28 [type_id] => simple [sku] => 1006-0001 [size] => 44 [color] => 67 [manufacturer] => 17 ) ) 

size: 43
color: 69
manufacturer: 17
Array ( [0] => Array ( [entity_id] => 2965 [entity_type_id] => 4 [attribute_set_id] => 28 [type_id] => simple [sku] => 1006-0001 [size] => 44 [color] => 67 [manufacturer] => 17 ) ) 

size: 42
color: 70
manufacturer: 17
Array ( [0] => Array ( [entity_id] => 2965 [entity_type_id] => 4 [attribute_set_id] => 28 [type_id] => simple [sku] => 1006-0001 [size] => 44 [color] => 67 [manufacturer] => 17 ) ) 

所以我的循環是功能並生成搜索。 但是,在循環的第一次迭代中輸入addAttributeToFilter的值似乎仍然存儲在每次搜索中。 我已經嘗試清除我的搜索對象,例如,unset($ searcher)和unset($ result)。 我也嘗試了magento函數,如getNewEmptyItem(),resetData(),distinct()和clear(),但沒有一個具有所需的效果。

基本上我要做的是在我的腳本嘗試以編程方式創建具有這些屬性組合的產品之前檢查重復的產品。 屬性選擇數組可以具有不同的大小,因此需要循環。

如果有人能夠對我的問題有所了解,我會非常樂觀。

@matei不幸的是,removeAttributeToSelect實際上並不起作用。 我今天發現重置集合的正確方法是:

$searcher->clear()
         ->getSelect()->reset('where');

這將刪除加載的_items ,並刪除集合選擇中的任何where子句。 然后,您可以添加新標准並load集合。

單身人士的重點是每次都獲得相同的對象,因此無法解釋$ searcher不起作用。 您可以使用

$searcher->removeAttributeToSelect($k)
刪除每個屬性過濾器。

正如matei已經指出的那樣,問題在於getSingleton檢索同一個對象。 我替換了這個聲明行;

$searcher = Mage::getModel('catalogsearch/advanced')->getProductCollection();

它現在可以按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM