Ошибка при исключении всех товаров из категории Исправлено

1

Добрый день.

При исключении всех товаров из категории обнаружена следующая ошибка

в файле shopProductsDeleteFromCategory.controller.php

исполняется следующий код

$collection = new shopProductsCollection($hash);
        $offset = 0;
        $count = 100;
        $total_count = $collection->count();

        $all_updated_products = [];
        while ($offset < $total_count) {
            $product_ids = array_keys($collection->getProducts(&#039;*&#039;, $offset, $count));
            $model->deleteProducts($category_id, $product_ids);
            $all_updated_products += $product_ids;
            $offset += count($product_ids);
            if (!$product_ids) {
                break;
            }
        }

Из за того что продукты удаляются сразу в цикле и далее $offset прибавляется на количество полученных товаров, к середине списка товаров получается что $offset превышает оставшееся количество товаров.

Пример: Поставили на удаление из категории 1200 товаров.
Когда удалили уже 600 то в строке 

$product_ids = array_keys($collection->getProducts(&#039;*&#039;, $offset, $count));

мы получим значение $offset = 600 , но товаров уже осталось 600 поэтому $product_ids вернется 0

Решение:
Просто вариант. Всегда $collection->getProducts в место переменной $offset передавать 0
Либо выносить удаление за цикл, предварительно собрав id но не вижу смысла так делать

6 комментариев

  • +1
    Михаил Ушенин Михаил Ушенин Webasyst 11 апреля 2022 18:14 #

    Мы выпустили обновление Shop-Script, в котором исправили исключение товаров из категории. Обновление можно установить в «Инсталлере».

    Проверьте, пожалуйста. Сообщите нам, если проблема сохранилась.

    Спасибо вам за то, что помогаете улучшать программные продукты Webasyst!

    • +1
      Anton F Anton F 12 апреля 2022 00:36 #

      ну такое себе решение - одну ошибку исправили, а на другую забили - не получится так объединить индексные массивы:

      $all_updated_products += $product_ids;
      

      + отсутствие какой-либо оптимизации

      • зачем выгружать все поля товаров, если нужен только id?
      • почему проверка массива происходит в конце, а не в начале?

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 12 апреля 2022 09:01 #

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

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 13 апреля 2022 09:12 #

        Спасибо, передали ваше сообщение разработчикам.

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 5 октября 2022 15:22 #

        Мы выпустили обновление Shop-Script, в котором исправили отображение на дашборде Webasyst информации об исключении большого количества товаров из категории. Обновление можно установить в «Инсталлере».

        Проверьте, пожалуйста. Сообщите нам, если проблема сохранилась.

        Добавить комментарий

        Чтобы добавить комментарий, зарегистрируйтесь или войдите