Magento - मौजूदा विन्यास योग्य उत्पादों में गुण जोड़ें / निकालें


18

सही प्रक्रिया क्या है - उत्पाद को हटाने और मौजूदा विन्यास योग्य उत्पादों में विशेषताओं को जोड़ने या हटाने के लिए फिर से शुरू करने के बजाय।

एक विन्यास योग्य उत्पाद बनाते समय आपको यह चुनने के लिए कहा जाता है कि उत्पाद के लिए कौन सी विशेषताओं का उपयोग करना है।

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

इसके साथ किसी भी मदद की सराहना की जाती है - क्योंकि उत्पादों को हटाने से यह सबसे अच्छा तरीका नहीं लगता है। विशेष रूप से कई अन्य चीजें उत्पादों से जुड़ी हैं।


यहां सही उत्तर है: उत्पाद को हटाएं और एक नया बनाएं, लेकिन इस समस्या के समाधान हैं (और मुझे लगता है कि मॉड्यूल) लेकिन मुझे लगता है कि आप अपने आप को Google कर सकते हैं, मेरे पास इसके लिए कोई समाधान नहीं है
फैबियन ब्लेसस्मिट

क्या आपको इसके लिए कोई हल मिला? क्या नीचे उत्तर समाधान है? कृपया एक अद्यतन दें।
फिल्हाल

मैं havent यह अभी तक की कोशिश की। लेकिन मैं बहुत जल्द इसका परीक्षण करूंगा। जवाब देने के लिए बहुत बहुत धन्यवाद - अगर यह काम करता है तो मैं जवाब
दूंगा

जैसे मेरे पास एक रंग विशेषता थी और इसे सभी कॉन्फ़िगर करने योग्य उत्पाद के साथ जोड़ा गया था। इस मामले में कि विशेषता को हटा दिया गया है। ताकि इसकी उस जुड़ी हुई विशेषता का पता न चले और "नोटिस: अनफाइन्ड ऑफ़सेट: 0 / इनहोम / नोट 1son/public_html/vendor/magento/module-configure-product-model/Product/Type/VariationMatrix.php ऑन लाइन में त्रुटि दिखाई जा रही है।" 43 "। इस स्थिति को संभालने के लिए कुछ मदद चाहिए। पहले से धन्यवाद।
भाग्यश्री

जवाबों:


14

यहाँ विन्यास उत्पाद से एक विशेषता को हटाने के लिए मेरे लिए क्या काम करना है।
यह परिदृश्य है। लगभग
सभी विन्यास योग्य उत्पादों को brandलगभग 50 विन्यास योग्य उत्पादों के लिए विन्यास योग्य विशेषता के रूप में लगभग 200 सरल संबद्ध उत्पादों के साथ गलत बनाया गया था ।
एक विन्यास विशेषता से जुड़े सभी सरल उत्पादों में एक ही ब्रांड है। विचार brandविन्यास योग्य विशेषताओं से हटाने और इसे सरल उत्पादों में से एक सरल उत्पाद के मूल्य के साथ विन्यास योग्य उत्पाद के रूप में निर्दिष्ट करना है।
यहाँ कोड है कि यह करता है। कोड केवल एक बार चलाया जाता है। इसे अपग्रेड स्क्रिप्ट या साधारण php फ़ाइल में जोड़ा जा सकता है।

<?php
//==>this is required only if you use a simple php file
error_reporting(E_ALL | E_STRICT);
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app();
//<==

$brand = 'brand';
//get the attribute instance
$brandAttribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $brand);
//if this attribute exists
if ($brandAttribute->getId()){
    //make the attribute apply to al types of products in case it's not
    $brandAttribute->setApplyTo(null);
    $brandAttribute->save();
    $resource = Mage::getSingleton('core/resource');
    //get an object with access to direct queries
    $connection = $resource->getConnection('core_write');
    //get all configurable products - you can specify additional filters here
    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToFilter('type_id', 'configurable');
    foreach ($collection as $product){
        //the configurable attributes are stored in the table 'catalog_product_super_attribute'
        //remove the attribute references from that table. 
        //The constraints will take care of the cleanup.
        $q = "DELETE FROM {$resource->getTableName('catalog_product_super_attribute')}
            WHERE attribute_id = {$brandAttribute->getId()} AND product_id = {$product->getId()}";
        $connection->query($q);
        //get the simple products in the configurable product
        $usedProducts =  $product->getTypeInstance(true)->getUsedProducts(null, $product);
        foreach ($usedProducts as $p){
            //identify the first simple product that has a value for brand 
            //set that value to the configurable product.
            if ($brandValue = $p->getData($brand)){
                Mage::getSingleton('catalog/product_action')
                    ->updateAttributes(array($product->getId()), array($brand=>$brandValue), 0);
                break;
            }
        }
    }
}

