Я намагаюся оновити ціну на багато продуктів (більше 10 000). Те, що я роблю зараз, надзвичайно трудомісткий. Який найкращий спосіб переглянути всі продукти та оновити більшість із них?
Спасибі
Я намагаюся оновити ціну на багато продуктів (більше 10 000). Те, що я роблю зараз, надзвичайно трудомісткий. Який найкращий спосіб переглянути всі продукти та оновити більшість із них?
Спасибі
Відповіді:
Привіт Magento надайте атрибут за кодом нижче
$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();
і Mage::getSingleton('catalog/product_action')->updateAttributes()
. Середній показник product_api зайняв 1,7 секунди, а запуск продукту - 1,0 секунди. однак, $product->getResource()->saveAttribute()
тривав середній 0,04 секунди на сер. Спасибі!
$product->getResource()->saveAttribute
дії. ДЯКУЮ!!
Напишіть SQL-запит.
Другий найкращий спосіб (і той, який я рекомендую): \Mage_Catalog_Model_Resource_Product_Action::updateAttributes
Приклад коду від u_maxx:
$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);
Як би це працювало з величинами мультиселектора? Чи додає це значення чи замінює інші попередньо вибрані значення
Мультиселекції зазвичай зберігаються як цілі числа, відокремлені комами, як 27,42,4711
. Тому, якщо ви зміните значення на вимову 1
, інші значення втрачаються. Але те, що ти можеш зробити, - щось на зразок CONCAT(value, ',1')
означає додати нове значення до кінця, відокремлене комою. Я думаю, що навіть якщо ви додасте значення в два рази, це не проблема, тому що Magento фільтрує його наступного разу, коли елемент буде збережено та ігнорує друге значення.
<?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')
на Mage::getModel('catalog/product_action')
такі самі параметри, які були згадані вище.
10k продуктів, використовуйте SQL. EAV просто каламутить води. За запитання - найшвидший спосіб.
Знайти attribute_id
SELECT * FROM eav_attribute where entity_type_id = 4 and attribute_code = 'YOUR_ATTRIBUTE_CODE_HERE'
Оновити знайдений attribute_id
зверху запит.
UPDATE catalog_product_entity_int SET value = 1 WHERE attribute_id = FOUND_ATTRIBUTE_ID
Я вважаю, що ви можете зробити підбір з оновленням, але для простоти зрозуміти два запити SQL найпростіше.
ПРИМІТКА: entity_type_id = 4
це найчастіше записи EAV про продукт. У випадку, якщо вам потрібно буде масово оновити категорію або атрибути клієнта, це буде відрізнятися, а також таблиця, яка оновлюється залежно від типу атрибуту, це ваше оновлення. Крім того, якщо у вас є налаштування кількох магазинів, будьте впевнені та зверніть увагу та станstore_id
Надалі вище відповіді Фабіана, ви можете оновлювати кілька полів одночасно. Наведений нижче приклад містить всього 2 (на складі, стан запасів), але ви можете використовувати скільки завгодно.
$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);