Dan

Dan

С нами с 29 июня 2021; Место в рейтинге пользователей: #150
Dan
Dan
24 мая 2023, 10:39
0
Возможно я поторопился и кастомный сниппет может по скорости не будет лучше. Принцип подразумевал следующий:
1) Получаем коллекцию категорий товаров
2) Пробегаемся через коллекцию и получаем имеющихся производителей в каждой категории, путем запрос к msVendor с джойном msProduct.
3) Добавляем в вывод

Протестите вызов pdoResources, который я написал в комменте. Если он не критично влияет на скорость загрузки страницы, то можно и его оставить.
Dan
Dan
24 мая 2023, 09:29
0
Как раз таки это не все, а производители внутри одной категории. Я же расписал все в комменте.
Вообще для меню этот скрипт конечно будет огромный, я бы скорее написал кастомный сниппет.
Dan
Dan
24 мая 2023, 09:28
0
В принципе такую задачу можно решить плагином на события msOnChangeOrderStatus, msOnRemoveOrder, msOnUpdateOrder и проверять в нем: если статус Новый, то игнорируем и выходим, чтобы не задерживать создание заказа во фронте для клиента. Если статус Оплачен то перебираем товары и уменьшаем значение поля остатков на кол-во этой позиции в заказе, а если статус Отменен, то увеличиваем кол-во, ибо это возврат. И соответственно если менеджер удалит заказ или удалит товар из него, производить те же самые действия.
Dan
Dan
24 мая 2023, 08:44
0
Из коробки пока такого функционала нет. Вопрос в том, какой функционал вы хотите привязать к полю «Остатки»?
Создайте кастомное поле minishop2 (если умеете), если нет, то можете попробовать использовать msAddField, правда не знаю актуален он или нет. Либо можете создать TV.
Далее все зависит от ваших задач.
Например, вы завели TV remaining и хотите вместо кнопки «Добавить в корзину» выводить «Нет в наличии», то код на странице товара например будет такой:
{if $_modx->resource.remaining > 0}
    <button type="submit" name="ms2_action" value="cart/add">Добавить в корзину</button>        
{else}
    <span>Нет в наличии</span>
{/if}
Прочие задачи, например проверка остатков при добавлении в корзину, решаются кастомными плагинами.
Dan
Dan
23 мая 2023, 20:12
0
Можно с помощью pdoResources + пара джойнов.
В parents указываете id категории, внутри которой надо искать производителей. В tpl цифра 2 в ссылке — это id страницы каталога (замените на свой id). Если на странице каталога есть mFilter2 и у него есть фильтр по производителям, то при переходе будет сразу активирован нужный фильтр.
{'!pdoResources' | snippet : [
    'parents' => 11,
    'class' => 'msProduct',
    'innerJoin' => '{
        "Data":{ "class":"msProductData","on":"Data.id = msProduct.id"},
        "Vendor":{ "class":"msVendor","on":"Vendor.id = Data.vendor" }
    }',
    'select' => '{"Vendor":"name,id"}',
    'tpl' => '@INLINE <a href="{2 | url : [] : ["vendor" => $id]}">{$name}</a>',
    'groupby' => 'name'
]}
Dan
Dan
23 мая 2023, 19:29
+2
Вместо migx я бы посоветовал лучше использовать tvSuperSelect, чтобы не мучаться каждый раз открытием модалки и вбиванием слова. При этом, если у некоторых ресурсов могут быть одинаковые слова, то вы сможете их выбрать из списка уже имеющихся.
Код получения слов ресурса в виде массива будет такой:
$res = $modx->getObject('modResource', $resource->id);
$words = json_decode($res->getTVValue('words'), true); //в getTVValue название своего TV
Dan
Dan
22 мая 2023, 13:30
0
Что за ползунок? Код? Работает в десктопе или нет?
Dan
Dan
22 мая 2023, 13:29
0
Без логов сложно понять в чем проблема, это как искать иголку в стоге сена. Либо в журнал сервера должна писаться ошибка, либо возможно сохраняться в файле в core/error/
Dan
Dan
20 мая 2023, 19:24
0
Надо смотреть плагины скорее всего или сниппеты кастомные, которые есть в шаблоне. Еще можно глянуть, возможно ошибка будет в каком-нибудь файле внутри core/error/
Dan
Dan
20 мая 2023, 07:22
0
Between есть, просто он априори странно себя ведет с datetime иногда. Так конечно можно писать, ничего в этом нет зазорного.
Dan
Dan
19 мая 2023, 21:47
0
А попробуй так написать.
[[!PdoPage?
    &class=`RecordMy`
    &tpl=`tpl.recordMy`
    &element=`getRecords`
    &ajaxMode=`default`
    &sortby=`{"date":"ASC"}`
    &where=`['DATE >= "2023-03-17 00:00:00" AND DATE <= "2023-03-18 23:59:59"']`
]]
Dan
Dan
19 мая 2023, 17:04
0
Можно чистый SQL попробовать
[[!PdoPage?
    &class=`RecordMy`
    &tpl=`tpl.recordMy`
    &element=`getRecords`
    &ajaxMode=`default`
    &sortby=`{"date":"ASC"}`
    &where=`['DATE BETWEEN "2023-03-17 00:00:00" AND "2023-03-18 23:59:59"']`
]]
Советую также указать время у обеих дат, раз хранится в datetime.
Dan
Dan
19 мая 2023, 16:56
0
Поставьте логирование серверных ошибок. После появления такой ошибки смотрите в журнал, если Timeweb, то он сохраняется в папке сайта на уровне public_html с названием error_log. Там будет конкретная причина, вызывающая ошибку.
Но подозреваю, что виноват какой-нибудь кастомный плагин.
Dan
Dan
19 мая 2023, 16:44
0
Уже делал такое без проблем и не раз на многих проектах. Я же говорю, вы что-то делаете неправильно.
Dan
Dan
18 мая 2023, 20:42
0
Чет вы неправильно делаете
Dan
Dan
18 мая 2023, 18:59
0
Во, другой разговор, с этого и надо было начинать вопрос.
Вы можете использовать additionalPlaceholders, про который написано тут.
Но нужно обновить minishop2 как минимум до 4.2. Не знаю, как будет в синтаксисе PHx, но на феном вызов будет такой:
{'!msProducts' | snippet : [
        'parents' => 180,
        'limit' => 0,
        'sortby' => '{"menuindex":"ASC"}',
        'tpl' => 'programs.row',
        'additionalPlaceholders' => [
            'pr' => 180
        ]
]}
И в чанке programs.row вместо
{$parent | resource: 'pagetitle'}
укажите
{$additionalPlaceholders.pr | resource: 'pagetitle'}
Dan
Dan
18 мая 2023, 18:14
0
Ну так у вас вызов msProducts неуниверсальный. Или вы в parents по другому указываете?
Dan
Dan
18 мая 2023, 18:11
0
Но вы же в msProducts напрямую указываете его, так укажите и в чанке.
Dan
Dan
18 мая 2023, 17:38
0
Я прекрасно понимаю о чем вы и как это работает. Вы поймите, что этих вторичных категорий может быть несколько, поэтому должна быть какая то логика. Либо например вы находитесь на странице этой самой категории и в карточках товара нужно вывести ее название, либо вы хотите вывести название конкретной категории, id которой вы знаете заранее.
Если второй вариант, что довольно странно, то можно по той же аналогии, что и сейчас, просто вместо $parent в строке
{$parent | resource: 'pagetitle'}
укажите id этой категории

По хорошему стоит показать ваш вызов msProducts
Dan
Dan
18 мая 2023, 16:30
0
Какое название категории выводится в чанке, та и является основной для товара. Если это название категории с id 150, то значит у нее есть собственные товары и видимо все. Отсюда получается, что вы скорее всего неправильно свой каталог организовали.