Павел Романов

Павел Романов

Был в сети 30 июля 2026, 15:23
Заказы принимаю
Ошибся. А так?
<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
$action_price_tv_name = 'action_price'; //Имя акционной TV цены

    $p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
    if($p_id){
	$action_tv = $modx->getObject('modTemplateVar',array('name'=>'action'));
	$action = $action_tv->renderOutput($p_id);
        if (!empty ($action)) {
            $action_price_tv = $modx->getObject('modTemplateVar',array('name'=>$action_price_tv_name));
            $price_usd = $action_price_tv->renderOutput($p_id);
        } else {
            $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
            $price_usd = $price_tv->renderOutput($p_id);
        }
        $output = $price_usd * $rate;
    }
$modx->event->_output = '';
$modx->event->output($output);

return '';
Попробуйте так:
<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
$action_price_tv_name = 'action_price'; //Имя акционной TV цены

    $p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
    if($p_id){
	$action_tv = $modx->getObject('modTemplateVar',array('name'=>'action'));
	$action = $action->renderOutput($p_id);
        if (!empty ($action)) {
            $action_price_tv = $modx->getObject('modTemplateVar',array('name'=>$action_price_tv_name));
            $price_usd = $action_price_tv->renderOutput($p_id);
        } else {
            $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
            $price_usd = $price_tv->renderOutput($p_id);
        }
        $output = $price_usd * $rate;
    }
$modx->event->_output = '';
$modx->event->output($output);

return '';
Готовый — mFilter2 (из mSearch2).
Параметры тут:
docs.modx.pro/components/msearch2/snippets/mfilter2
Просто делаете форму с нужными полями и передаете на страницу с результатами данные из неё GET-запросом.
А на самой странице результатов уже штатная форма фильтрации.
Можно просто на pdoResources.
Все параметры объектов забиваете в TV. Делаете сниппет Filter, который будет ловить GET-параметры и формировать строку с отбором по TV:
&tvFilters=`tv1==%***%,price<*** ....................`

Выводите на странице результатов его прямо в параметрах pdoResources:
[[pdoResources?
.........
[[!Filter]]
]]
У плагина на вкладке «Системные события» отметьте галочкой OnSHKgetProductPrice.

Но плагин не меняет цену на странице товара — от просто пересчитывает ее, когда происходит добавление в корзину. Для того, чтобы выводить цену, создайте сниппет getprice:

<?php
$rate = 63; // курс
return $input * $rate;

И выводите в чанках:
[[+tv.price:getprice:num_format]]

На странице товара:
[[*price:getprice:num_format]]
Попробуйте сделать плагин на событие OnSHKgetProductPrice

<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
    $p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
    if($p_id){
        $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
        $price_usd = $price_tv->renderOutput($p_id);
	$output = $price_usd * $rate;
    }
$modx->event->_output = '';
$modx->event->output($output);

return '';
По поводу тся и ться есть очень простое правило:
Если слово отвечает на вопрос, в котором нет мягкого знака, то он и не пишется.
Если в самом вопросе есть мягкий знак, то и в слове он ставится.

Например:
Стараться (что делатЬ?), соответственно, пишем.
Ставится (что делает?) нет Ь, вот и не пишем.