4

ループ内で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);
}

このループは次の結果をもたらします(見る喜びのためにわずかに消毒されています)。

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)などの検索オブジェクトをクリアしてみました。getNewEmptyItem()、resetData()、distinct()、clear()などのMagento関数も試しましたが、望ましい効果はありません。

基本的に私がやろうとしているのは、スクリプトがこれらの属性の組み合わせで製品をプログラムで作成しようとする前に、重複する製品をチェックすることです。属性選択の配列はさまざまなサイズである可能性があるため、ループが必要です。

誰かが私の問題に光を当てることができれば、私は非常に感謝しています。

4

3 に答える 3

11

@matei removeAttributeToSelectは、残念ながら実際には機能しません。私は今日、コレクションをリセットする正しい方法が次のとおりであることを発見しました。

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

これにより、ロードされたが削除され、コレクションの選択にある句が_itemsすべて削除されます。where次に、基準をフレッシュに追加しload、コレクションを追加できます。

于 2011-10-11T09:43:24.220 に答える
1

シングルトンの要点は、毎回同じオブジェクトを取得することであるため、$searcherの設定を解除しても機能しません。使用できます

$ searcher-> removeAttributeToSelect($ k)
各属性フィルターを削除します。

于 2010-04-23T17:44:55.267 に答える
0

mateiがすでに指摘したように、ここでの問題はgetSingletonが同じオブジェクトを取得することにあります。この宣言行を;に置き換えました。

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

これで、希望どおりに機能します。

于 2010-04-23T18:11:36.223 に答える