Цена за товары в зависимости от количества

Здравствуйте. Встала интересная задачка сделать цену на товары зависящую от кол-ва. Т.е
1-100 товаров цена 1000р за товар
100 — 1000 товаров цена 750р за товар
1000-5000 товаров цена 500р за товар

Вот такого рода функционал. Куда мне лучше копать? Писать modx плагин и на событие добавления товара его? А если покупатель в корзине изменит 1 на 800, там же ajax все пересчитается… Лезть куда то в скрипты?

Второй день ломаю голову, как бы это по лучше реализовать…
Николай
16 мая 2014, 03:35
modx.pro
1
2 828
0

Комментарии: 3

Василий Наумкин
16 мая 2014, 08:13
0
Именно поэтому в miniShop2 можно расширить класс управления корзиной и прописать свою логику при добавлении \ удалении \ изменении количества товара.
    Иван Петров
    13 октября 2014, 03:22
    0
    Николай, удалось реализовать? Я так понимаю надо в функции add класса msCartHandler добавить типа такого условия if($count > 1000){$price = 1000}, но куда не понятно.
      Николай
      13 октября 2014, 15:56
      3
      +1
      Да, все больше чем элементарно.
      Вариантов решения несколько. Какой будет лучше конкретно вам — решайте сами.
      1. В лоб редактирование класса корзины. Находится он тут:
      /core/components/minishop2/model/minishop2/mscarthandler.class.php
      Интересовать вас будет функция add, и строчка
      $price = $product->getPrice();
      Работаете непосредственно с ней.

      2. Расширить класс корзины, и манипулировать ценой в новом классе. Преимущество перед предыдущим способом в том, что после обновления ms2 все перезапишется, а тут нет. Но и сложнее реализация.
      Информацию по этому ищите в поиске, я не могу точно вспомнить где об этом писал Василий.

      3. Плагины. Вам нужно создать плагин, который на событие msOnBeforeAddToCart будет пересчитывать цену.
      * Also you can modify $count and $options variables by add values to $this->modx->event->returnedValues
      <?php
        if ($modx->event->name = 'msOnBeforeAddToCart') {
        $values = & $modx->event->returnedValues;
        $values['count'] = $count + 10;
        $values['options'] = array('size' => '99');
      }
      *
       * */
      Пример взят из файла с классом корзины. Я лично использовал 1 способ, т.к делал для себя.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3