यहाँ विन्यास उत्पाद से एक विशेषता को हटाने के लिए मेरे लिए क्या काम करना है।
यह परिदृश्य है। लगभग
सभी विन्यास योग्य उत्पादों को 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
मूल्य प्राप्त करने के लिए एक विन्यास योग्य उत्पाद के सभी सरल उत्पादों को प्राप्त करने की आवश्यकता नहीं है , लेकिन मैंने परेशान नहीं किया।