产品图片更新时删除Magento产品等级价格

时间:2011-10-24 08:31:18

标签: magento

我创建了一个脚本来以编程方式更新我的产品图片,但我的脚本会删除$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?

非常感谢。

4 个答案:

答案 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一起使用