【问题标题】:Magento display custom attribute using addAttribtueToFilterMagento 使用 addAttribtueToFilter 显示自定义属性
【发布时间】:2015-01-06 18:37:58
【问题描述】:

我在属性集“unitSet”中创建了一个非常简单的属性,称为“unit”,下拉值“/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 的产品。

标签: magento attributes frontend


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2010-11-03
    • 2011-01-15
    • 2014-05-16
    相关资源
    最近更新 更多