ऊपर सूचीबद्ध संख्याओं के लिए, मेरी स्थानीय मशीन (शक्तिशाली नहीं) पर चलने में लगभग 15 सेकंड का समय लगा। मुझे यकीन है कि यह अनुकूलित किया जा सकता है। सबसे शायद brandमूल्य प्राप्त करने के लिए एक विन्यास योग्य उत्पाद के सभी सरल उत्पादों को प्राप्त करने की आवश्यकता नहीं है , लेकिन मैंने परेशान नहीं किया।


2
मुझे नफरत है कि यह इस तरह से किया जाना है और एक ही चीज़ को प्राप्त करने की कोई विधि नहीं है लेकिन जानकारी के लिए धन्यवाद।
वेबनोब

@ मार्स, 1.9 के लिए यह काम करेगा?
मैगनेटो लर्नर

@MagentoLearner। मुझे यकीन नहीं है, लेकिन मुझे पता है कि यह काम करता है।
मेरियस

@ मरियम, बहुत जल्दी जवाब !!! बहुत बहुत धन्यवाद
मैगेंटो लर्नर

@ मार्स, मान लीजिए कि मैं एक सुपर विशेषता जोड़ना चाहता हूं। तालिका में product_id और attribute_id के साथ एक पंक्ति जोड़कर catalog_product_super_attributeकाम किया जाएगा? या फिर मुझे अन्य तालिकाओं को संशोधित करने की आवश्यकता है? जैसे stackoverflow.com/a/13381381/1749007
मैगनेटो लर्नर

5

इसके लिए डेटाबेस का सीधा संपादन आवश्यक है, और Magento का पहला कानून डेटाबेस को सीधे संपादित नहीं करता है

लेकिन अगर आप आगे बढ़ने के लिए पागल हैं, तो कुछ महीने पहले ही StackOverflow पर कवर किया गया था:

ठेस। मैंने CE 1.6.2 पर डीबी वर्कअराउंड हैक के नीचे का परीक्षण किया है और यह काम कर रहा है:

  • विशेषता बनाएँ
  • इसे उपयुक्त विशेषता सेट पर खींचें
  • Db एडिटर या phpmyadmin पर जाएं, 'कैटलॉग_eav_attribute' टेबल और आखिरी में देखें, 'एट्रीब्यूट आईडी' पर ध्यान दें, प्रोडक्ट आईडी पर भी ध्यान दें -> कैटलॉग_प्रोडक्ट_एंटिटी पर जाएं और आपके द्वारा कॉन्फ़िगर किए जाने योग्य प्रोडक्ट के लिए देखें, और एंट्री_ड नोट करें -> product_id है
  • कैटलॉग_प्रोडक्ट_सुपर_ट्रेड पर जाएं और प्रोडक्ट_आईडी और एट्रीब्यूट के साथ नया रिकॉर्ड डालें।
  • कैटलॉग_प्रोडक्ट_सुपर_टैब_लेबेल पर जाएं और उत्पाद_सुपर_ट्रेड_एड के साथ नया रिकॉर्ड डालें और अपनी नई विशेषता का मूल्य, जैसे 'कलर' या 'साइज' जो आपने एडमिन में विशेषता जोड़ते समय इस्तेमाल किया
  • व्यवस्थापक पर वापस जाएं और कॉन्फ़िगर करने योग्य उत्पाद पर क्लिक करें, आप देखेंगे कि आपका कोई भी बच्चा उत्पाद आपके कॉन्फ़िगर करने योग्य उत्पाद से संबद्ध नहीं है।
  • बाल उत्पादों में से एक पर क्लिक करें, और उचित विशेषता मान का चयन करें, आप भी स्क्यू बदल सकते हैं।
  • सभी बाल उत्पादों को निर्यात करें और इसमें नई विशेषता और स्क्यू वैल्यूज़ जोड़ें, इसे वापस आयात करें और आप कर रहे हैं या आपको डेटाफ़्लो का उपयोग किए बिना सभी को मैन्युअल रूप से व्यवस्थापक में बदलना पड़ सकता है।

क्रेडिट: /programming/5658197/add-new-attribute-to-existing-configurable-product-magento

अछूता - YMMV।


2

सभी कॉन्फ़िगर करने योग्य उत्पादों से एक सुपर उत्पाद विशेषता (जैसा कि उन्हें कहा जाता है) को हटाने के लिए, आप डेटाबेस में इस SQL ​​क्वेरी को निष्पादित कर सकते हैं:

