Удалить товар из корзины по id ?

Может кто-то сталкивался и быстро подскажет, буду признателен.
Хочу чтобы товары, которые выводятся msProducts имели возможность быть как добавленными в корзину так и удаленными оттуда.
И если с добавление товара в корзину проблем нет, добавление происходит по id товара
<form method="post" class="ms2_form">
                    <input type="hidden" name="id" value="{$id}">
                    
                    <input type="hidden" name="count" value="1">
                    <input type="hidden" name="options" value="[]">
                    <button class="btn btn_fluid" name="ms2_action" value="cart/add">I love this one</button>
                </form>
то для удаление уже используется не id а некий ключ — некий хеш.
<form method="post" class="ms2_form">
                    <input type="hidden" name="key" value="{$product.key}">
                    <button class="link" type="submit" name="ms2_action" value="cart/remove">
                        Remove
                    </button>
                </form>
и этот key в сниппете msProducts отсутствует.
Как наименее трудозатратно удалить товар имея только id?
Спасибо.
Александр Мельник
15 апреля 2020, 14:10
modx.pro
955
0

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

Александр Мельник
15 апреля 2020, 14:19
0
Пока что двигаюсь в направлении
— подсмотреть как сниппет msCart формирует key,
— скопировать msProducts и если это возможно, внедрить в него логику формирования ключа
    Николай
    15 апреля 2020, 14:27
    0
    Ключ формируется так:
    $key = md5($id . $price . $weight . (json_encode($options)));
      Александр Мельник
      15 апреля 2020, 14:28
      0
      Супер! Опробую.
        Александр Мельник
        15 апреля 2020, 16:12
        0
        Николай, а где именно происходит такое формирование ключа?
        Я смотрю что сниппет msCart его не рассчитывает, он получает всю корзину через
        $cart = $miniShop2->cart->get();
        и в $cart уже лежат ключи.
          Николай
          15 апреля 2020, 16:14
          +1
          в классе корзины:
          /core/components/minishop2/model/minishop2/mscarthandler.class.php
          Сниппет ничего не формирует. Он только выводит.
      Николай
      15 апреля 2020, 14:30
      0
      Ну тут возникает вопрос, что именно ты хочешь сделать. Если цели отслеживать нахождение товара в корзине нет (добавили товар, кнопка добавления поменялась на «удалить») то тебе хватит какого то файла\ресурса на который ты будешь стучаться ajax. Передавать туда ид товара, а в этом файле \ сниппете что вызывается на ресурсе ты можешь либо пройтись по массиву $_SESSION['minishop2']['cart'] и сделать unset подходящего товара, либо по шаблону выше сгенерировать id товара, и так же сделать его unset();
      Если нужно отслеживание есть ли товар в корзине то чуточку больше логики добавится. Нужно создать сниппет которым проверять товар в корзине.
        Александр Мельник
        15 апреля 2020, 15:37
        0
        Да спасибо, все и правда зависит от задачи.
        Мою можно описать так — я разрабатываю некий функционал подарков к заказу.
        При определенных условиях покупатель получает возможность выбрать один из нескольких подарков, добавив его в корзину с нулевой ценой.
        Сложность в том, что у человека должна быть возможность передумать. Выбрать другой подарок, который сразу заменит уже заранее добавленный и тому подобное.
        Все это происходит не в корзине, а подарки выводятся стандартно msProducts.
        Пока просто ищу способ товар и добавить в корзину и удалить. Почему не хочу просто чисткой $_SESSION['minishop2'] — это не запустит всю логику js скриптов minishop, не будут показаны уведомления о добавлении товара или его удалении.
        Но сейчас попробую генерировать key, думаю это поможет.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7