prepareSnippet передать значение в modResource

Задача простая и решить ее можно разными способами ну почему-то решил попробовать ее решить prepareSnippet

Задача заключается расчет экономии по двум простым формулам логику расписывать не будет и так будет понятно в коде

<?php
if (!is_array($row)) {
	return '{}';
}

$ms2_product_price = $modx->getOption('ms2_product_price');
$price = preg_replace("/\s+/", "", $row['price']);
$old_price = preg_replace("/\s+/", "", $row['old_price']);

if ($old_price > $price) {

switch ($ms2_product_price) {
    case 'procent': 
    $row['difference'] = round(100 - (100 * $price / $old_price));
    break;
    case 'num':
    $row['difference'] = $old_price - $price;
    break;
}

}

$rows = json_encode($row);
return($rows);
Вопрос очень простой как вывести данное значение в карточке товара. Как это можно сделать в одном месте.

Так как я разбираюсь только в MODx решил сделать плагином и записать в плейсхолдер. А плагин в приципе повторяет логику.

Четкий вопрос можно через PrepareSnippet передать значение в карточку товара? Если нет а как работают плейсхолдеры pricе и oldprice так как в карточке можно вызвать переменную шаблона к примеру 14000 и плейсхолдер уже со значением 14 000
Олег Щавелев
16 ноября 2019, 03:52
modx.pro
597
0
Поблагодарить автора Отправить деньги

Комментарии: 1

Евгений Webinmd
16 ноября 2019, 18:22
0
Вопрос конечно сформулирован мастерски.
Что касается prepareSnippet — то он должен возвращать результат работы в следующем виде
return serialize($row);

Пример сниппета
<?php

if(!$row['publishedon']){
    return serialize($row);
}  


// тут лучше сразу написать обработку даты, но для простоты кода показываю со сторонним сниппетом
$row['dt'] = $modx->runSnippet('dateRu', array(
    'input' => $row['publishedon']
)); 

return serialize($row);

И в итоге в чанке товара уже используется плейсхолдер [[+dt]] {$dt}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1