Коррекция товаров Есть решение

Привет, ребята!

Вопрос:

Как откорректировать наименование артикулов и их кол-во в режиме выбора характеристик?

Есть ли готовый метод?

1 ответ

  • 3
    Михаил Ушенин Webasyst 26 января 2015 02:56 # Решение

    Можно сделать это вручную в бекенде Shop-Script 5. Этот способ вас не устраивает?

    • +1
      Minya Jam Minya Jam 26 января 2015 03:04 #

      Михаил, спасибо, что отозвались.

      А если их много и заранее не знаешь какие нужно откорректировать?

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 26 января 2015 03:13 #

        Можно обновлять эти значения с помощью импорта CSV-файла (см. секцию "Режим 2: Выбор значений характеристик"). В случае таких артикулов идентификацию артикулов нужно выполнять по их наименованию.

        Советую потренироваться на 1-2 тестовых товарах сначала.

        • +1
          Minya Jam Minya Jam 26 января 2015 03:37 #

          Михаил, Вы меня не совсем правильно поняли.

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

          Какой метод отвечает за формирование списка наименований виртуальных артикулов при сохранении карточки?

          Нашел метод correct в модели shopProduct, но это по всей видимости не то.

          • +1
            Михаил Ушенин Михаил Ушенин Webasyst 26 января 2015 03:55 #

            Так вам нужно восстановить случайно удалённый автоматически созданный артикул, и вы не помните, какой именно был удалён?

            • +1
              Minya Jam Minya Jam 26 января 2015 04:02 #

              Верно.

              • +1
                Михаил Ушенин Михаил Ушенин Webasyst 26 января 2015 06:09 #

                Вроде бы так работает — попробуйте:

                1. В разделе выбора зхначений для автоматически генерируемых артикулов товара включите любое значение, которое ещё не включено и не должно быть включено, и сохраните товар.
                2. При этом должны появиться дополнительные артикулы: тот, который вы удалили, и дополнительные — для того лишнего значения, которое вы включили в шаге 1.
                3. Обратно отключите значение, выбранное в шаге 1, и снова сохраните товар. После этого лишние артикулы должны исчезнуть, а тот, который вам нужно было восстановить, останется.
                • +1
                  Minya Jam Minya Jam 26 января 2015 06:12 #

                  А если их много и заранее не знаешь какие нужно откорректировать?

                  • +1
                    Михаил Ушенин Михаил Ушенин Webasyst 26 января 2015 06:16 #

                    Обычно, если автоматически сгенерированные артикулы удалены, галочки для их значений всё равно остаются включенными. Просто попробуйте предложенный мной способ и сообщите о результатах.

                    • +1
                      Minya Jam Minya Jam 26 января 2015 06:41 #

                      Способ то рабочий.

                      Меня интересует как-раз тот метод, который отвечает за формирование этих списков, сгенерированных артикулов, чтобы не искать среди 8000 товаров.

      • +2

        Если я правильно понял, вы спрашиваете про
        shopProductFeaturesSelectableModel->generateSku()

        Как этим пользоваться, разобраться будет очень непросто. Но если воля ваша сильна и крепка, можно попробовать. Навтыкайте отладочного кода внутри shopProductFeaturesSelectableModel->setData() и посохраняйте в админке товары в режиме выбора характеристик. Так проще всего узнать, что там внутри каких переменных.

        • +1
          Minya Jam Minya Jam 26 января 2015 09:01 #

          Спасибо, Леонид, Вы как всегда стреляете точно в цель :).

          • +1
            Minya Jam Minya Jam 27 января 2015 14:29 #

            Действительно непросто.

            Уже сутки долблюсь.

            Не понимаю, как повторно сгенерировать дополнительные артикулы.

            Пытаюсь сделать так:

            $p = new shopProduct($pid);

            $feus_model = new shopProductFeaturesSelectableModel();

            $features_selectable = $feus_model ->getByProduct($pid)

            $p->__set('tags',array());
            $p->__set('params','');
            $p->__set('features_selectable', $features_selectable);
            $p->__set('skus',$p['skus']);
            $feus_model->setData($p, $features_selectable);
            $p->save();

            Все-равно не то...



        • +1
          Minya Jam Minya Jam 27 января 2015 14:30 #

          Действительно непросто.

          Уже сутки долблюсь.

          Не понимаю, как повторно сгенерировать дополнительные артикулы.

          Пытаюсь сделать так:

          $p = new shopProduct($pid);

          $feus_model = new shopProductFeaturesSelectableModel();

          $features_selectable = $feus_model ->getByProduct($pid)

          $p->__set('tags',array());
          $p->__set('params','');
          $p->__set('features_selectable', $features_selectable);
          $p->__set('skus',$p['skus']);
          $feus_model->setData($p, $features_selectable);
          $p->save();

          Все-равно не то...


          • +3

            У меня получилось перегенерить артикулы, если старые предварительно удалить. Побочный эффект этого, естественно, что будут новые sku_id. И всё, что было в sku - цены и т.п. - пропадёт. Не знаю, поможет или нет. Но вот.

            wa('shop', true);
            
            $id = 1024; // product_id
            
            $feus_model = new shopProductFeaturesSelectableModel();
            $features_selectable = $feus_model->getByProduct($id);
            
            // Переделать массив $features_selectable, чтобы ключами были коды, а не id
            $features_selectable_by_code = array();
            $feature_model = new shopFeatureModel();
            $features = $feature_model->getById(array_keys($features_selectable));
            foreach($features_selectable as $fid => $data) {
                $features_selectable_by_code[$features[$fid]['code']] = $data;
            }
            
            wa_dumpc('Сохраняем фичи:', $features_selectable_by_code);
            
            // Надо удалить старые записи, иначе сохранение не поймёт, что надо перегенерить ску
            $feus_model->deleteByProducts(array($id));
            $product_skus_model = new shopProductSkusModel();
            $product_skus_model->deleteByField(array('product_id' => $id));
            $product_features_model = new shopProductFeaturesModel();
            $product_features_model->deleteByField(array('product_id' => $id));
            
            // Собственно, сохранение
            $p = new shopProduct($id);
            $p->features_selectable = $features_selectable_by_code;
            $p->save();
            
            $p = new shopProduct($id);
            wa_dump('Получились артикулы:', $p->skus);
            

            Если надо сохранить существующие sku_id и данные, то имхо быстрее будет написать свой код по аналогии с shopProductFeaturesSelectableModel->generateSku(), чем пытаться в обход shopProduct использовать метод модели.

            • +1
              Minya Jam Minya Jam 29 января 2015 09:52 #

              Как вариант, да.

              Регенерации происходит в случаи, если в фичах есть изменения. Проверяется при сохранении в shopProductFeaturesSelectableModel->setData()

              $selected = $this->getSelectedData($data);

              $exists = $this->getByProduct($product->id);

              if ( !$product->id || !$this->arrayEq($exists, $selected)) { // Тут
              //regenerate SKUs

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

              Спасибо, Леонид.

Добавить ответ

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