[miniShop2] Как идентифицировать на фронтенде товар, успешно добавленный в корзину?
В каталоге нужно обратиться к товарам в DOM через JS, но надо как-то идентифицировать товар, который был добавлен в корзину и обработан бэкенд-плагинами MODX.
Использую данный callback на фронтенде для отлова события товара, успешно добавленного в корзину:
Как мне в коллбэке обратиться на странице каталога к успешно добавленному товару?
Коллбэк не возвращает его ID
Спасибо.
Использую данный 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
Спасибо.
Комментарии: 4
Вот, как формируется этот key. Значит, можно на фронтенде у товара добавить ключ в качестве идентификатора — как-то так:
{var $key = (($id ~ $price ~ $weight ~ ($options | toJSON)) | md5)}
<div class="ms2product" id="product_key_{$key}">..</div>
Как формируется читал, просто там не было пояснения, как его правильно сформировать, и вот в только этой теме вы как раз дали ответ.
Но к сожалению не сработало, MD5 суммы отличаются. {$key} товара с одной хеш-суммой, а в коллбэке вернулась другая
Но к сожалению не сработало, MD5 суммы отличаются. {$key} товара с одной хеш-суммой, а в коллбэке вернулась другая
Ну я написал примерный код — нужно убедиться, что внутри каждой переменно содержится то, что надо. Думаю, тут проблема в опциях товара — надо потестировать, в каком формате они должны быть.
Прям в коде минишопа добавь такую строку (чтобы в журнале ошибок увидеть):
И в чанке сделай
И посмотри, чем отличаются эти строки.
Прям в коде минишопа добавь такую строку (чтобы в журнале ошибок увидеть):
$this->modx->log(1, $id . '|' . $price . '|' . $weight . '|' . (json_encode($options)) );
И в чанке сделай
{($id ~ '|' ~ $price ~ '|' ~ $weight ~ '|' ~ ($options | toJSON)}
И посмотри, чем отличаются эти строки.
по-моему, проще будет расширить класс корзины и возвращать id товара в data
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.