我创建了一个脚本来以编程方式更新我的产品图片,但我的脚本会删除$product->save();
上的所有tier_prices
这是我更好的更新脚本:
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?
非常感谢。
答案 0 :(得分:3)
对于那些仍然遇到此问题的人来说,有一个简单的解决方法可以尝试。看起来产品的默认getModel不会读取tierprice数据。要解决此问题,只需调用产品的getTierPrice方法即可加载它。
$tp=$product->getTierPrice();
您无需执行任何其他操作,只需加载即可。然后,当您保存产品时,将保存分层定价数据。
答案 1 :(得分:1)
我遇到了同样的问题。我终于以非常奇怪的方式解决了这个问题,但它确实奏效了。你只需要创建一个“假的”等级:
$tierPrices = array(
'website_id' => 0,
'cust_group' => 2,
'price_qty' => 3,
'price' => 10
);
(请注意,没有[])
然后添加它(它实际上不会添加任何东西),但你需要这样做:
$product->setTierPrice($tierPrices);
最后保存产品:
$product->save();
它会保存您的产品而不会删除旧的套餐价格。希望它有所帮助!!
答案 2 :(得分:0)
你是如何创建$productCollection
的?也许产品没有填充所需的数据(tier_prices),所以save()
持有没有该数据的产品。尝试添加一些属性以使用addAttributeToSelect()
答案 3 :(得分:0)
其他人对这篇文章的评论有助于我找到一个有效的解决方案。对我来说,只需将层级价格设置为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一起使用