Пользовательский фильтр атрибутов по идентификатору параметра, а не по метке
У меня очень странная проблема. Я создал пользовательский атрибут с именем "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...
Мне очень трудно четко объяснить, что происходит. У меня нет этой проблемы с другим атрибутом.
Заранее спасибо за вашу помощь!
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));
То, чего вы хотите достичь, не поддерживается magento. Фильтры опций основаны на option id
, это означает, что вы не можете фильтровать по значению.
Если вы хотите этого, вам нужно создать свой собственный атрибут, добавить его как decimal
и иметь свою собственную исходную модель с value = key
, поэтому у вас все еще есть select
в бэкэнде, но вы можете фильтровать по значению.
Благодаря Фабиану и Киатнгу вот что я сделал, чтобы решить эту проблему. Я создал новый пользовательский атрибут и, помимо выпадающего списка, использовал Цену.
Это позволяет мне не изменять свой исходный код, и теперь он работает.
Надеюсь, это поможет!