通过magento编码为所有属性集分配新属性

时间:2012-09-19 09:57:43

标签: magento attributes magento-1.7

我创建了一个新属性(“例如my_attribute”)。 Magento的商店已经有很多属性集(大约20个)。 如果我手动将属性添加到集合中,这是一个非常耗时的过程,因为我的服务器非常慢。 我想以编程方式将这个新属性(“my_attribute”)分配给所有属性集。

任何人都可以帮助我吗?

提前致谢。

5 个答案:

答案 0 :(得分:9)

这很简单。在自定义模块设置脚本中:

$installer = Mage::getResourceModel('catalog/setup','default_setup');
$installer->startSetup();

$installer->addAttribute(
     'catalog_product',
     'your_attribute_code',
     array(
         'label' => 'Attribute Label',
         'group' => 'General', // this will add to all attribute sets in the General group
         // ...
     )
)

$installer->endSetup();

有关其他实用程序,请参阅Mage_Eav_Model_Entity_Setup

答案 1 :(得分:4)

这是一些快速,肮脏和未经测试的东西:)

<?php
$attributeId = ID_HERE;
$installer = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');
$entityType = Mage::getModel('catalog/product')->getResource()->getEntityType();
$collection = Mage::getResourceModel('eav/entity_attribute_set_collection')
->setEntityTypeFilter($entityType->getId());

foreach ($collection as $attributeSet) {
    $attributeGroupId = $installer->getDefaultAttributeGroupId('catalog_product',     $attributeSet->getId());
    $installer->addAttributeToSet('catalog_product', $attributeSet->getId(), $attributeGroupId, $attributeId);
}

答案 2 :(得分:3)

$installer = Mage::getResourceModel('catalog/setup','default_setup');
$installer->startSetup();

$attributeCode = 'my_attribute';
$entity = Mage_Catalog_Model_Product::ENTITY;

// create a new attribute if it doesn't exist
$existingAttribute = $installer->getAttribute($entity, $attributeCode);
if (empty($existingAttribute)) {
    $installer->addAttribute($entity, $attributeCode, array(<configure your attribute here>));
}

$attributeId = $installer->getAttributeId($entity, $attributeCode);

// add it to all attribute sets' default group
foreach ($installer->getAllAttributeSetIds($entity) as $setId) {
    $installer->addAttributeToSet(
        $entity, 
        $setId, 
        $installer->getDefaultAttributeGroupId($entity, $setId), 
        $attributeId
    );
}

$installer->endSetup();

答案 3 :(得分:1)

由于属性未分配任何属性集,您可以删除您创建的属性,然后以编程方式创建所需属性。

在Magento wiki的Programmatically Adding Attributes and Attribute Sets Section中,它将createAttribute描述为将解决您的问题的函数,因为它将创建属性并将它们分配给属性集。

希望这有助于!!

答案 4 :(得分:0)

此外,从上述类扩展的Mage_Eav_Model_Entity_SetupMage_Catalog_Model_Resource_Setup具有创建属性,集合和组所需的所有方法。它们相当简单,它们将帮助您了解您应该如何正确地执行此操作并防止您编写错误或冗余的代码。我发现大多数文章都在互联网上流传,甚至Magento自己的wiki条目也都写得很差。