Баха Волков

Баха Волков

Был в сети 31 июля 2026, 12:09
Заказы принимаю
Алексей Шумаев
Алексей Шумаев
Ваш вопрос слишком объёмный, т.к. ответ на него будет порождать несколько новых вопросов…
Можно делать примерно так:

I. Сначала читаем про
расширение товаров, добавляем новое поле для оптовой цены, например optPrice.
II.
1. Читаем заметку
2. Создаём плагин, в нём проверяем пользователя. Примерно так:
case 'pdoToolsOnFenomInit':
    $fenom->addAccessorSmart("site", "data", Fenom::ACCESSOR_PROPERTY);
            
    # определить принадлежность к группе оптовых
    $optGroupe = 2; # ваша группа оптовых
    $ws = 0; # пока это обычный юзер
    $user = $modx->user;
    $usergroups = $user->getUserGroups();
    if ($user->get('id') && in_array($optGroupe, $usergroups)) {
        $ws = 1; # а теперь - оптовик
    }
            
    $fenom->data = [
       'ws' => $ws
    ];       
break;
Теперь ВЕЗДЕ у вас есть переменная $.site.ws.
Fenom:
{if $.site.ws == 1}
	{$optPrice}
{else}
	{$price}
{/if}
III. В том же плагине на событие msOnBeforeAddToCart добавляем изменение цены для оптовиков, если оптовик.

Вроде всё. Но нюансов может быть множество )
Алексей
Алексей
Добрый вечер! На странице списка товаров вызываю снипет так
[[!getRemains:toPlaceholder=`remains`? id=`[[+id]]`]]
[[+remains:lt=`1`:then=`нет`:else=`[[+remains]] шт.`]]

Постоянно выдается первый вариант «Нет».
Списко товаров вызывается при помощи сниппета mfilter2. Если добавляю в него такую конструкцию
'leftJoin' => [
'Remains' => [
'class' => 'msprRemains',
'on' => 'msProduct.id = Remains.product_id AND Remains.remains > 0'
]
],
'groupby' => 'msProduct.id',
'select' => [
'msProduct' => '*',
'Remains' => 'SUM(Remains.remains) as remains'
],

То остатки выводятся правильно, но перестает работать сортировка. При нажатии на сортировку все товары исчезают. Не подскажете в чем может быть причина. Заранее спасибо!

Вот полностью вызов сниппета

{'!mFilter2' | snippet: [
'paginator' => 'pdoPage',
'element' => 'msProducts',
'class' => 'msProduct',
'parents'=>$modx->resource->id,
'depth' => 10,
'filters'=> 'ms|price:number'
'tplFilter.outer.default'=>'mfilter-slider.tpl'
'tplFilter.row.default'=>'mfilter-number.tpl'
'tpl' => 'category-product.tpl',
'tplOuter' => 'mFilter2-outer.tpl',
'leftJoin' => [
'Remains' => [
'class' => 'msprRemains',
'on' => 'msProduct.id = Remains.product_id AND Remains.remains > 0'
]
],
'groupby' => 'msProduct.id',
'select' => [
'msProduct' => '*',
'Remains' => 'SUM(Remains.remains) as remains'
],
'limit' => 18,
'maxLimit' => 200,
'pageLimit' => 12,
'tplPage' => '@INLINE {$pageNo}',
'tplPageActive' => '@INLINE {$pageNo}',
'tplPageWrapper' => '@INLINE {$pages}',
'tplPagePrev' => '@INLINE <',
'tplPageNext' => '@INLINE >',
'tplPageSkip' => '@INLINE ...</span',
'tplPagePrevEmpty' => '@INLINE <<',
'tplPageNextEmpty' => '@INLINE >>',
'sortby' => '{«menuindex»:«ASC»}',
'where' => '{«template»:«4»}'
]}
Дмитрий
Дмитрий
вот и мне интересно, уверен что я что то не так делаю просто, тк впервые пользуюсь именно этим методом.

у меня есть шаблон категорий товара в самом шаблоне я вызываю msProducts в параметре — element, с помощью метода — pdoPage, он выводит все товары в нужной мне категории товаров, там в качестве шаблона вывода прописан чанк, который оформляет именно блоки этих товаров и в нем я инициализировал вот эту конструкцию

[[!msProductOptions? &product=`[[+id]]`]]

интересно что если вместо плейсхолдера вставить любой id из выведенного товара опции именного этого товара спокойно появляются
Воеводский Михаил
Воеводский Михаил
Только значения Наполнителей будут товарами.
В этом свои преимущества, как я написал — изменение цены такого наполнителя в одном месте, а не в каждом товаре по отдельности.

родилось вот такое решение
Как ни крути, любые варианты решения задач полезны. Не исключаю. что в некоторых случаях такое решение будет рациональнее, чем приплетать msAddLinked.