[РЕШЕНО] minishop2 изменить total_cost в корзине

Есть вот такой код
switch ($modx->event->name) {
    case 'msOnGetStatusCart':
       //$res = $modx->getObject('modResource', $product->get('id'));
        //$addcost = $res->getTVValue('add_cost') ?: 0;
        $tmp = $cart->get();
        foreach($tmp as $key => $item){
            $res = $modx->getObject('modResource', $item['id']);
            $addcost = $res->getTVValue('add_cost') ?: 0;
            $status['total_cost'] += $addcost;
        }
         $modx->event->returnedValues = $status;
        //$modx->log(1, print_r($status,1));
    break;
}
Но total_cost на фронте не меняется, что не так?
Рабочий вариант написан по этой заметке bezumkin.ru/sections/components/1624/
switch ($modx->event->name) {
    case 'msOnGetStatusCart':
        $tmp = $cart->get();
        $values = & $modx->event->returnedValues;
        foreach($tmp as $key => $item){
            $res = $modx->getObject('modResource', $item['id']);
            $addcost = $res->getTVValue('add_cost') ?: 0;
            $status['total_cost'] += $addcost;
        }
        $values['status'] = $status;      
    break;
И если этот вариант не работает есть вероятность что какой-то другой компонент возвращает $values['message'] из-за чего minishop2 считает что произошла ошибка и плагин не срабатывает. В моём случае компонент mixedImage возвращал какую-то ссылку, всё заработало после удаления компонента.
Артур
30 октября 2020, 21:20
modx.pro
1
189
0
Поблагодарить автора Отправить деньги

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

Михаил
30 октября 2020, 22:48
0
Просто нужно расширять корзину тут
    Артур
    31 октября 2020, 01:36
    0
    Можно и так, но данный способ кажется мне избыточным. Тем более автор дополнения предусмотрел событие msOnGetStatusCart и там есть код $status = $response['data']['status']. Вопрос как положить мое значение сюда $response['data']['status']?
    Артур
    31 октября 2020, 11:56
    0
    Я нашёл вот эту старую статью bezumkin.ru/sections/components/1624/ и если следовать логике в ней описанной то должно быть так
    switch ($modx->event->name) {
        case 'msOnGetStatusCart':
            $tmp = $cart->get();
            $values = & $modx->event->returnedValues;
            foreach($tmp as $key => $item){
                $res = $modx->getObject('modResource', $item['id']);
                $addcost = $res->getTVValue('add_cost') ?: 0;
                $status['total_cost'] += $addcost;
            }
            $values['status'] = $status;      
        break;
    Но так тоже не работает. Неужели никто из корифеев modx на форум не заглядывает?
    P.S.Такой вариант
    $values = array(
                'status' => $status,
                'cart' => $cart,
            );
    и такой
    $values['data'] = array(
                'status' => $status,
                'cart' => $cart,
            );
    Тоже не работают.
      Aborrol
      31 октября 2020, 12:13
      0
      У меня как-то так работает
      $status['total_cost'] = '100';
      $statusnew = & $modx->event->returnedValues['status'];
      $statusnew = $status;
      Denis
      14 ноября 2020, 22:20
      0
      Что то у вас как то сложно) Можно же проще!
        Иван Бочкарев
        14 ноября 2020, 22:52
        0
        Или обновиться до версии 2.6.0 там уже есть из коробки:
          Denis
          14 ноября 2020, 22:54
          0
          Хм, читал сегодня про это обновление и не заметил) Здорово, что Minishop2 не «стоит на месте».
            Артур
            14 ноября 2020, 22:57
            0
            Да, круто что в новой версии появился подсчет суммы по каждой позиции из коробки, раньше приходилось изгаляться. Но тут речь не об этом.
            Артур
            14 ноября 2020, 22:55
            0
            Ребята будьте внимательны, речь идёт о total_cost всей корзины, а не отдельного товара.
              Denis
              14 ноября 2020, 22:58
              0
              Так это, или нет… Оба хороши. Если есть теперь «из коробки», меньше мороки… если нету, то я дал решение довольно не плохое и работающее на ура, мои магазины полностью через ajax работают в модалке с этим методом.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            10