Александр

Александр

Был в сети 24 июня 2026, 17:21
Заказы принимаю
Так тут нужна проверка не только на пустоту каталога, но и на наличие в нем ресурсов с нужным шаблоном. По сути тут нужен подзапрос в where с проверкой на наличие подресурсов с шаблоном.

Как это корректно написать (подзапрос, как указать таблицу) в параметрах сниппета вопрос, но я думаю лучше можно сделать простой сниппет на pdoTools если для вывода меню не используется много настроек специфичных для pdoResources.
Смотрим схему miniShop2

<object class="msProduct" extends="modResource">
        ..............................
        <composite alias="Options" class="msProductOption" local="id" foreign="product_id" cardinality="many"
                   owner="local"/>
    </object>

Используем getMany:

foreach ($resources as $res) {
		$data = $res->getMany('Options');
                foreach ($data as $opt) {
                             .............
                             $opt->save();
                 }
}
Тогда вам скорее всего надо выводить порядковый номер не через бекенд, а через фронт (JavaScript или CSS)

Примеры из интернета:

На CSS:

table {
    counter-reset: rowNumber;
}

table tr {
    counter-increment: rowNumber;
}

table tr td:first-child::before {
    content: counter(rowNumber);
    min-width: 1em;
    margin-right: 0.5em;
}

На JS:

var table = document.getElementsByTagName('table')[0],
    rows = table.getElementsByTagName('tr'),
    text = 'textContent' in document ? 'textContent' : 'innerText';

for (var i = 0, len = rows.length; i < len; i++){
    rows[i].children[0][text] = i + ': ' + rows[i].children[0][text];
}
А какая у вас версия miniShop2? Насколько я помню, то нет в сниппете msCart плейсхолдера idx. Если не делать кастомный сниппет, то в случае использования синтаксиса Fenom (чанки по умолчанию с Fenom в новых версиях miniShop2) можно написать допустим так:

{var $idx_product = 1;}
{foreach $products as $product}
...

{$idx_product++}
{/foreach}
Можно написать простейший плагин, тут главное получить каким-то образом нужный город (id, короткое наименование транслитом и.т.п.). Это зависит от реализации на сайте.

<?php
switch ($modx->event->name) {
    case 'msOnSubmitOrder':
    $city = $_POST['city']'
    $modx->setOption('ms2_email_manager', $modx->getOption('ms2_email_manager_сity_'.$_POST['city']));
    break;
}

Плагин переопределяет настройку с почтой менеджера(ов) в момент оформления заказа. Новую настройку он берет из другой системной настройки созданной вами в ручную, например ms2_email_manager_сity_spb. В форме заказа должна быть city.