在Magento安装脚本中创建属性集

Jon*_*Day 5 php attributes magento entity-attribute-value

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

$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();
Run Code Online (Sandbox Code Playgroud)

我可以通过调试验证该initfromSkeleton方法是否按照公布的方式从默认的attribute_set加载属性,但是在之后save(),新的集合为空.

可以在集合中添加新属性,因此它确实存在并且正确创建,但缺少的默认属性使其无法使用,因为SKU,价格,名称等都是必需的.

Jür*_*len 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();
Run Code Online (Sandbox Code Playgroud)