Dan

Dan

Был в сети 16 июля 2026, 08:56
Заказы не принимаю
То, про что вы говорите, не требует PHP вообще. Это чистый js в 3 строчки. Мое решение позволяет видеть какой товар есть в корзине и в каком количестве на любой странице сайта, и в то же время позволяет удалять товар из корзины, не находясь на ее странице.
Класс может не добавили или в скрипте ошибка какая. А тут нет разницы какой CSS-фреимворк, я ими вообще не пользуюсь например) если что можете написать доступы мне телеграмм (аккаунт в профиле) гляну сегодня и поправлю, заодно напишу в чем была проблема
Все верно. Копируете полностью методы add и remove (полный код функций function add и function remove). И добавляете им в return $this->success ключ incart_html с нужным чанком.

на странице категории пока еще не разобрался
В чанке tpl товара, вместо кнопки сабмит вставляете код, который указан в статье (сниппет inCart с параметром product обернутый в incart-container)

Работает правда немного косячно
Что не так работает?
И ещё один вопрос, как отловить событие из плагина на js, чтобы вывести предупреждение на фронте?
Не нужно никаких js.
Расширяете msOrderHandler переопределив метод submit. В нем проверяете
if ($delivery_cost == 0) {
    return $this->error('Стоимость доставки не может быть равна нулю.'); //тут свое сообщение. Можно использовать ключи записей словаря
}
С версии 4.1.4 кстати можно обойтись и без PHP, но тогда часть скрипта придется внедрять в скрипт от ms2. События remove и change с этой версии возвращают id товара и его кол-во в корзине. По сути нужно только category и name. Можно внедрить код в метод send в скрипте ms2 и в случае success получать объект формы, с которой была отправка и цеплять эти данные с дочерних метатегов.
Отличное решение!
Кстати по поводу purchase я вешал отправку на колбэк
miniShop2.Callbacks.Order.submit.response.success = function (response) {
//Тут сбор данных и отправка
}
Но минус в том, что под каждую разметку приходится немного править код, но зато нет дублей.

А для событий change и remove я расширил msCartHandler, чтобы он возвращал id товара, добавленное/удаленное количество, его категорию и название.
object_err_nfs, если посмотреть класс modprocessor и конкретно абстрактный класс modObjectRemoveProcessor, появляется если Modx не может получить объект указанного класса по ключу. Может стоит в своем коде подключить его, т.е.:
$modx->addPackage('ms2Gallery', $modx->getOption('core_path').'components/ms2gallery/model/ms2gallery/');
Во первых, прочитайте тщательно мой коммент выше, где я указал ссылку на документацию и поймете, где у вас ошибка.
Во вторых, покажите вызов сниппета, которым выводятся карточки, код чанка карточки.
Я же написал в комменте. В самом первом моем комменте и комменте Артура, условие для страницы товара. Для карточки товара, если она выводится сниппетом, условие будет то, что я написал в последнем комменте
Вам бы документацию Fenom почитать.
{$_modx->resource.id} и подобные этому вызовы обращаются к полям текущего ресурса. Поэтому в чанке будет так:
{if $parent != 31 && $id != 31}
  <div class="reward"><span>Артикул:</span> <span class="item">{$article}</span></div>
{/if}
И кстати:
1) Не смешивайте стандартный синтаксис и fenom. Раз пишите в fenom, пишите все в нем. Т.е. не
[[+article]]
, а
{$article}
2) По-моему в первом условии должно быть не
[[+article]]
, а
{$_modx->resource.article}
что бы у всех подкаталогов родителя 31 скрывался артикул
При этом код у вас написан наоборот. Наверное нужно что-то в этом роде:
{if $_modx->resource.parent != 31 || $_modx->resource.id != 31}
  <div class="reward"><span>Артикул:</span> <span class="item">[[+article]]</span></div>
{/if}