Используем совместно msDiscount и msOptionsPrice2


Если есть задача одновременно использовать варианты товаров с разными ценами и скидки/купоны, то в modstore есть качественные и удобные компоненты msDiscount и msOptionsPrice2. Но они «из коробки» несовместимы — вы не получите в каталоге/корзине цены со скидками.
Под катом инструкция для совместного использования.

Сразу скажу, что это — костыль! Я намерено (см. цель публикации ниже) пока даже не рассматриваю более «правильные» варианты кастомизации компонента msOptionsPrice2. Тем не менее костыль рабочий, на сколько я успел протестировать — всё нормально. Не забываем: при обновлении msOptionsPrice2 — вносить правки придётся заново.

Цель публикации:
  • показать, что вы можете использовать эти 2 компонента совместно
  • привлечь внимание авторов компонентов — возможно получится их подружить «из коробки» — мне представляется это весьма полезным
  • обмен опытом
Решение: вся проблема в том, чтобы применить скидки, определяемые msDiscount к ценам, которые возвращает msOptionsPrice2.
Определением цены в компоненте ведает класс msOptionsPriceMsOnGetProductPrice (см. директорию systems компонента), ~ 69 строка:
$cost = $this->msoptionsprice->getCostByModification($rid, $price, $modification);
после неё нам нужно добавить, по-сути, содержимое сниппета msdGetDiscount в упрощённом виде:
$msDiscount = $this->modx->getService('msDiscount');
if (($msDiscount instanceof msDiscount)) {
    $sales = $msDiscount->getSales();
    $discount = 0;
    $id = $rid;
    if (!empty($id) && !empty($sales)) {
	.........
    }
    if($discount != 0) {
        $discount = (float)str_replace('%','',$discount);
      	$cost = $cost * (1 - $discount/100);
    }
}
Теперь в $cost у нас цена со скидкой.

Полный код не привожу, т.к. не имею права — компоненты платные. Те, у кого куплены или собираются купить — без труда разберутся.
13 ноября 2017, 09:47    Алексей   
3    155 +4

Комментарии (0)

    Вы должны авторизоваться, чтобы оставлять комментарии.