Цены на уровне продуктов Magento удаляются при обновлении изображений продуктов

#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