Aleksandr Huz

Aleksandr Huz

Был в сети 04 ноября 2025, 21:25
Заказы принимаю
В статье написано:

Если цена товара меняется после прохождения через плагин-модификатор, то оригинальное значение помещается в old_price, а его значение уже больше никого не интересует.
и
Свойства old_price заменяется и его нигде не видно, кроме админки — напоминаю еще раз.
Может можно добраться до старой цены через $data
$data['old_price']
Как-то все сложно.

Разве не можно, поменять цену через сниппет?
Примерно так:
if( $input == 0 ) return 0;
$input = floatval(str_replace(array(' ',','), array('','.'), $input));

// глобальный курс
$curs_global = $modx->getOption('ms2_curs_global');

// узнаем есть ли курс для данного товара
$product = $modx->getObject('msProduct', $id);
$curs = $product->get('curs') ?:  $curs_global;

// устанавливаем новую цену
$new_price = $input * $curs;

// форматируем цену и возвращаем ее
return number_format($new_price ,(floor($new_price) == $new_price ? 0 : 2),'.',' ');

и создаем плагин:
if($modx->event->name != 'msOnGetProductPrice') return;
$values = & $modx->event->returnedValues;
$resource = $modx->getObject('msProduct', $product->id);
$values['price'] = preg_replace('/\s/', '', $_REQUEST['price']);
Написать сниппет или модификатор, если используется fenom.
Самый простой:
<?php
$arr= explode(',',input);
$result = [];
foreach($arr as $val){
    swicth ($val) {
        case: 'Лучшие': $result[] = 'best'; break;
        case: 'Аеро': $result[] = 'aero'; break;
        case: 'Все': $result[] = 'all'; break;
        default: $result[] = $val; 
    }
}
$output = implode(",", $result);
return $output;
Вызов:
[[!snippet? &input=`[[+tv.name]]`]]
Тогда я тоже поделюсь своим вариантом. Мне тоже нравится MinifyX, но сторонние библиотеки я подключаю отдельно. Надоело подключать их вручную, поэтому переместил все в MinifyX.

Добавил параметр
'modules' => 'jquery,lazysizes,magnific,sweetalert,slick'
а в сниппете:
$modules = $modx->getOption('modules', $scriptProperties, '', true);

$arr_modules = explode(',',$modules);
foreach ($arr_modules as $value){
    
    $moduleCss = $value . 'Css';
    $pathCss = $modx->getOption($moduleCss, $scriptProperties, '', true);
    if( $pathCss != '' ){
        $link = '<link rel="preload" href="'.$pathCss.'" as="style" '.'onload="this.rel='."'".stylesheet ."'".'"'.' >';
        $modx->regClientStartupHTMLBlock($link);
    }

    $moduleJs = $value . 'Js';
    $pathJs = $modx->getOption($moduleJs, $scriptProperties, '', true);
    if( $pathJs != '' ){
        $link = '<link rel="preload" href="'.$pathJs.'" as="script">';
        $script = '<script src="'.$pathJs.'" '.$attrJs.'></script>';
        $modx->regClientStartupHTMLBlock($link.$script);
    }
        	
    
}
Пути к файлам определяются в параметрах сниппета.
Это чанк для авторизованных пользователей, по умолчанию там ссылка для выхода, но в этот чанк можно поместить любую информацию, например ссылку на личный кабинет.

В статье Михаила расписано как можно еще узнать гость это или нет и использовать где угодно.

Человек написал:
И проблема в том, что в дополнении нет такого сниппета, который это может отслеживать.
я хотел донести до него, что такой сниппет есть.