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);
?>
我在属性集 "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);
?>