2012-06-19 10 views
5

Crear atributos y asignarlos a conjuntos de atributos existentes es un problema resuelto, pero nos encontramos con un problema al tratar de crear un conjunto de atributos y llenarlo con atributos predeterminados y específicos. Este es el código en uso:crear conjunto de atributos en la secuencia de comandos de configuración de Magento

$setup->addAttributeSet('catalog_product', 'women_sizing_denim'); 

$oAttributeSetModel = Mage::getModel("eav/entity_attribute_set") 
     ->load($setup->getAttributeSetId('catalog_product', 'women_sizing_denim')) 
     ->initFromSkeleton($setup->getAttributeSetId('catalog_product', 'default')) 
     ->save(); 

puedo comprobar por la depuración a través de ese método initfromSkeleton no cargar los atributos de la attribute_set por defecto como se anuncia, sin embargo después de la save(), el nuevo conjunto está vacío.

Es posible agregar nuevos atributos al conjunto, por lo que existe y se crea correctamente, pero los atributos predeterminados faltantes lo hacen inutilizable ya que se requieren SKU, precio, nombre, etc.

Respuesta

5

que recordar que el problema con la creación de conjuntos de atributos basados ​​en el atributo predeterminado establecido era, que es necesario guardar el conjunto de atributos dos veces, una vez antes de llamar initSkeleton() y una vez después de ella.

Ya no recuerdo la razón exacta, hace mucho tiempo. De todos modos, esto es lo que funcionó para mí:

// Mage_Eav_Model_Entity_Setup 
$oEntitySetup = $this; 
$oEntitySetup->startSetup(); 

$sNewSetName = 'myset'; 
$iCatalogProductEntityTypeId = (int) $oEntitySetup->getEntityTypeId('catalog_product'); 

$oAttributeset = Mage::getModel('eav/entity_attribute_set') 
    ->setEntityTypeId($iCatalogProductEntityTypeId) 
    ->setAttributeSetName($sNewSetName); 

if ($oAttributeset->validate()) { 
    $oAttributeset 
     ->save() 
     ->initFromSkeleton($iCatalogProductEntityTypeId) 
     ->save(); 
} 
else { 
    die('Attributeset with name ' . $sNewSetName . ' already exists.'); 
} 

$oEntitySetup->endSetup(); 
+0

Gracias Jurgen, le daré una oportunidad. He visto otras instancias donde un objeto Magento necesitaba ser guardado antes de las modificaciones, ¡no es lógico, pero definitivamente posible! –

+0

Ahorrar dos veces fue el verdadero problema para mí. ¡Gracias por la respuesta! – Yorrd

0

Tenga en cuenta que clase de instalación necesita extenderse

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 

modo que

$oEntitySetup->getEntityTypeId('catalog_product'); 

puede ser llamado.

0

Utilicé la respuesta de Jürgen Thelen que funcionó.

Pero encontré el nuevo conjunto de atributos no tienen opciones y opciones predeterminadas grupo como general y factura etc.

Así que para obtener esta ronda incluir $ instalador de> getAttributeSetId ('catalog_product', 'default') en el initFromSkeleton()

if($attributeSet->validate()) { 
$attributeSet 
    ->save() 
    ->initFromSkeleton($installer->getAttributeSetId('catalog_product', 'default')) 
    ->save(); 
} else { 
die('Attributeset with name ' . $setName . ' already exists.'); 
} 
Cuestiones relacionadas