2011-07-27 10 views
7

Al tener un conjunto de atributos, ¿cómo puedo obtener una lista de los atributos que contiene (o mejor aún, solo los atributos personalizados que no pertenecen al conjunto de atributos Predeterminado)?Magento: cómo obtener los atributos que pertenecen a un conjunto de atributos?

El conjunto de atributos en sí se puede obtener de varias maneras, tales como:

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

Tenga en cuenta que necesito utilizar el conjunto de atributos, así que conseguir la lista de atributos de un producto no es la solución que yo soy buscando.

Respuesta

6

creo que la respuesta está en este modelo

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

La clase es Mage_Catalog_Model_Product_Attribute_Api parece tener dos métodos. Los elementos() métodos parece hacer lo que se pide es decir "recuperar los atributos de atributo especificado SET"

Espero que ayude :)

+9

Creo que te refieres a 'Mage :: getModel ('catalog/product_attribute_api') -> items ($ setId); ',' ... attribute_set_api' daría un 'Mage_Catalog_Model_Product_Attribute_Set_Api', ¿correcto? –

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

Obtiene el atributo establece a sí mismos.

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

Obtiene los atributos dentro establece el atributo.

1

He estado buscando una respuesta, no pude encontrarla y resuelvo mi problema con estas líneas;

 $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

No es necesario acceder necesariamente a la clase API. Hay un enfoque más natural disponible. Si usted tiene un producto:

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

Si no es así:

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

La forma correcta:

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

Puede cambiar 'Catálogo/product_attribute_collection' recursos (cliente, ...) Y Establecer ID $ attributeSetId

Cuestiones relacionadas