我创建了一个非常简单的属性,名为" unit"内部属性集" unitSet"与下拉值" / EA" &安培; " / LB" 我启用了
范围 - >全球的
用于产品清单 - >是的
在前端的产品视图页面上可见 - >是的
用于产品列表中的排序 - >是
<?php
$newProducts = Mage::getModel('catalog/category')->load('*')
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('Unit', "/LB") // option 1
->addAttributeToFilter('Unit', 1) // option 2
->addAttributeToFilter('status', 1);
?>
<div class="large-4 columns">
<?php foreach($newProducts as $newProduct): ?>
<?php echo $newProduct->getName(); ?>
<?endforeach?>
</div>
?>
滤镜似乎根本不起作用?有人可以帮忙吗?
答案 0 :(得分:1)
Magento实际上并没有根据实际值(在这种情况下&#39; / LB&#39;)过滤下拉属性,而是必须获取值的id,然后按该值过滤,有很多如何做到这一点,我找到了一个简单的
<?php
$newProducts = Mage::getModel('catalog/category')->load('*')
->getProductCollection()
->addAttributeToSelect('*')
->addFieldToFilter(
'unit',
array('eq' => Mage::getResourceModel('catalog/product')
->getAttribute('unit')
->getSource()
->getOptionId("/LB")
)
);
->addAttributeToFilter('status', 1);
?>
可替换地,
function getAttributeOptionValue($arg_attribute, $arg_value) {
$attribute_model = Mage::getModel('eav/entity_attribute');
$attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
$attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
$attribute = $attribute_model->load($attribute_code);
$attribute_table = $attribute_options_model->setAttribute($attribute);
$options = $attribute_options_model->getAllOptions(false);
foreach($options as $option) {
if ($option['label'] == $arg_value) {
return $option['value'];
}
}
return false;
}
<?php
$newProducts = Mage::getModel('catalog/category')->load('*')
->getProductCollection()
->addAttributeToSelect('*')
->addFieldToFilter(
'unit',
array('eq' => getAttributeOptionValue('unit','/LB')
)
);
->addAttributeToFilter('status', 1);
?>