Magento 使用 addAttribtueToFilter 显示自定义属性

Magento display custom attribute using addAttribtueToFilter

我在属性集 "unitSet" 中创建了一个名为 "unit" 的非常简单的属性,其中包含下拉值“/EA”和“/LB” 我已经启用

范围 -> 全局
在产品列表中使用 -> 是
在前端的产品视图页面上可见 -> 是
用于产品列表中的排序 -> yes

<?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>
?>

过滤器似乎根本不起作用?有人可以帮忙吗?

Magento 实际上不会根据实际值(在本例中为“/LB”)过滤下拉属性,而是您必须获取值的 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);
?>