#magento
#magento
Вопрос:
Я создал скрипт для программного обновления изображений моих продуктов, но мой скрипт удаляет все tier_prices на $product->save();
Вот мой сценарий обновления билдера :
foreach ($productCollection as $product) {
$formatted_sku = $product->getSku();
$config = $product->getMediaConfig();
// JPG files verification
$jpg_file = $images_folder.$formatted_sku.".".$extension[0];
if (file_exists($jpg_file) ) {
$fileurl = $config->getMediaUrl($jpg_file);
$product->addImageToMediaGallery($jpg_file, $visibility, false, false);
$product->save();
}
}
Как я могу избежать обновления моих tier_prices?
Большое спасибо.
Ответ №1:
Для тех из вас, кто все еще сталкивается с этой проблемой, есть простое решение, которое можно попробовать. Похоже, что данные tierprice не считываются getModel по умолчанию для продукта. Чтобы исправить это, просто вызовите метод getTierPrice продукта, чтобы загрузить его.
$tp=$product->getTierPrice();
Вам не нужно делать ничего другого, просто загрузите его. Затем, когда вы сохраняете продукт, данные о многоуровневых ценах сохраняются.
Ответ №2:
Я сталкиваюсь с той же проблемой. Я, наконец, решил это очень странным образом, но это определенно сработало. Вам просто нужно создать «поддельную» цену уровня:
$tierPrices = array(
'website_id' => 0,
'cust_group' => 2,
'price_qty' => 3,
'price' => 10
);
(обратите внимание, что нет [ ])
Затем добавьте его (на самом деле это ничего не добавит), но вам нужно это сделать:
$product->setTierPrice($tierPrices);
И, наконец, сохраните продукт:
$product->save();
Это сохранит ваш продукт, не удаляя цены старого уровня. Надеюсь, это поможет!!
Комментарии:
1. спасибо, я нашел, что для обновления уровня продуктов вы можете использовать это: $product-> setTierPrice(); $product-> save(); $product-> setTierPrice($ tier); $product-> save();
Ответ №3:
Как вы это создали $productCollection
? Возможно, продукт не был заполнен необходимыми данными (tier_prices), поэтому save()
сохраняйте продукт без этих данных. Попробуйте добавить некоторые атрибуты для выбора с помощью addAttributeToSelect()
Комментарии:
1. В начале я использовал: $ProductCollection =
Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('*');
, а затем добавил->addAttributeToFilter
для тестирования только один продукт, подобный этому: ` $ProductCollection = Mage::getModel(‘catalog / product’)-> getCollection() -> addAttributeToFilter(‘SKU’, ‘SA80 / 80’); `но я всегда получаю один и тот же результат.2. возможно, вам нужно сделать что-то вроде этого
Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('*')->addAttributeToFilter('SKU', 'SA80/80');
3. Мне все еще нужен heeeeeeeeeeeeeeeeeeeeeeeelp !! 🙁
4. Bizboss вы решили это в конце концов? Я запустил скрипт для 500 продуктов и потерял цены на уровне.
Ответ №4:
Комментарии других пользователей к этому сообщению помогли мне найти решение, которое сработало. Для меня простая установка цены уровня в false — это то, что было необходимо, чтобы предотвратить ее перезапись / изменение.
$product->setTierPrice(false);
Лично я предпочитаю этот вариант некоторым другим решениям, поскольку он чистый, простой, не устанавливает поддельных значений и работает. В связи с этим я бы предпочел, чтобы решение, представленное GregC, работало, поскольку оно просто загружает цену уровня, но в моем тестировании это сработало не так, как ожидалось — цена уровня все равно была удалена.
Здесь будет измененная версия кода из OP.
foreach ($productCollection as $product) {
$formatted_sku = $product->getSku();
$config = $product->getMediaConfig();
// JPG files verification
$jpg_file = $images_folder.$formatted_sku.".".$extension[0];
if (file_exists($jpg_file) ) {
$fileurl = $config->getMediaUrl($jpg_file);
$product->addImageToMediaGallery($jpg_file, $visibility, false, false);
$product->setTierPrice(false); // set tier price to false to prevent it from being overwritten
$product->save();
}
}
Этот код был протестирован и использован с Magento EE 1.14.12.0