Используем совместно msDiscount и msOptionsPrice2
Если есть задача одновременно использовать варианты товаров с разными ценами и скидки/купоны, то в modstore есть качественные и удобные компоненты msDiscount и msOptionsPrice2. Но они «из коробки» несовместимы — вы не получите в каталоге/корзине цены со скидками.
Под катом инструкция для совместного использования.
Сразу скажу, что это — костыль! Я намерено (см. цель публикации ниже) пока даже не рассматриваю более «правильные» варианты кастомизации компонента msOptionsPrice2. Тем не менее костыль рабочий, на сколько я успел протестировать — всё нормально. Не забываем: при обновлении msOptionsPrice2 — вносить правки придётся заново.
Цель публикации:
Определением цены в компоненте ведает класс msOptionsPriceMsOnGetProductPrice (см. директорию systems компонента), ~ 69 строка:
Полный код не привожу, т.к. не имею права — компоненты платные. Те, у кого куплены или собираются купить — без труда разберутся.
Под катом инструкция для совместного использования.
Сразу скажу, что это — костыль! Я намерено (см. цель публикации ниже) пока даже не рассматриваю более «правильные» варианты кастомизации компонента msOptionsPrice2. Тем не менее костыль рабочий, на сколько я успел протестировать — всё нормально. Не забываем: при обновлении msOptionsPrice2 — вносить правки придётся заново.
Цель публикации:
- показать, что вы можете использовать эти 2 компонента совместно
- привлечь внимание авторов компонентов — возможно получится их подружить «из коробки» — мне представляется это весьма полезным
- обмен опытом
Определением цены в компоненте ведает класс 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 у нас цена со скидкой.Полный код не привожу, т.к. не имею права — компоненты платные. Те, у кого куплены или собираются купить — без труда разберутся.
Поблагодарить автора
Отправить деньги