新しい属性を作成しました (「たとえば my_attribute」)。Magento のストアには、すでに多くの属性セット (約 20) があります。サーバーが非常に遅いため、手動で属性をセットに追加すると、非常に時間がかかります。この新しい属性 ("my_attribute") をすべての属性セットにプログラムで割り当てたいと考えています。
誰でも私を助けることができますか?
前もって感謝します。
新しい属性を作成しました (「たとえば my_attribute」)。Magento のストアには、すでに多くの属性セット (約 20) があります。サーバーが非常に遅いため、手動で属性をセットに追加すると、非常に時間がかかります。この新しい属性 ("my_attribute") をすべての属性セットにプログラムで割り当てたいと考えています。
誰でも私を助けることができますか?
前もって感謝します。
とても簡単です。カスタムモジュールセットアップスクリプトの場合:
$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
。
これは、迅速で、汚れていて、テストされていないものです:)
<?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);
}
$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();
属性には属性セットが割り当てられていないため、作成した属性を削除してから、必要な属性をプログラムで作成できます。
Magento wiki のProgrammatically Adding Attributes and Attribute Sets SectioncreateAttribute
では、属性を作成し、それらを属性セットに割り当てるため、問題を解決する関数として説明しています。
お役に立てれば!!
さらに、前述のクラスから拡張されたMage_Eav_Model_Entity_Setup
とMage_Catalog_Model_Resource_Setup
には、属性、セット、およびグループを作成するために必要なすべてのメソッドがあります。それらはかなり単純明快であり、適切に実行する方法を理解するのに役立ち、不適切なコードや冗長なコードを作成するのを防ぐことができます。ほとんどの記事はインターネットに出回っていて、Magento 自身の wiki エントリでさえ、コードの書き方が不十分であることがわかります。