首页 文章

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

提问于
浏览
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 方法是否按照公布的方式从默认的attribute_set加载属性,但是在 save() 之后,新的集合为空 .

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

3 回答

  • 0

    我记得基于默认属性集创建属性集的问题是,您需要在调用 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();
    
  • 0

    请注意,安装类需要扩展

    Mage_Catalog_Model_Resource_Eav_Mysql4_Setup
    

    以便

    $oEntitySetup->getEntityTypeId('catalog_product');
    

    可以叫 .

  • 5

    我使用了JürgenThelen的答案 .

    但我发现新的属性集没有默认选项和选项组,如一般和发票等 .

    所以为了解决这个问题,请在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.');
    }
    

相关问题