Объединение идентичных позиций в корзине либо замена при совпадении.

Главные вкладки

Аватар пользователя Perfectus Perfectus 14 февраля 2014 в 10:19

Доброго времени суток.
Задача:
Делаю магазин по продаже видео.
После оплаты появлятеся доступ к видео и ссылка на скачивание файла (реализовано через Commerce File)
Создано следующее правило, которое выставляет значение количества идентичных товаров, при совпадении, равное 1:

{ "rules_limit_for_products_1" : {
    "LABEL" : "Limit for products = 1",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "commerce_cart" ],
    "ON" : { "commerce_cart_product_add" : [] },
    "DO" : [
      { "data_set" : { "data" : [ "commerce-line-item:quantity" ], "value" : "1" } }
    ]
  }
}

В управлении отображением для товаров, в поле Product (Форма добавления в корзину) установлена галка "Объединение подобных позиций: Включено"
После того как пользователь добавляет идентичный уже добавленному в корзину товару, счетчик количества обнуляется на 1. Это мне и нужно.
Но как только я включаю модуль Commerce File и настраиваю его, возникает проблема:
Позиции начинают задваиваться, затраиваться, взависисмости от того сколько раз пользователь добавил один и тот же товар в корзину.
Подскажите пожалуйста какое правило мне нужно написать, чтобы происходило объединение идентичных позиций в корзине либо они заменялись при совпадении.
Сам не могу допетрить Smile

Комментарии

Аватар пользователя Perfectus Perfectus 13 марта 2014 в 21:41

Возможно я не ясно выразился.
Нужно с помощью Rules сравнить аналогичные позиции в корзине.
Если есть совпадения, то удалить идентичные позиции.
Подскажите пожалуйста.

Аватар пользователя Perfectus Perfectus 13 марта 2014 в 23:52

Пробую сделать вот так:

{ "rules_empty_cart" : {
    "LABEL" : "Empty cart",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "commerce_cart" ],
    "ON" : { "commerce_cart_product_prepare" : [] },
    "IF" : [
      { "data_is" : {
          "data" : [ "commerce-order:commerce-line-items" ],
          "value" : [ "commerce-order:commerce-line-items" ]
        }
      }
    ],
    "DO" : [
      { "LOOP" : {
          "USING" : { "list" : [ "commerce-order:commerce-line-items" ] },
          "ITEM" : { "list_item" : "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430" },
          "DO" : [
            { "list_remove" : {
                "list" : [ "commerce-order:commerce-line-items" ],
                "item" : [ "list-item" ]
              }
            }
          ]
        }
      }
    ]
  }
}

Перед добавление товара в корзину провожу сравнение уже имеющихся позиций.
А вот дальше получается засада, не могу понять как удалить только совпавшую позицию, а не очистить всю корзину.
Правило которое приводится в этой статье (http://www.drupalcommerce.org/user-guide/working-cart-rules-events)также не действует.
Позиции начинают задваиваться.