[miniShop2] Как идентифицировать на фронтенде товар, успешно добавленный в корзину?

В каталоге нужно обратиться к товарам в DOM через JS, но надо как-то идентифицировать товар, который был добавлен в корзину и обработан бэкенд-плагинами MODX.

Использую данный callback на фронтенде для отлова события товара, успешно добавленного в корзину:
document.addEventListener('DOMContentLoaded', function () {
		if (typeof miniShop2 !== 'undefined') {
			miniShop2.Callbacks.add('Cart.add.response.success', 'add_ok', function (response) {
				console.log(response);
			});
		}
	});
В ответе получаю только ключ товара в корзине, но никак ни его идентификатор, по которому добавленный товар можно найти на странице:

{success: true, message: "Товар успешно добавлен в корзину: 1", data: {
	key: "f5249335281849f342cd30c690be8bdc",
	total_cost: 0,
	total_count: 1,
	total_weight: 0
}}
Обратиться по ключу response.data.key в DOM тоже нельзя, так как pdoPage/msProducts не выводят плейсхолдер [[+key]] товара, чтобы например сделать его в каталоге так:
<div class="ms2product" id="product_key_[[+key]]">..</div>

И обратиться к этому товару так:
<script>$('#product_key_' + response.data.key + ' .product__status').html('Товар успешно добавлен');</script>

Как мне в коллбэке обратиться на странице каталога к успешно добавленному товару?
Коллбэк не возвращает его ID

Спасибо.
Fullstack
12 мая 2020, 20:41
modx.pro
963
0

Комментарии: 4

Илья Уткин
13 мая 2020, 10:36
1
+1
Вот, как формируется этот key. Значит, можно на фронтенде у товара добавить ключ в качестве идентификатора — как-то так:
{var $key = (($id ~ $price ~ $weight ~ ($options | toJSON)) | md5)}
<div class="ms2product" id="product_key_{$key}">..</div>
    Fullstack
    13 мая 2020, 14:38
    0
    Как формируется читал, просто там не было пояснения, как его правильно сформировать, и вот в только этой теме вы как раз дали ответ.

    Но к сожалению не сработало, MD5 суммы отличаются. {$key} товара с одной хеш-суммой, а в коллбэке вернулась другая
      Илья Уткин
      13 мая 2020, 14:44
      0
      Ну я написал примерный код — нужно убедиться, что внутри каждой переменно содержится то, что надо. Думаю, тут проблема в опциях товара — надо потестировать, в каком формате они должны быть.

      Прям в коде минишопа добавь такую строку (чтобы в журнале ошибок увидеть):
      $this->modx->log(1, $id . '|' . $price . '|' . $weight . '|' . (json_encode($options)) );

      И в чанке сделай
      {($id ~ '|' ~ $price ~ '|' ~ $weight ~ '|' ~ ($options | toJSON)}

      И посмотри, чем отличаются эти строки.
    Артем
    13 мая 2020, 15:02
    0
    по-моему, проще будет расширить класс корзины и возвращать id товара в data
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4