Magento:如何获取属于属性集的属性?

时间:2011-07-27 09:20:56

标签: magento

设置属性后,如何获取其包含的属性列表(或者更好,只是不属于Default属性集的自定义属性)?

属性集本身可以通过多种方式获得,例如:

$entityTypeId = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId();
$attributeSet = Mage::getResourceModel('eav/entity_attribute_set_collection')->setEntityTypeFilter($entityTypeId)->addFilter('attribute_set_name', 'Default');

请注意,我需要使用属性集,因此从产品中获取属性列表不是我正在寻找的解决方案。

6 个答案:

答案 0 :(得分:16)

Mage::getModel('catalog/product_attribute_set_api')->items();

获取属性集。

Mage::getModel('catalog/product_attribute_api')->items($setId);

获取属性集

中的属性。

答案 1 :(得分:6)

我相信答案在于这个模型

Mage::getModel('catalog/product_attribute_set_api')->items($setId);

该类是Mage_Catalog_Model_Product_Attribute_Api它似乎有两种方法。 items()方法似乎按照你的要求进行,即 “从指定的属性集中检索属性”

我希望有帮助:)

答案 2 :(得分:6)

正确的方式:

$attributes = Mage::getResourceModel('catalog/product_attribute_collection')
->setAttributeSetFilter($attributeSetId)
->getItems();
var_dump($attributes);

您可以更改资源'catalog / product_attribute_collection'(客户,...) 并设置ID $ attributeSetId

答案 3 :(得分:3)

关于属性集,以下博客文章中有很多代码片段: http://www.blog.magepsycho.com/playing-with-attribute-set-in-magento/

希望你会发现它们很有用。 感谢

答案 4 :(得分:2)

您不一定需要访问API类。有一种更自然的方法。如果您有产品:

/** @var Mage_Catalog_Model_Product $product **/
$attributes = $product->getTypeInstance(true)->getSetAttributes($product);

如果不是:

$attributes = Mage::getModel('catalog/product')->getResource()
  ->loadAllAttributes()
  ->getSortedAttributes($attributeSetId);

答案 5 :(得分:1)

一直在寻找答案,我找不到它,我用这些方法解决了我的问题;

        $attributeSetId = /* set id */;
        $attributes = array();

        $groups = Mage::getModel('eav/entity_attribute_group')
            ->getResourceCollection()
            ->setAttributeSetFilter($attributeSetId)
            ->setSortOrder()
            ->load();

        foreach ($groups as $node) {

            $nodeChildren = Mage::getResourceModel('catalog/product_attribute_collection')
                ->setAttributeGroupFilter($node->getId())
                //->addFieldToFilter('is_user_defined', true) # I was trying to get user defined attributes.
                ->addVisibleFilter()
                ->load();

            if ($nodeChildren->getSize() > 0) {
                foreach ($nodeChildren->getItems() as $child) {
                    $attr = array(
                        'id'                => $child->getAttributeId(),
                        'text'              => $child->getAttributeCode()
                    );

                    $attributes[] = $attr;
                }
            }
        }

        var_dump($attributes);