Fiyatı bir çok ürüne (10.000'den fazla) güncellemeye çalışıyorum. Bunu şu anda yapma şeklim son derece zaman alıcı. Tüm ürünler arasında geçiş yapmanın ve çoğunu güncellemenin en iyi yolu hangisidir?
Teşekkürler
Fiyatı bir çok ürüne (10.000'den fazla) güncellemeye çalışıyorum. Bunu şu anda yapma şeklim son derece zaman alıcı. Tüm ürünler arasında geçiş yapmanın ve çoğunu güncellemenin en iyi yolu hangisidir?
Teşekkürler
Yanıtlar:
Merhaba Magento aşağıdaki kodu kullanarak bir özellik sağlar
$product->setAttributeCode($newValue)
$ProductObject->getResource()->saveAttribute($product, 'attribute_Code');
$product=Mage::getModel('catalog/product')->load($id);
$product->setSpecialFromDate('2010-10-28');
// below code use for time format
$product->setSpecialFromDateIsFormated(true);
$product->getResource()->saveAttribute($product, 'special_from_date');
$productIds = array(1,3,2);
$products = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('entity_id', array('in' => $productIds));
foreach($products as $product)
{
$product->setSpecialFromDate('2010-10-28');
// below code use for time format
$product->setSpecialFromDateIsFormated(true);
$product->getResource()->saveAttribute($product, 'special_from_date');
}
Mage::getSingleton('catalog/product_api')->update();
ve Mage::getSingleton('catalog/product_action')->updateAttributes()
. product_api avg'de 1.7 saniye, product_action avg'da 1.0 saniye sürdü. ancak, $product->getResource()->saveAttribute()
ortalama ort. Teşekkürler!
$product->getResource()->saveAttribute
eylem etrafında döngü gerekir . TEŞEKKÜR!!
Bir SQL Sorgusu yazın.
İkinci en iyi yol (ve önerdiğim): \Mage_Catalog_Model_Resource_Product_Action::updateAttributes
U_maxx tarafından kod örneği:
$allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds();
$attributeCode = 'some_eav_attribute';
$attributeValue = NULL;
$attrData = array( $attributeCode => $attributeValue );
$storeId = 0;
// no reindex:<
Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
// reindex:
Mage::getModel('catalog/product_action')->updateAttributes($allProductIds, $attrData, $storeId);
Bu, çoklu seçim değerleriyle nasıl çalışır? Değeri 'ekler' veya önceden seçilmiş diğer değerlerin üzerine yazar mı?
Çoklu seçimler normalde olduğu gibi virgülle ayrılmış tamsayılar olarak kaydedilir 27,42,4711
. Bu nedenle, değeri söyleyecek şekilde değiştirirseniz 1
, diğer değerler kaybolur. Ancak yapabileceğiniz şey CONCAT(value, ',1')
, virgülle ayrılmış, yeni değeri sonuna eklemek anlamına gelir. Ben düşünüyorum Eğer Magento o madde kaydedilir dahaki sefere filtreler ve ikinci değeri yok sayar çünkü bu, hiçbir sorun, bir değerini iki kez eklemek bile.
<?php $allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds(); $attributeCode = 'some_eav_attribute'; $attributeValue = NULL; $attrData = array( $attributeCode => $attributeValue ); $storeId = 0; Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
Mage::getSingleton('catalog/resource_product_action')
için Mage::getModel('catalog/product_action')
yukarıda belirtilen parametrelerle de değiştirebilirsiniz .
10k ürünlerde SQL kullanın. EAV sadece suları çamurluyor. Soru başına en hızlı yoldur.
Özellik_kimliğini bul
SELECT * FROM eav_attribute where entity_type_id = 4 and attribute_code = 'YOUR_ATTRIBUTE_CODE_HERE'
attribute_id
Yukarıdaki sorgudan bulunan ile güncelleme .
UPDATE catalog_product_entity_int SET value = 1 WHERE attribute_id = FOUND_ATTRIBUTE_ID
Sanırım güncelleme ile bir alt seçim yapabilirsiniz ama sadelik için iki SQL sorguları kavramak kolay.
NOT: entity_type_id = 4
her zaman ürün EAV girişleridir. Toplu güncelleme kategorisini veya müşteri özelliklerini değiştirmeniz gerekiyorsa, bu güncellemenin ne tür bir özellik olduğuna bağlı olarak güncellenen tablo kadar farklı olacaktır. Ayrıca çoklu mağaza kurulumunuz varsa, not edin ve koşullandırınstore_id
Fabian'ın yukarıdaki cevabına ek olarak, aynı anda birden fazla alanı güncelleyebilirsiniz. Aşağıdaki örnekte yalnızca 2 tane (stokta, stok durumu) bulunmaktadır, ancak istediğiniz kadar kullanabilirsiniz.
$product_ids = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToFilter('status', array('eq' => 2)) //only disabled
->getAllIds();
$attrData = [
['attribute_one' => 1],
['attribute_two' => 1]
];
$storeId = 0;
Mage::getSingleton('catalog/resource_product_action')
->updateAttributes($product_ids, $attrData, $storeId);