Nasıl Magento aramalarda addAttributeToFilter sıfırlamak

2 Cevap php

Ben sorunları Magento davranmaya bir döngü içinde addAttributeToFilter işlevini alıyorum yaşıyorum. Ben aşağıdaki verilerin tümü için arama desteklemek için benim mağaza test verileri var;

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

Ve benim kod bu kombinasyonları ile aramak için;

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);
}

Bu döngü aşağıdaki sonuçları (biraz zevk veiwing kaIdýrýIdý) verir;

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 ) ) 

So my loop is function and generating the search. However, the values fed into addAttributeToFilter on the first itteration of the loop seem to remain stored for each search. I've tried clearing my search object, for example, unset($searcher) and unset($result). I've also tried magento functions such as getNewEmptyItem(), resetData(), distinct() and clear() but none have the desired effect.

Temelde ne yapmaya çalışıyorum benim senaryom programatically bu kombinasyonları niteliği olan bir ürün yaratmak için çalışır önce yinelenen ürünler için kontrol etmektir. Öznitelik seçimleri dizisi dolayısıyla değişen boyutlarda bir döngü için ihtiyaç olabilir.

Herkes benim sorun biraz ışık tutmak mümkün olabilir eğer ben çok appreiciative olurdu.

2 Cevap

@ RemoveAttributeToSelect aslında ne yazık ki çalışmıyor Matei. Ben bir koleksiyon sıfırlamak için doğru yol olduğunu bugün keşfetti:

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

Bu yüklü _items kaldırmak ve tahsilat select üzerinde herhangi bir where hükümler kaldıracaktır. Daha sonra taze ölçüt eklemek ve load toplama olabilir.

Matei belirttiği gibi burada zaten sorun getSingleton aynı nesneyi almak yatıyor. Ben bu bildirim satırı yerine;

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

İstediğiniz gibi şimdi çalışıyor.