创建属性并将其分配给现有属性集是一个已解决的问题,但是我们尝试创建属性集并使用默认属性填充它时遇到了问题,并且特定属性失败了。这是正在使用的代码:
$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、价格、名称等都是必需的。
我记得基于默认属性集创建属性集的问题是,您需要保存两次属性集,一次在调用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();
请注意,安装程序类需要扩展
Mage_Catalog_Model_Resource_Eav_Mysql4_Setup
因此
$oEntitySetup->getEntityTypeId('catalog_product');
可以调用。
我使用了Jürgen Thelen的答案,它有效。
但是我发现新属性集没有默认选项和选项组,例如常规和发票等。
因此,要解决这个问题,请在 initFromSkeleton() 中包含 $installer->getAttributeSetId('catalog_product', 'default')
if($attributeSet->validate()) {
$attributeSet
->save()
->initFromSkeleton($installer->getAttributeSetId('catalog_product', 'default'))
->save();
} else {
die('Attributeset with name ' . $setName . ' already exists.');
}