Evgeny Epifanov

Evgeny Epifanov

Был в сети 29 мая 2026, 13:30
Заказы принимаю
Вопрос относится не совсем к этой ветке, но возник он в связи с Fenom'ом.
Имеем такую конструкцию в чанке:
{set $parent = $modx->resource->parent}
        {set $vendormenuclasskey = $modx->getObject('modResource', $parent)->class_key}
        [[!pdoMenu@{$vendormenuclasskey == "msCategory" ? "vendor-list-subcat" : "vendor-list-cat"}? 
        	&level=`1`
        	&displayStart=`1`
                &cache=`1` 
                &firstClass=`0` 
                &lastClass=`0` 
                &tplOuter=`@INLINE [[+wrapper]]` 
                &tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" title="[[+longtitle]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>` 
                &showLog=`1`
                &showUnpublished=`1`
         ]]
В параметрах указан 'parents' ([[*id]] либо [[*parent]]) и 'tplStart' (@INLINE ...)
Результат — полный список всех ресурсов, как будто «parents=`0`».
Прописываю:
[[!pdoMenu@vendor-list-cat?
	....
]]
Результат такой же.
Только если прописать все параметры непосредственно в чанке (без набора параметров), работает как нужно.
С [[mFilter2]] такая же конструкция работает нормально, а тут вообще наборы не работают.

Работа [[pdoMenu]] так задумана или я снова где-то накосячил?
Оживлю тему. Может, кому еще интересно.
Задача была такая:
На сайте цены на часть товаров представлены в рублях, а часть в долларах. Но продавать их нужно в рублях.
Хотел было воспользоваться
этим советом, но не нашел системной настройки ms2_price_snippet, взял эту инструкцию за основу.
Сразу скажу, программист из меня никакой, поэтому прошу не пинать.
Предположим, цены в долларах указаны в old_price.
Выполняем пункт №5 из того же решения, пишем сниппет (например, USD-cource):
<?php
//Получаем курсы валют
require_once($modx->getOption('assets_path').'components/cbrf/ExchangeRatesCBRF.class.php');
$rates = new ExchangeRatesCBRF();

$usd = $rates->GetRate("USD");
$euro = $rates->GetRate("EUR");//а вдруг пригодится

//Записываем в системные настройки (оставил на всякий случай). Соответственно эти настройки нужно создать, ссылка выше
$setting = $modx->getObject('modSystemSetting', 'rate_euro');
$setting->set('value', $euro);
$setting->save();

$setting = $modx->getObject('modSystemSetting', 'rate_usd');
$setting->set('value', $usd);
$setting->save();

//Меняем цены где нужно
$resources = $modx->getCollection('msProduct',array('id:>' => 0));
//$rateUSD = $modx->getOption('rate_usd');
foreach ($resources as $res) {
    $usdprice = $res->get('old_price');
    $val = round($usdprice*$usd-100,-2); //Мне нужно их еще округлить до суммы кратной 100 в меньшую сторону
    if ($usdprice) {
        $res->set('price', $val);
        $res->save();
    }
}

//Чистим кэш
$modx->cacheManager->refresh();
3. Создаем ресурс, публикуем его, скрываем из меню, добавляем ему в контент:
[[!USD-cource]]
и этот ресурс на хостинге вешаем по его url на кронтаб раз в сутки.
Наверняка, решение не идеальное, но вроде работает. Кто оптимизирует — тот молодец.

P.S. Пора бы уже год в футере поменять...