在Magento设置脚本中创建属性集


create attribute set in Magento setup script

创建属性并将其分配给现有属性集是一个已解决的问题,但是我们尝试创建属性集并使用默认属性填充它时遇到了问题,并且特定属性失败了。这是正在使用的代码:

$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.');
}