Автор Тема: Как очистить корзину используя javascript  (Прочитано 540 раз)

18 Сентября 2015, 13:08:22
  • Старожил
  • ****
  • Сообщений: 289
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
При покидании сайта, клиенты, забывают оформит заказ и товар остается в корзине.
При попытки покидания сайта с товаром выводиться сообщение с кнопками на javascript:
Очистить корзину и покинуть сайт
Отмена.
Это все сделано.

Вопрос  такой. Как очистить корзину при выходе используя javascript ?
Или какой другой вариант?
Преста 1.6
Спасибо!
18 Сентября 2015, 16:00:54
Ответ #1
  • Фрилансер
  • *
  • Сообщений: 113
  • Репутация: +3/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ссылка для удаления
<a href="{$link->getPageLink('cart', true, NULL, "emptyCart=1&amp;token={$token_cart}")}" title="{l s='Clear Cart'}">{l s='Clear Cart'}</a>Метод в контроллер CartController.php
protected function emptyCart()
{
    $products = $this->context->cart->getProducts();

    foreach ($products as $product)
        $this->context->cart->deleteProduct($product["id_product"]);
}
18 Сентября 2015, 16:19:00
Ответ #2
  • Старожил
  • ****
  • Сообщений: 289
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо большое! Сейчас попробую...
18 Сентября 2015, 16:38:03
Ответ #3
  • Старожил
  • ****
  • Сообщений: 289
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нет .. Это конечно все хорошо но мне нужно очистить корзину в header.tpl
То есть в  header.tpl идет сравнение на покидание сайта.
Если есть товары в корзине, то предложение или остаться, или очистить корзину и выйти с сайта.
И вот тут надо, очистить корзину, используя javascript.
Может есть другие мысли по решению именно из header.tpl .
Или можно создать станицу , перейти туда и там в HTML работать.
Но все равно вопрос и там, как очистить всю корзину целиком только эту.
 
Вопрос пока открыт.
18 Сентября 2015, 17:28:06
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 2336
  • Репутация: +52/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Ссылка для удаления
<a href="{$link->getPageLink('cart', true, NULL, "emptyCart=1&amp;token={$token_cart}")}" title="{l s='Clear Cart'}">{l s='Clear Cart'}</a>Метод в контроллер CartController.php
protected function emptyCart()
{
    $products = $this->context->cart->getProducts();

    foreach ($products as $product)
        $this->context->cart->deleteProduct($product["id_product"]);
}

Не работает в prestashop 1.6
У меня в prestashop 1.6 вот такой код работал
protected function emptyCart()
{
    $result = array();
    $result['summary'] = $this->context->cart->getSummaryDetails(null, true);
    foreach ($result['summary']['products'] as $key => &$product)
    {
        $this->processDeleteProduct($product['id_product'],$product['id_product_attribute'],$product['customization_id'],$product['id_address_delivery']);
    }
}
 
protected function processDeleteProduct($idProd, $idAttrib, $custom_id, $id_address)
{
    if ($this->context->cart->deleteProduct($idProd, $idAttrib, $custom_id, $id_address))
    {
        if (!Cart::getNbProducts((int)($this->context->cart->id)))
        {
            $this->context->cart->setDeliveryOption(null);
            $this->context->cart->gift = 0;
            $this->context->cart->gift_message = '';
            $this->context->cart->update();
        }
    }
    $removed = CartRule::autoAddToCart();
    if (count($removed) && (int)Tools::getValue('allow_refresh'))
        $this->ajax_refresh = true;
}

Еще в public function postProcess() добавить нужно
elseif (Tools::getIsset('emptyCart'))
$this->emptyCart();
18 Сентября 2015, 18:13:58
Ответ #5
  • Старожил
  • ****
  • Сообщений: 289
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо проверю...
Благодарю за ответ!!
18 Сентября 2015, 18:45:49
Ответ #6
  • Старожил
  • ****
  • Сообщений: 289
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нет.. вот скрипт в header.tpl Проверка то в нем...
<script type="text/javascript">
 function is_confirm()
 {
 var r=confirm('Уважаемый покупатель!'+'\n' +'В вашей корзине есть не оформленный товар.'+'\n' +'Вы хотите очистить корзину и покинуть сайт?');
if (r==true)
 {
Вот здесь нужно поставить очистку корзины, перед закрытием.
То-есть переход , к какой-то функции для очистки корзины.
Естественно, пользователь пока не регистрированный и только у него это корзина.
Но база то растет, брошенные корзины.
Вот для этого и нужно при выходе сбросить его корзину.
Ну а далее переход к выходу после очиски……
document.location.replace("http://Переход на страницу выхода");
}
 else
 {
 }
 }
 </script>
Вопрос пока открыт.
18 Сентября 2015, 18:49:12
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 13287
  • Репутация: +14557/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А как вы сделали проверку корзины, где у вас проверяет что в корзине есть товар?
18 Сентября 2015, 18:56:59
Ответ #8
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86057
  • Репутация: +25403/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для брошенных корзин есть хороший модуль.
Модуль Abandoned Cart Pro
18 Сентября 2015, 19:09:54
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32999
  • Репутация: +26759/-0
    • Просмотр профиля
Вы пишите, что хотите чтобы не сохранялись брошенные корзины. Тогда вам такой js скрипт не поможет.
Нужно вызывать контроллер корзины и в нем удалять товары. Как менять контроллер вам написали.

А если хотите перенаправить клиента на свою страницу
document.location.replace("http://Переход на страницу выхода");то создайте свой контроллер от контроллера корзины и тогда сможете использовать все методы родителя.
18 Сентября 2015, 19:15:49
Ответ #10
  • Старожил
  • ****
  • Сообщений: 289
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем блогодарен!! Вопрос закрыт.
Спасибо всем, кто принимал участие!