DELETE FROM catalog_product_super_attribute
WHERE attribute_id = <id>;

यहाँ, विशेषता_कोड के बारे में eav_attribute तालिका में संग्रहीत विशेषता की आईडी है। तालिका कैटलॉग_प्रोडक्ट_सुपर_टैब उत्पादों को सुपर उत्पाद विशेषताओं से जोड़ता है। आप वहाँ विन्यास उत्पाद बनाने के लिए विशेषताएँ जोड़ और हटा सकते हैं।


1
केवल एक विशिष्ट एकल उत्पाद से सुपर उत्पाद विशेषता को हटाने के लिए आप उपरोक्त SQL क्वेरी को उत्पाद ID पर फ़िल्टर करने के लिए बढ़ा सकते हैं DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
Judder

0

विन्यास योग्य उत्पाद खोलने के लिए गंदे हैक होते हैं, फिर डुप्लिकेट को चुना जाता है, पुरानी और नई विशेषता का चयन करें, डुप्लिकेट SKU के बिना बनाया जाता है, फिर मूल विन्यास योग्य उत्पाद और सरल उत्पादों को हटा दें। उसके बाद आप उसी SKU को डुप्लिकेट कर सकते हैं। फिर आपको बस नए सरल उत्पाद बनाने की आवश्यकता है।

अगर बहुत सारे सरल उत्पाद नहीं हैं तो यह तेजी से काम कर रहा है।


उचित उत्तर नहीं
दीपक राय

0

मैं अभी अपडेट मोड में फ्री मैगमी आयात निर्यात टूल का उपयोग करके इसे अधिक सफाई से प्रबंधित करने में सफल रहा हूं। (समझ संस्करण)

प्रमुख फ़ील्ड निर्यात करें, सरल और कॉन्फ़िगर करने योग्य SKUS पर पुनः कॉन्फ़िगर करने योग्य विशेषताओं को निर्दिष्ट करने के लिए configurable_attributes कॉलम सेटिंग्स बदलें, फिर Magmi का उपयोग करके पुन: आयात करें

एक पूर्व ओरेकल सलाहकार के रूप में, मैं सहमत हूँ कि डेटाबेस के साथ खिलवाड़ न करें, विशेष रूप से मैगेंटो डेटा संरचना के रूप में जटिल - एक उपकरण का उपयोग करने के लिए बेहतर है जिसे ऐसा करने के लिए अच्छी तरह से परीक्षण किया गया है।


0

मुझे एक विन्यास योग्य उत्पाद के लिए "विन्यास योग्य" विशेषताओं में से एक होने से एक विशेषता को हटाने की आवश्यकता थी।

  • कैटलॉग_प्रोडक्ट_सुपर_टैब के बारे में उपरोक्त संदर्भ सही थे। Navicat डेटाबेस टूल का उपयोग करके मैंने क्रमिक रूप से कुछ चीजें कीं।

    परीक्षण के लिए विशेषता को परिवर्तित करें, जिसने इसे अन्य उत्पादों में उपयोग किए जा रहे दूसरे क्षेत्र में बदल दिया। (पुष्टि की कि इस मुद्दे पर रिकॉर्ड था)। नीचे लिखा है, बस के मामले में, रिकॉर्ड डेटा (product_super_attribute_id, product_id, attribute_id, स्थिति) का पूरा सेट

    अंत में रिकॉर्ड को एक साथ हटा दिया।

यही चाल चली। मैंने यह भी ध्यान रखा कि मैंने जो कुछ भी किया है, उसे फिर से करने की आवश्यकता है।

फिर से: "कैटलॉग_प्रोडक्ट_सुपर_ट्रेड" में रिकॉर्ड को हटाने से मेरी समस्या हल हो गई जो ऊपर दूसरों से संबंधित थी।

अतिरिक्त जानकारी: सही "नामित" सूची को नामांकित करने के लिए इसे देखना महत्वपूर्ण है: कैटलॉग_सुपर_ट्रेड_लेबेल -> और उत्पाद_सुपर_ट्रेड_ के माध्यम से सहसंबंधित करें।
मैं एक संबंधित "एट्रिब्यूट_ड" फ़ील्ड (अभी तक खोजने के लिए) खोज रहा था।

"product_super_attribute_id" आपको यह बताने के लिए ट्रिक करता है कि वास्तव में "विशेषता_id" क्या है। (मैं अभी भी "विशेषता_id" के लिए "डिफ़ॉल्ट" डेटा सेट ढूंढना चाहूंगा कि कैसे एक विशेषता को पहली बार डेटाबेस में परिभाषित किया गया है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.