Цены уровня продуктов Magento удаляются при обновлении изображений продуктов - PullRequest
1 голос
/ 24 октября 2011

Я создал скрипт для программного обновления изображений моих продуктов, но мой скрипт удаляет все 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?

Большое спасибо.

Ответы [ 4 ]

3 голосов
/ 17 марта 2014

Для тех из вас, кто все еще сталкивается с этой проблемой, есть простое решение, чтобы попробовать. Похоже, что данные уровня не считываются по умолчанию getModel для продукта. Чтобы это исправить, просто вызовите метод getTierPrice для загрузки продукта.

$tp=$product->getTierPrice();

Вам больше ничего не нужно делать, просто загрузите это. Затем при сохранении продукта сохраняются многоуровневые данные о ценах.

1 голос
/ 17 декабря 2011

Я столкнулся с той же проблемой.Я, наконец, решил это очень странным образом, но это определенно сработало.Вам просто нужно создать «поддельный» уровень:

$tierPrices = array(
              'website_id'  => 0,
              'cust_group'  => 2,
              'price_qty'   => 3,
              'price'       => 10
             );

(обратите внимание, что нет [])

Затем добавьте его (на самом деле ничего не добавится), но вынужно сделать это:

$product->setTierPrice($tierPrices);

И наконец сохранить продукт:

$product->save();

Это сохранит ваш продукт без удаления прежних цен уровня.Надеюсь, это поможет !!

0 голосов
/ 23 августа 2016

Комментарии других к этому посту помогли мне найти решение, которое сработало.Для меня просто установка цены уровня на false - это то, что было необходимо, чтобы предотвратить ее перезапись / изменение.

$product->setTierPrice(false);

Я лично предпочитаю эту опцию некоторым другим решениям, поскольку она чиста, проста, неНе устанавливайте поддельные значения, и это работает.С этой точки зрения я бы предпочел, чтобы решение, представленное GregC, работало, поскольку оно просто загружало цену уровня, но в моем тестировании оно не работало должным образом - цена уровня все еще была удалена.

Вот модифицированная версия кода из ОП.

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

0 голосов
/ 24 октября 2011

Как вы создали это $productCollection?Возможно, продукт не был заполнен необходимыми данными (tier_prices), поэтому save() сохранить продукт без этих данных.Попробуйте добавить некоторые атрибуты для выбора с помощью addAttributeToSelect()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...