2011-07-27 152 views
7

有一個屬性集,我如何獲得它包含的屬性列表(或者更好的是,只是不屬於默認屬性集的自定義屬性)?Magento:如何獲取屬性集屬性?

設置本身可以通過多種方式獲得的屬性,如:我需要使用設置屬性

$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

我相信答案就在這個模型中

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

類是Mage_Catalog_Model_Product_Attribute_Api它似乎有兩種方法。該項目()方法似乎做什麼你問即「檢索指定屬性的屬性設置爲」

我希望幫助:)

+9

我想你的意思是'法師:: getModel('catalog/product_attribute_api') - > items($ setId );','... attribute_set_api'會給出一個'Mage_Catalog_Model_Product_Attribute_Set_Api',對嗎? –

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

獲取屬性設置自己。

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

獲取屬性的屬性設置。

1

我一直在尋找答案,我could'nt找到它,我解決了我的問題與這些行;

 $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); 
2

您不一定需要訪問API類。有一種更自然的方法可用。如果你有一個產品:

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

如果不是:

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

正確的做法:

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

你可以改變資源 '目錄/ product_attribute_collection'(客戶,...) And Set ID $ attributeSetId