Yapılandırılabilir üründen bir özelliği kaldırmak için benim için hangi dikişler işleyecek.
Bu senaryo.
Yapılandırılabilir tüm brand
ürünler, yaklaşık 200 basit ilişkili ürüne sahip yaklaşık 50 yapılandırılabilir ürün için yapılandırılabilir bir özellik olarak yanlış oluşturuldu .
Yapılandırılabilir bir özellikle ilişkili tüm basit ürünler aynı markaya sahiptir. Fikir, brand
yapılandırılabilir niteliklerden kaldırmak ve onu, basit ürünlerden birinin değeri ile yapılandırılabilir ürüne basit bir özellik olarak atamaktır.
İşte bunu yapan kod. Kod yalnızca bir kez çalıştırılır. Bir yükseltme komut dosyasına veya basit bir php dosyasına eklenebilir.
<?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;
}
}
}
}
Yukarıda listelenen numaralar için, yerel makinemde çalışması yaklaşık 15 saniye sürdü (güçlü değil). Eminim bu optimize edilebilir. Büyük olasılıkla brand
değeri elde etmek için yapılandırılabilir bir ürünün tüm basit ürünlerini almaya gerek yoktur , ama rahatsız etmedim.