別の属性から継承しながら、プログラムで新しい属性セットを作成する


7

プログラムで属性と属性セットを作成しています。属性は正常に機能しますが、属性セットについては問題があります。

属性セットを作成すると、別のセット(たとえば、デフォルトセット)から継承できなくなります。何度も検索しましたが、さらに役立つ情報は見つかりませんでした。

私が最初に思ったのは、セットを複製して編集できる関数がいくつかあるはずだということです。見つかりませんでした。

私の2番目の考えは、セット全体を再作成することでしたが、属性セットからグループを取得する関数を見つけることができませんでした。

私はMagentoにかなり慣れていないので、何かを逃した場合は申し訳ありませんが、現在は行き詰まっています。どんな解決策/提案でも大歓迎です。

回答:


11

もう一度試してみて、何度もめちゃくちゃにして、最終的に正しい答えを見つけた後、これはうまくいきます:

$entityTypeId = Mage::getModel('catalog/product')
                  ->getResource()
                  ->getEntityType()
                  ->getId(); //product entity type

$attributeSet = Mage::getModel('eav/entity_attribute_set')
                  ->setEntityTypeId($entityTypeId)
                  ->setAttributeSetName("test_set");

$attributeSet->validate();
$attributeSet->save();

$attributeSet->initFromSkeleton($entityTypeId)->save();

保存する前に保存する必要がありますinitFromSekeleton()。それ以外の場合は機能しません。


ロビーが言ったように、あなたはあなたのMage_Catalog_Model_Product_Attribute_Set_Api::createためにこれをすべて行うために使うことができます
Erfan

10

ただのメモですが、属性セットAPIモデルはそれ自体を行うことができます:

$newSetName    = 'My New Set';
$originalSetId = 4; // the set to base the new one off

/** @var Mage_Catalog_Model_Product_Attribute_Set_Api */
Mage::getModel('catalog/product_attribute_set_api')
    ->create($newSetName, $originalSetId);

1
いいね。これははるかに優れたソリューションです。おそらく2年前には存在しなかったでしょう
Erfan

10

属性セットがバックエンドからどのように作成(継承)されるかを確認してください。このメソッドを確認してください:Mage_Adminhtml_Catalog_Product_SetController::saveAction()
そのメソッドには、属性セットを「クローン」する次の行があります。

$model->initFromSkeleton($this->getRequest()->getParam('skeleton_set')); 

->getParam('skeleton_set')複製する属性セットはどこにありますか。基本的には次のようなことをする必要があります:

$cloneSetId = 4;//or anything else
$entityTypeId = Mage::getModel('catalog/product')->getResource()->getTypeId(); //product entity type
$model = Mage::getModel('eav/entity_attribute_set'); //instantiate the model
$model->setEntityTypeId($entityTypeId);//attribute set is used for products
$model->setAttributeSetName('Attribute set name here');//set the attribute set name
$attributeSet->save(); // save before initFromSkeleton
$model->initFromSkeleton($cloneSetId);//clone one attribute set
$model->save();//save the new attribute set
//do other modifications here

うーん、それはこのコードは何とかコピーのみのグループではなく、それらのグループの属性は...と思われる
ディープ冷凍

これは私が何かを逃したかもしれないことを意味します。そのためにinitFromSkeleton方法この行があります$newGroup->setAttributes($newAttributes);。これにより、いくつかの属性が設定されます。有効なセットのクローンを作成していることを確認してください。また、をデバッグMage_Adminhtml_Catalog_Product_SetController::saveAction()してコードでシミュレートすることもできます。その1つが動作するように縫い合わせます。
マリウス

これは有効なIDです(私は既存のデフォルトセットである4を使用しています)が、それを修正するためのものが見つかりません:S
Deep Frozen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.