Magento - 如何仅显示分配给产品的属性?

时间:2011-03-08 21:16:26

标签: magento attributes product

我有以下代码,但它显示所有属性选项。我想只显示已分配给产品的那些。我会做什么改变呢?

  $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $id);  
  foreach ( $attribute->getSource()->getAllOptions(true) as $option){
      echo $option['label'];
  }

2 个答案:

答案 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/>";
    }