özellikleri bir ürün listesi için 'varsayılan değeri kullan' olarak ayarlama


10

Görüntüleri bir ürün listesi ve mağaza görünümü listesi için 'varsayılan değeri kullan' olarak ayarlamak istiyorum. Her ürün için ayrı ayrı nasıl yapacağımı biliyorum: setData (attributeName, false) ve böylece ürün listem üzerinde bir döngü yapabilirsiniz. Sorun: Gerçekten çok yavaş.

$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();
        }
    }
}

Bu yüzden Mage :: getSingleton ('katalog / product_action') -> updateAttributes ($ ürünler, $ attrArray, $ store_id); bunun yerine, aynı şeyi ancak bir ürün listesi üzerinden yapması gerekiyordu. Aslında bir şey yapar: tüm görüntülerim şimdi 'görüntü yok' olarak ayarlandı, ancak 'varsayılan değeri kullan' beklendiği gibi değil.

$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);
}

Buralarda birisinin bir fikri varsa, biraz zaman kazanmama yardımcı olabilir! Teşekkürler.

Yanıtlar:


8

Temel olarak, bir öznitelik değerini 'Varsayılan değerleri kullan' olarak ayarlamak, söz konusu öznitelik için, belirli bir ürün için bir mağaza kimliği için veritabanındaki satırı silmeniz gerektiği anlamına gelir.
İşte bunu yapan basit bir çözüm. Veritabanını doğrudan değiştirmeyi gerektirir ve bazı insanlar bunun büyük bir 'Hayır-Hayır' olduğunu söyler, ancak çalışır.

$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);
}

Bu olmalı. Ancak aşırı güvendiğimde ve bu işe yaramazsa, önce veritabanınızı yedekleyin.


1
Çok teşekkürler, artık test etmedim, çünkü artık ihtiyacım yok ve şu an için bir test sunucumuz yok, ancak daha sonra kesin olarak faydalı olacak!
Esteban

Kod için kefil olurum. İyi çalışıyor!
mpw

iyi ve hızlı çalışıyor!
electroid

Magento 2'deki tüm ürün özellikleri için işaretli "Varsayılan değeri kullan" seçeneğini ayarlamak istiyorum, ürün özellikleri değeriyle ilgili sorun yaşıyorum, varsayılan mağaza görünümünde gösteriliyor ancak birkaç özellik işaretli olarak "Varsayılan değeri kullan" olarak ayarlanmamış . Bu nedenle, bu ürün özelliklerinin değerini, ön uçta yansıtmayan tüm mağaza görünümü için güncellediğimde.
Himmat Paliwal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.