Автор Тема: Как получить информацию по промокодам из корзины?  (Прочитано 273 раз)

29 Октябрь 2020, 10:27:37
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
День добрый,
Подскажите, как получить информацию по промокодам из корзины?

Например информацию по товарам в корзине получаем вот так:
$this->context->cart->getProducts();
Как получить информацию по промокоду (размер скидки и т.д.)
$this->context->cart->???
P.S 1.6
29 Октябрь 2020, 12:09:30
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
$context->cart->getCartRules(CartRule::FILTER_ACTION_ALL);Смотрите в классе CartRules там варианты скидок.
29 Октябрь 2020, 13:05:37
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$context->cart->getCartRules(CartRule::FILTER_ACTION_ALL);Смотрите в классе CartRules там варианты скидок.

Спасибо за ответ.

Подскажите, думал что любое изменение в корзине можно поймать при помощи хука:
public function hookActionCartSave()
Однако при добавлении промо-кода к корзине данный хук не срабатывает.

Как быть?




29 Октябрь 2020, 14:11:45
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Как вариант, могу ли я дернуть выполнение хука
hookActionCartSave()из контроллера, например когда применяется промо код к корзине:
$this->context->cart->addCartRule($cartRule->id);Как после этой строки вызвать срабатывание хука?

Так будет правильно?
Hook::exec('ActionCartSave, $params);
29 Октябрь 2020, 14:15:59
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Вы можете получить данные по скидке в корзине только после завершения метода hookActionCartSave.
Только когда информацмя будет сохранена в бд можно ее получить.
29 Октябрь 2020, 14:43:02
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы можете получить данные по скидке в корзине только после завершения метода hookActionCartSave.
Только когда информацмя будет сохранена в бд можно ее получить.

Могу ли я в контроллере дёрнуть хук hookActionCartSave

Вот так не срабатывает:
Hook::exec('hookActionCartSave', $params);
29 Октябрь 2020, 16:54:23
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Можете но зачем? В любом контроллере вы можете использовать классы prestashop, это лучше.
29 Октябрь 2020, 17:26:11
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Можете но зачем? В любом контроллере вы можете использовать классы prestashop, это лучше.

Подскажите, думал что любое изменение в корзине можно поймать при помощи хука:
public function hookActionCartSave()
Однако при добавлении промо-кода к корзине данный хук не срабатывает.

Как быть? Возможно есть другой хук...
29 Октябрь 2020, 21:12:06
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
hookActionCartSave при обновлении корзины, т.е. товары, кол-во, цена и т.д.
Промо код это правила корзины, каталога или дискаунт на товары, клиента?
29 Октябрь 2020, 21:50:01
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
hookActionCartSave при обновлении корзины, т.е. товары, кол-во, цена и т.д.
Промо код это правила корзины, каталога или дискаунт на товары, клиента?

Имеется в виду промо код правило корзины.

При добавлении промокода в корзине не срабатывает хук hookActionCartSave
30 Октябрь 2020, 11:56:28
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Для добавления промо кодов нет хуков. Если вам нужен такой хук, то создайте его в своем модуле.
public function hookSubmitVoucherCode()
{
        /* Place your code here. */
}
30 Октябрь 2020, 15:00:47
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
На таком варианте остановился.

В ParentOrderController.php
При добавлении купона в корзину делаю:
$this->context->cart->addCartRule($cartRule->id);
$_GET['cart_rule'] = 'add';
Hook::exec('actionCartSave');

При удалении купона вот так:
$this->context->cart->removeCartRule($id_cart_rule);
$_GET['cart_rule'] = 'del';
Hook::exec('actionCartSave');

В самом хуке ловим момент добавления/удаления вот так:
public function hookActionCartSave()
{
        $cart_rule = Tools::getValue('cart_rule');
        if(!empty($cart_rule)) {
            Tools::testInfo($cart_rule.' промо код');
        }
.....

Как то так.