2012-06-19 9 views
5

Das Erstellen von Attributen und das Zuweisen zu vorhandenen Attributgruppen ist ein gelöstes Problem, aber wir stoßen auf ein Problem beim Erstellen eines Attributsatzes und das Auffüllen mit Standardattributen und spezifischen Attributen schlägt fehl. Dies ist der Code im Einsatz:Attributset im Magento-Setupskript erstellen

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

ich durch das Debuggen durch, dass die initfromSkeleton Methode der Attribute aus dem Standard attribute_set nicht geladen werden wie in der Werbung überprüfen kann jedoch nach den save(), der neue Satz ist leer.

Das Hinzufügen neuer Attribute zum Set ist möglich, also existiert es und wird korrekt erstellt, aber die fehlenden Standardattribute machen es unbrauchbar, da SKU, Preis, Name usw. alle benötigt werden.

Antwort

5

Ich erinnere mich, dass das Problem mit dem Attribut setzt die Erstellung auf dem Standard-Attribut basiert gesetzt war, dass Sie einmal das Attribut speichern müssen zweimal, bevor initSkeleton() Aufruf und einmal danach.

Ich erinnere mich nicht mehr an den genauen Grund, es ist zu alt. Wie auch immer, hier ist was für mich gearbeitet:

// 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

danke Jürgen, wird es versuchen. Ich habe andere Instanzen gesehen, in denen ein Magento-Objekt vor Änderungen gespeichert werden musste, es ist nicht logisch, aber definitiv möglich! –

+0

Zweimal sparen war das eigentliche Problem für mich. Danke für die Antwort! – Yorrd

0

Bitte beachten Sie, dass das Setup-Klasse

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 

so dass

$oEntitySetup->getEntityTypeId('catalog_product'); 

kann aufgerufen werden, verlängern muss.

0

Ich benutzte Jürgen Thelen Antwort, die funktionierte.

Aber ich fand das neue Attribut nicht Standardoptionen und Optionen Gruppe wie allgemeine haben und Rechnung usw.

So runden diese zu erhalten sind Installer- $> getAttributeSetId (‚catalog_product‘, ‚default‘) in der initFromSkeleton()

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