Как отфильтровать все продукты по значению пользовательского выпадающего атрибута в magento? - PullRequest
4 голосов
/ 23 февраля 2012

Я создал собственный выпадающий атрибут с именем " by_item " и добавил к нему некоторые параметры, такие как "Люкс, Люкс, Джинсы" и т. Д.

<?php   // get all products
        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('*');

        //filter codition
        $collection->addFieldToFilter(array(
                        array('attribute'=>'by_item','eq'=>"Suite"),
                    ));

        foreach ($collection as $product) {

        var_dump($product->getData());
    }

    ?>

Это даетничего: (

но когда я делаю это:

<?php 
    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection->addAttributeToSelect('*');

    //filter codition
    //$collection->addFieldToFilter(array(
    //                array('attribute'=>'by_item','eq'=>"Suite"),
    //            ));

    foreach ($collection as $product) {
    echo $product->getName() . "<br />";


}

?>

, это дает мне все названия продуктов. Я посетил много статей, но не сталкивался ни с каким вопросом: (

1 Ответ

9 голосов
/ 23 февраля 2012

Это не работает, потому что вы используете версию OR (вложенные массивы) addFieldToFilter().

То, что вы хотите, это версия AND. Попробуйте это:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter('by_item', array('eq' => 'Suite'));

foreach ($collection as $product) {
    var_dump($product->debug());
}

EDIT

Упущено из виду, что ОП говорил об атрибуте «Dropdown» (не текстовое поле).

При использовании addFieldToFilter() для фильтрации по атрибуту «Раскрывающийся список» необходимо использовать значение / идентификатор параметра, но не текст / метку параметра.

Например, если у вашего пользовательского выпадающего атрибута есть эти опции

id    text
12    Suite
13    Bridal
14    Jeans

и вы хотите отфильтровать по "Suite", вы кодируете это так:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter('by_item', array('eq' => '12'));

Вы также можете косвенно использовать текст / метку вашего параметра:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter(
        'by_item',
        array(
            'eq' => Mage::getResourceModel('catalog/product')
                        ->getAttribute('by_item')
                        ->getSource()
                        ->getOptionId('Suite')
        )
    );
...