все просто

Скидки на товар в модификациях товара

Скидки на товар при использовании msOptionsPrice2 в модификациях, когда скидка задается через дополнительное поле у товара или раздела товаров.

Сначало создаем поле для скидок, например sales.

Создание поле скидки

Задаем отображение шаблонамтовар и раздела, получаем результат самого поля в товарах или разделах.

Скидка у товара

Осталось создать плагин на событие msopOnGetFullCost при условии что установлен плагин модификаций msOptionsPrice2

<?php
switch ($modx->event->name) {
    case 'msopOnGetFullCost':
            foreach($modifications as $i => $modificat){
                if (!$modificat['old_price']>0){
                    $sales = 0; //проверяем наличие скидки у товара
                    $q = $modx->newQuery('modTemplateVarResource');
                    $q->where(array(
                    	'contentid' => $rid,
                    	'tmplvarid' => 11
                    ));
                    $q->select(array(
                       'modTemplateVarResource.value'
                    ));
                    
                    $q->prepare();
                    $q->stmt->execute();
                    
                    $res = $q->stmt->fetch(PDO::FETCH_ASSOC);
                    $sales = $res['value'];
                    if (!isset($sales)){//если скидки у товара нет, проверяем у раздела
                        $q = $modx->newQuery('modResource');
                        $q->where(array(
                        	'modResource.id' => $rid,
                        	'modResource.context_key' => 'web'
                        ));
                        $q->leftJoin('modTemplateVarResource', 'TSales', 'modResource.parent = TSales.contentid AND TSales.tmplvarid = 11');
                        $q->select(array(
                           'TSales.value as sales'
                        ));
                        $q->prepare();
                        $q->stmt->execute();
                        $res = $q->stmt->fetch(PDO::FETCH_ASSOC);
                        $sales = $res['sales'];
                    }
                    if (isset($sales)){//рассчет скидки на товар
                        $new_price = round($cost - ($cost * (int)$sales / 100));
                        $cost = $new_price;
                    }
                }
            }
            
            $modx->Event->returnedValues['cost'] = $cost;
        break;
}
$modx->event->returnedValues = $modx->Event->returnedValues;

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