उत्पादों की सूची के लिए 'डिफ़ॉल्ट मान का उपयोग करने' के लिए विशेषताएँ सेट करें


10

मैं छवियों को उत्पाद की सूची के लिए 'डिफ़ॉल्ट मान का उपयोग करने के लिए' और 'स्टोर व्यू' की सूची के लिए सेट करना चाहता हूं। मुझे पता है कि यह प्रत्येक उत्पाद के लिए व्यक्तिगत रूप से कैसे किया जाता है: सेटडेटा (एट्रिब्यूट, गलत), और इसलिए मैं अपने उत्पाद की सूची पर एक लूप कर सकता हूं। समस्या: यह वास्तव में बहुत धीमी है।

$attrArray=array('thumbnail','small_image','image');
$products = array(170,171,172);
$stores = array(17,18,19);
foreach ($stores as $store_id) {
    foreach ($products as $product_id) {
        foreach ($attrArray as $attr) { 
            $product = Mage::getModel('catalog/product')
            ->load($product_id)->setStoreId($store_id)
            ->setData($attr, false)
            ->save();
        }
    }
}

इसलिए मैंने Mage का उपयोग करने का प्रयास किया है :: getSingleton ('कैटलॉग / product_action') -> updateAttributes ($ उत्पादों, $ attrArray, $ store_id); इसके बजाय, जिसे एक ही काम करना है, लेकिन उत्पादों की सूची पर। यह वास्तव में कुछ करता है: मेरी सभी छवियां अब 'कोई छवि नहीं' पर सेट हैं, लेकिन अपेक्षित रूप से 'डिफ़ॉल्ट मान का उपयोग न करें'।

$attrArray = array('thumbnail'=>false,'small_image'=>false,'image'=>false);
$products = array(170,171,172);
$stores = array(17,18,19);
foreach ($stores as $store_id) {
    Mage::getSingleton('catalog/product_action')
    ->updateAttributes($products, $attrArray, $store_id);
}

अगर यहाँ किसी के पास एक विचार है, तो यह वास्तव में मुझे कुछ समय बचाने में मदद कर सकता है! धन्यवाद।

जवाबों:


8

असल में, 'डिफ़ॉल्ट मानों का उपयोग करें' के लिए एक विशेषता मान सेट करने का मतलब है कि आपको उस विशेषता के लिए डेटाबेस में पंक्ति को हटाना होगा, विशिष्ट उत्पाद के लिए, स्टोर आईडी के लिए।
यहाँ एक सरल उपाय है जो ऐसा करता है। इसे डेटाबेस को सीधे बदलने की आवश्यकता है और कुछ लोग कहेंगे कि यह एक बड़ा 'नहीं-नहीं' है, लेकिन यह काम करता है।

$attrArray=array('thumbnail','small_image','image');
$products = array(170,171,172);
$stores = array(17,18,19);
$productsAsString = implode(',', $products);
$storesAsString = implode(',', $stores);
//get access to the resource
$resource = Mage::getSingleton('core/resource');
//get access to the db write connection
$connection = $resource->getConnection('core_write');
//model for retrieving attributes
$eavConfig = Mage::getModel('eav/config');
$tables = array();
//get the association between attribute ids and the tables where their values are stored
//group them by table name so you will run a single query for each table
foreach ($attrArray as $attributeCode){
    $attribute = $eavConfig->getAttribute('catalog_product', $attributeCode);
    if ($attribute){
        $tableName = $resource->getTableName('catalog/product') . '_' . $attribute->getBackendType();
        $tables[$tableName][] = $attribute->getId();
    }
}
//for each table delete the attribute values in the specified store for the specified products
foreach ($tables as $tableName => $attributeIds){
    $attributeIdsAsString = implode(',', $attributeIds);
    $q = "DELETE FROM {$tableName}
                WHERE
                    attribute_id IN ({$attributeIdsAsString}) AND
                    entity_id IN ({$productsAsString}) AND
                    store_id IN ({$storesAsString})";
    $connection->query($q);
}

यह होना चाहिए। लेकिन अगर मैं अति-आत्मविश्वास में हूं और यह काम नहीं करता है, तो पहले अपने डेटाबेस का बैकअप लें।


1
बहुत बहुत धन्यवाद, मैंने इसे अभी तक परीक्षण नहीं किया है, क्योंकि मुझे अब इसकी आवश्यकता नहीं है और फिलहाल एक परीक्षण सर्वर नहीं है, लेकिन यह बाद में उपयोगी होगा!
एस्टेबन

मैं कोड के लिए वाउच करूंगा। अच्छा काम करता है!
एम पी

यह अच्छी तरह से और तेजी से काम करता है!
इलेक्ट्रोइड

मैं Magento 2 में सभी उत्पाद विशेषताओं के लिए जाँच की गई "डिफ़ॉल्ट मान का उपयोग करें" सेट करना चाहता हूं, मैं उत्पाद विशेषताओं के मूल्य के साथ जारी कर रहा हूं, उन्हें डिफ़ॉल्ट स्टोर दृश्य से दिखाया जा रहा है लेकिन कुछ विशेषताएं "डिफ़ॉल्ट मान" का उपयोग करने के लिए सेट नहीं की गई हैं । इसलिए जब भी मैं इन उत्पाद विशेषताओं को सभी स्टोर दृश्य के लिए अद्यतन करता हूं जो कि दृश्यपटल पर प्रतिबिंबित नहीं होते हैं।
हिम्मत पालीवाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.