Всего 123 811 комментариев

Евгений
24 мая 2023, 11:29
0
а как обратиться к TV определенного ресурса ))))
например у него id=11 и TV со словами будет в нем
Алексей
24 мая 2023, 10:42
0
Я понял. Попробую потестить.
Dan
Dan
24 мая 2023, 10:39
0
Возможно я поторопился и кастомный сниппет может по скорости не будет лучше. Принцип подразумевал следующий:
1) Получаем коллекцию категорий товаров
2) Пробегаемся через коллекцию и получаем имеющихся производителей в каждой категории, путем запрос к msVendor с джойном msProduct.
3) Добавляем в вывод

Протестите вызов pdoResources, который я написал в комменте. Если он не критично влияет на скорость загрузки страницы, то можно и его оставить.
Алексей
24 мая 2023, 10:17
0
Спасибо еще раз. Сейчас обсуждаю вывод. Вы сможете написать сниппет?
Dan
Dan
24 мая 2023, 09:29
0
Как раз таки это не все, а производители внутри одной категории. Я же расписал все в комменте.
Вообще для меню этот скрипт конечно будет огромный, я бы скорее написал кастомный сниппет.
Dan
Dan
24 мая 2023, 09:28
0
В принципе такую задачу можно решить плагином на события msOnChangeOrderStatus, msOnRemoveOrder, msOnUpdateOrder и проверять в нем: если статус Новый, то игнорируем и выходим, чтобы не задерживать создание заказа во фронте для клиента. Если статус Оплачен то перебираем товары и уменьшаем значение поля остатков на кол-во этой позиции в заказе, а если статус Отменен, то увеличиваем кол-во, ибо это возврат. И соответственно если менеджер удалит заказ или удалит товар из него, производить те же самые действия.
Сергей Фещуков
24 мая 2023, 09:01
0
Добрый день. Да, компонент работает с товарами без свойств и модификаций.
Игорь
24 мая 2023, 08:59
0
Здравствуйте.
Хочу уточнить: для товаров без свойств и модификаций Ваш компонент будет работать?
Игорь
24 мая 2023, 08:55
0
Ну да, поле-то создать не проблема (хоть кастомное, хоть tv)… Загвоздка именно в функционале: чтобы остатки уменьшались при заказе, например…
Алексей
24 мая 2023, 08:52
0
Спасибо за ваш ответ, но это не то. У вас выводятся все производители, а мне надо что-бы в меню у каждой категории выводились производители этой категории. Вывод нужен в меню, на всех страницах. Пока удалось вывести только на странице категории.
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}
Прочие задачи, например проверка остатков при добавлении в корзину, решаются кастомными плагинами.
0verride
24 мая 2023, 01:13
0
Вопрос решился в апгрейде версии до 2.7.0 но с нюансами.
При апгрейде выдавало ошибку:
Deprecated: Array and string offset access syntax with curly braces is deprecated in /modinstallsmarty.class.php on line 75
Решение:
Изменить строку в файле:
setup/includes/parser/modinstallsmarty.class.php
эту: if ($dirname{strlen($dirname) — 1} == '/') $dirname = substr($dirname, 0, strlen($dirname) — 1);
на эту: if ($dirname[strlen($dirname) — 1] == '/') $dirname = substr($dirname, 0, strlen($dirname) — 1);

Всем спасибо!
Коллекции появились!
Андрей
24 мая 2023, 00:19
0
Должно всё работать, проверьте ошибки в логах modx, можно посмотреть ошибки в консоли браузера открыв ресурс. Попробовать переустановить компонент, возможно что то заглючило в момент установки, редко, но бывает.
Андрей
24 мая 2023, 00:18
0
«Актуальная это которая? Чтоб ничего не пострадало?
2.8.5-pl (rel. 7-Mar-2023) эта?»'

Да, всё должно обновиться нормально, ничего не пострадает.
0verride
24 мая 2023, 00:03
0
«Движок также стоит обновить до актуальной версии.»
Актуальная это которая? Чтоб ничего не пострадало?
2.8.5-pl (rel. 7-Mar-2023) эта?
0verride
23 мая 2023, 23:48
0
PHP Version 7.4.33
Версия базы данных: 5.7.35-38
Client API version: mysqlnd 7.4.33
Андрей
23 мая 2023, 23:28
0
Проверил, работает на 2.6.5. Сам компонент корректно установился? Какая версия php/mysql? Движок также стоит обновить до актуальной версии.
Евгений
23 мая 2023, 23:28
0
tv я думаю вбить в одном ресурсе и к нему обращаться будет проще
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