设置属性后,如何获取其包含的属性列表(或者更好,只是不属于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');
请注意,我需要使用属性集,因此从产品中获取属性列表不是我正在寻找的解决方案。
答案 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);