Magento使用addAttribtueToFilter显示自定义属性

时间:2015-01-06 18:37:59

标签: magento attributes frontend

我创建了一个非常简单的属性,名为" 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>
?>
滤镜似乎根本不起作用?有人可以帮忙吗?

1 个答案:

答案 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);
?>