1

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

谁能帮助我?

提前致谢。

4

5 回答 5

10

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

$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

于 2012-09-19T13:19:52.810 回答
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);
}
于 2012-09-19T10:22:29.750 回答
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();
于 2014-12-11T20:35:42.207 回答
1

由于没有为属性分配任何属性集,因此您可以删除您创建的该属性,然后以编程方式创建所需的属性。

在 Magento wiki 的Programmatically Added Attributes and Attribute Sets 部分中,它描述createAttribute为可以解决您的问题的功能,因为它将创建属性并将它们分配给属性集。

希望这可以帮助!!

于 2012-09-19T10:31:43.273 回答
0

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

于 2014-12-17T19:58:08.120 回答