Я намагаюся оновити ціну на багато продуктів (більше 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);