2012-02-23 3 views
4

я создал атрибут пользовательский выпадающий с именем «by_item», и добавил некоторые опции к нему как «Люкс, Люкс, Джинс» и т.д.Как фильтровать все продукты по атрибуту выпадающего атрибута в magento?

<?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 />"; 


} 

?> 

это дает мне все имена продуктов, которые я посетил много статей, но не попадался какой-либо вопрос :(

+0

Есть ли что-нибудь, что может быть пропало? – atif

ответ

8

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

Что вы хотите, это версия И. Попробуйте это:

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

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

EDIT

Оверлукед, что ОП говорил о атрибуте "Раскрывающийся" (а не текстовое поле).

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

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

id text 
12 Suite 
13 Bridal 
14 Jeans 

и вы хотите фильтровать «Люкс», вы код это так:

$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') 
     ) 
    ); 
+0

tnx @Jurgen thelen, но все равно не повезло :( – atif

+0

Странно.Если я использую это по атрибуту, который я добавил в каталог, он работает правильно. Как вы добавили свой атрибут 'by_item'? –

+0

Это мои варианты соответственно: by_item , Global, Dropdown, No, No, None, All Producs Type, No, Yes, Yes, Yes, Filterable (с результатами), Да, Нет, 0, Да Да, Да. – atif

Смежные вопросы