5

属性を作成して既存の属性セットに割り当てることは解決済みの問題ですが、属性セットを作成してデフォルトおよび特定の属性を設定しようとすると失敗するという問題が発生しています。これは使用中のコードです:

$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メソッドがデフォルトの attribute_set から属性をアドバタイズどおりにロードすることをデバッグすることで確認できますが、その後save()、新しいセットは空です。

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

4

3 に答える 3

5

デフォルトの属性セットに基づいて属性セットを作成する際の問題は、属性セットを呼び出す前に 1initSkeleton()、呼び出した後に 1 回、2 回保存する必要があることでした。

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

// 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();
于 2012-06-19T09:40:07.540 に答える
0

setup クラスを拡張する必要があることに注意してください

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup

となることによって

$oEntitySetup->getEntityTypeId('catalog_product');

呼び出すことができます。

于 2013-03-12T13:02:41.947 に答える