Пользовательский фильтр атрибутов по идентификатору параметра, а не по метке


У меня очень странная проблема. Я создал пользовательский атрибут с именем "taille_ecran", что по-английски означает "размер экрана". Метки этого атрибута представляют собой числа, такие как 1.2, 1.6, 2, 5, 6, и т.д....

Когда я пытаюсь добавить пользовательский фильтр, подобный этому:

$_productCollection->addAttributeToSelect('taille_ecran');
$_productCollection->addFieldToFilter(array(
    array('attribute'=>'taille_ecran','lteq'=>$_GET['max_size']),
));

Фильтр фильтрует по параметру_id меток thos в "taille_ecran" вместо значений меток. На самом деле, вот идентификатор моих меток:

31 => 1.2 41 => 5 и т.д....

Когда я пытался получите метки "lteq" ниже 7, результата нет, и когда я пытаюсь 35, я получаю 1 результат, равный 1,2.

Я также пытаюсь напечатать это значение в своем списке продуктов:

echo $_product->getTailleEcran();

// print 31 when it's for 1.2...

Мне очень трудно четко объяснить, что происходит. У меня нет этой проблемы с другим атрибутом.

Заранее спасибо за вашу помощь!

Author: axelparatre, 2013-12-23

3 answers

Попробуйте это:

$attribute = Mage::getSingleton('catalog/config')->getAttribute(Mage_Catalog_Model_Product::ENTITY, 'taille_ecran');
$source = $attribute->getSource();
$optionId = $source->getOptionId($_GET['max_size']);
$_productCollection->addAttributeToFilter('taille_ecran', array('lteq'=>$optionId));
 0
Author: kiatng, 2013-12-25 16:12:42

То, чего вы хотите достичь, не поддерживается magento. Фильтры опций основаны на option id, это означает, что вы не можете фильтровать по значению.

Если вы хотите этого, вам нужно создать свой собственный атрибут, добавить его как decimal и иметь свою собственную исходную модель с value = key, поэтому у вас все еще есть select в бэкэнде, но вы можете фильтровать по значению.

 0
Author: Fabian Blechschmidt, 2013-12-25 17:46:42

Благодаря Фабиану и Киатнгу вот что я сделал, чтобы решить эту проблему. Я создал новый пользовательский атрибут и, помимо выпадающего списка, использовал Цену.

Это позволяет мне не изменять свой исходный код, и теперь он работает.

Надеюсь, это поможет!

 0
Author: axelparatre, 2013-12-26 10:48:42