2013-03-20 12 views
7

मेरे पास एक मौजूदा एक एम्बेड कोड के लिए विशेषता है। मुझे इस विशेषता को 120+ मौजूदा विशेषता सेट के साथ जोड़ना होगा।सभी विशेषता सेट में मौजूदा विशेषता जोड़ना

यदि मुझे विशेषता सेट आईडी पता है, तो मैं प्रोग्रामेटिक रूप से सभी विशेषता सेट में विशेषता जोड़ने के बारे में कैसे जा सकता हूं?

+0

क्या आपके पास सामान्य विशेषता समूह (जैसे सामान्य/मेटा/आदि) है, जिसमें आप विशेषता जोड़ना चाहते हैं? – Meabed

+0

@Meabed हम करते हैं, हालांकि सभी उत्पादों को विशिष्ट (और अलग) विशेषता सेट को सौंपा गया है। हालांकि सभी विशेषता सेटों में यह विशिष्ट विशेषता होना आवश्यक है। तो मुझे बड़े पैमाने पर अद्यतन करने का रास्ता खोजना है। –

उत्तर

21

मैं इसे दिलचस्प तो यहां इस समस्या के कोड लिखने के लिए मिल गया है समाधान है कि काम करता है :) mage.php सहित PHP स्क्रिप्ट में इस कोड

भागो और मुझे पता है अगर यह अच्छी तरह से काम करता है है।

replace (firstname) with the attribute code that you want to mass add to all attribute sets

$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"; 
    } 
+0

एक आकर्षण की तरह काम किया, हालांकि मैं स्थिति निर्धारित करने का कोई तरीका होने पर उम्मीद कर रहा हूं (सोच रहा हूं)। आदर्श रूप से, मैं इसे सामान्य खंड की अंतिम वस्तु के रूप में पसंद करूंगा। क्या यह संभव है? स्क्रीनशॉट: http://cl.ly/image/0O0H0x0E2h05। बहुत बहुत धन्यवाद! –

+1

टैब में स्थिति बदलें -> setSortOrder (10) // इस 10 को उच्च संख्या में बदलें! – Meabed

+0

उच्च संख्या सॉर्ट ऑर्डर सेट करेगी, इसलिए मैं यह सुनिश्चित कर सकता हूं कि यह नीचे है। हालांकि सामान्य समूह का चयन करने का कोई स्पष्ट तरीका नहीं है। अभी ऐसा लगता है कि आप इसका उपयोग कर रहे हैं -> getFirstItem(), जिसके लिए सामान्य समूह हमेशा पहले होना चाहिए। क्या केवल सामान्य समूह का चयन करने का कोई तरीका है? एक बार फिर धन्यवाद! –

2
ऊपर कोड के साथ समस्या हो लोगों के लिए

,

की तरह:() एक गैर वस्तु पर

एक सदस्य समारोह getModelInstance करने के लिए कॉल करने के लिए आप के लिए निम्न जोड़ने की जरूरत आपकी फ़ाइल के शीर्ष:

include 'app/Mage.php'; 
Mage::app(); 

संपादित करें:

im Magento 1.8.1.0 और कोड का उपयोग अभी भी

मैं $ newItem में निम्न पंक्ति जोड़ने के लिए किया था काम नहीं किया, इस तरह से मान्यता

->setAttributeCode($attCode) 
2

समारोह Mage_Catalog_Model_Resource_Setup::addAttribute() गुजरता इस्तेमाल किया जा सकता अद्यतन करने के साथ ही विशेषताओं को जोड़ने के लिए। एक और चीज जो मुझे उपयोगी लगता है वह यह है कि यदि आप इस फ़ंक्शन के साथ समूह निर्दिष्ट करते हैं तो यह स्वचालित रूप से सभी सेटों को असाइन किया जाता है।

$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 
)); 
+0

1.9.3.1 पर इस विधि को आजमाते समय, मुझे" PHP घातक त्रुटि मिलती है: किसी सदस्य फ़ंक्शन को कॉल करें() ऐप/कोड/कोर/मैज/कोर/लाइन 733 पर मॉडल/संसाधन/Setup.php " – Eric

0

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

का प्रयोग न करें लेकिन

Mage::getResourceModel('catalog/setup', 'catalog_setup'); 
1

का उपयोग आप एक बाहरी स्क्रिप्ट (नहीं Magento स्क्रिप्ट setups) का उपयोग कर रहे हैं, तो यह काम मुझे फार्म

<?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 के उत्तर के रूप में)

संबंधित मुद्दे