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方法确实从广告中的默认属性集加载属性,但是在 之后save(),新集为空。

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

4

3 回答 3

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

我使用了 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.');
}
于 2013-04-25T13:19:12.290 回答
0

请注意安装类需要扩展

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup

以便

$oEntitySetup->getEntityTypeId('catalog_product');

可以调用。

于 2013-03-12T13:02:41.947 回答