8

埋め込みコードの既存の属性があります。この属性を 120 以上の既存の属性セットに関連付ける必要があります。

属性セット ID がわかっている場合、その属性をすべての属性セットにプログラムで追加するにはどうすればよいですか?

4

6 に答える 6

23

この問題のコードを書くのは面白いと思ったので、これがうまくいく解決策です:)

このコードをmage.phpを含むphpスクリプトで実行し、うまく機能するかどうかを知らせてください。

(firstname)を、すべての属性セットに一括追加する属性コードに置き換えます

    $attSet = Mage::getModel('eav/entity_type')->getCollection()->addFieldToFilter('entity_type_code','catalog_product')->getFirstItem(); // This is because the you adding the attribute to catalog_products entity ( there is different entities in magento ex : catalog_category, order,invoice... etc ) 
    $attSetCollection = Mage::getModel('eav/entity_type')->load($attSet->getId())->getAttributeSetCollection(); // this is the attribute sets associated with this entity 
    $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
        ->setCodeFilter('firstname')
        ->getFirstItem();
    $attCode = $attributeInfo->getAttributeCode();
    $attId = $attributeInfo->getId();
    foreach ($attSetCollection as $a)
    {
        $set = Mage::getModel('eav/entity_attribute_set')->load($a->getId());
        $setId = $set->getId();
        $group = Mage::getModel('eav/entity_attribute_group')->getCollection()->addFieldToFilter('attribute_set_id',$setId)->setOrder('attribute_group_id',"ASC")->getFirstItem();
        $groupId = $group->getId();
        $newItem = Mage::getModel('eav/entity_attribute');
        $newItem->setEntityTypeId($attSet->getId()) // catalog_product eav_entity_type id ( usually 10 )
                  ->setAttributeSetId($setId) // Attribute Set ID
                  ->setAttributeGroupId($groupId) // Attribute Group ID ( usually general or whatever based on the query i automate to get the first attribute group in each attribute set )
                  ->setAttributeId($attId) // Attribute ID that need to be added manually
                  ->setSortOrder(10) // Sort Order for the attribute in the tab form edit
                  ->save()
        ;
        echo "Attribute ".$attCode." Added to Attribute Set ".$set->getAttributeSetName()." in Attribute Group ".$group->getAttributeGroupName()."<br>\n";
    }
于 2013-03-20T18:28:18.897 に答える
2

この関数Mage_Catalog_Model_Resource_Setup::addAttribute()は、属性の追加だけでなく更新にも使用できます。もう 1 つの便利な点は、この関数でグループを指定すると、すべてのセットに自動的に割り当てられることです。

$attributeCode = 'name'; // choose your attribute here
$setup = Mage::getResourceSingleton('catalog/setup');
$setup->addAttribute('catalog_product', $attributeCode, array(
    // no need to specify fields already used like 'label' or 'type'
    'group'      => 'General',
    'sort_order' => 10
));
于 2014-08-29T17:40:23.687 に答える
2

外部スクリプト (magento セットアップ スクリプトではない) を使用している場合、この作業は私から

<?php
/// run in magento root
require_once 'app/Mage.php';
ini_set('display_errors', 1);
error_reporting(E_ALL);
Mage::app();

$attributeCode = 'my_attr_code';
$group = 'MyGroup';
$sortOrder = 10;

//this way you config the setup connections
$setup = new Mage_Catalog_Model_Resource_Setup('catalog_setup');

$setup->startSetup();
$setup->addAttribute('catalog_product', $attributeCode, array(
    'group'      => $group,
    'sort_order' => $sortOrder
));

(@Ericへの回答として)

于 2018-01-12T14:21:44.863 に答える
0

使用禁止

Mage::getResourceSingleton('catalog/setup');

しかし、使用

Mage::getResourceModel('catalog/setup', 'catalog_setup');
于 2018-01-05T13:39:26.817 に答える