我有以下代码,但它显示所有属性选项。我想只显示已分配给产品的那些。我会做什么改变呢?
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $id);
foreach ( $attribute->getSource()->getAllOptions(true) as $option){
echo $option['label'];
}
答案 0 :(得分:1)
getAllOptions
返回一个数组,而我们需要一个集合或查询来处理。第一部分将该集合与相关属性表连接起来,通常手动执行此操作并不是一个好主意所以要小心。
$entity = 'catalog_product';
/* @var $options Mage_Eav_Model_Mysql4_Entity_Attribute_Option_Collection */
$options = Mage::getResourceModel('eav/entity_attribute_option_collection')
->setAttributeFilter($id)
->setStoreFilter(0);
$options->getSelect()->join(
array('ints'=>"{$entity}_entity_int"),
'(ints.value=store_value.value_id) AND (ints.attribute_id=main_table.attribute_id)',
''
)->group('option_id');
现在您可以单步执行选项,
/* @var $option Mage_Eav_Model_Entity_Attribute_Option */
foreach ($options as $option) {
echo $option->getValue();
}
...或转换为数组以返回您开始的位置。
foreach ($options->toOptionArray() as $option) {
echo $option['label'];
}
答案 1 :(得分:0)
这个怎么样:
$product = Mage::getModel("catalog/product")->load(167);
foreach ($product->getOptions() as $o) {
echo "Custom Option TYPE: " . $o->getType() . "<br/>";
echo "Custom Option TITLE: " . $o->getTitle() . "<br/>";
}