2012-06-19 20 views
5

属性を作成して既存の属性セットに割り当てるのは解決されていますが、属性セットを作成してデフォルトおよび特定の属性を設定しようとして問題が発生しています。これは、使用中のコードです: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(); 

私はinitfromSkeleton方法が宣伝としてしかしsave()後、新しいセットが空の場合、デフォルトのattribute_setから属性をロードしないことによって、デバッグで確認できます。

セットに新しい属性を追加することは可能ですが、存在し、正しく作成されますが、SKU、価格、名前などはすべて必須であるため、欠落しているデフォルト属性によって使用できなくなります。

答えて

5

は、私はあなたが一度initSkeleton()を呼び出す前に、一度それの後に属性が二回を、設定保存する必要があること、設定されたデフォルトの属性に基づいて属性セットの作成に問題があったことを覚えています。

私はもう正確な理由を覚えていませんが、それはずっと前です。とにかく、ここで私のために働いていたものです:

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

ありがとうJurgen、それは試してみましょう。 Magentoオブジェクトを修正する前に保存する必要がある他のインスタンスを見ましたが、論理的ではありませんが、間違いなく可能です! –

+0

2回セーブすることが私の本当の問題でした。答えをありがとう! – Yorrd

0

そのセットアップクラスが

$oEntitySetup->getEntityTypeId('catalog_product'); 

を呼び出すことができるように

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 

を拡張する必要がある注意してください。

0

私はJürgenThelenの答えを使用しました。

しかし、私はので、この含める$ installer-> getAttributeSetId(「catalog_product」、「デフォルト」)ラウンドを取得する

など新しい属性セットは、一般的な、デフォルトのオプションとオプションのグループを持っていなかったと請求書initFromSkeleton()の

if($attributeSet->validate()) { 
$attributeSet 
    ->save() 
    ->initFromSkeleton($installer->getAttributeSetId('catalog_product', 'default')) 
    ->save(); 
} else { 
die('Attributeset with name ' . $setName . ' already exists.'); 
} 
関連する問題