[РЕШЕНО] minishop2 изменить total_cost в корзине
Есть вот такой код
Рабочий вариант написан по этой заметке bezumkin.ru/sections/components/1624/
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 на фронте не меняется, что не так?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 возвращал какую-то ссылку, всё заработало после удаления компонента.
Поблагодарить автора
Отправить деньги
Комментарии: 10
Просто нужно расширять корзину тут
Можно и так, но данный способ кажется мне избыточным. Тем более автор дополнения предусмотрел событие msOnGetStatusCart и там есть код $status = $response['data']['status']. Вопрос как положить мое значение сюда $response['data']['status']?
Я нашёл вот эту старую статью bezumkin.ru/sections/components/1624/ и если следовать логике в ней описанной то должно быть так
P.S.Такой вариант
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,
);
Тоже не работают.
У меня как-то так работает
$status['total_cost'] = '100';
$statusnew = & $modx->event->returnedValues['status'];
$statusnew = $status;
Что то у вас как то сложно) Можно же проще!
Или обновиться до версии 2.6.0 там уже есть из коробки:

Хм, читал сегодня про это обновление и не заметил) Здорово, что Minishop2 не «стоит на месте».
Да, круто что в новой версии появился подсчет суммы по каждой позиции из коробки, раньше приходилось изгаляться. Но тут речь не об этом.
Ребята будьте внимательны, речь идёт о total_cost всей корзины, а не отдельного товара.
Так это, или нет… Оба хороши. Если есть теперь «из коробки», меньше мороки… если нету, то я дал решение довольно не плохое и работающее на ура, мои магазины полностью через ajax работают в модалке с этим методом.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.