Используем совместно 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 у нас цена со скидкой.Полный код не привожу, т.к. не имею права — компоненты платные. Те, у кого куплены или собираются купить — без труда разберутся.
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            
        0