Jump to content
comrues

Удалять товар из wishlist кнопкой без перезагрузки

Recommended Posts

В wishlist удаление товара из закладок реализовано ссылкой, вот так - имя_сайта/index.php?route=account/wishlist&remove=57 Таки способом удаление происходить с перезагрузкой страницы. Как это реализовать с помощью аджакса? Я так понимаю, что нужно сделать по принципу как у корзины, где есть onclick=cart.remove('6');"

Подскажите пожалуйста как это реализовать?

Share this post


Link to post
Share on other sites

добавление в вишлист на кнопке onclick="wishlist.add('id_tovara');
дальше идём в файл с жавой (/catalog/view/javascript/common.js) и смотрим 282 строку, внутри неё есть var wishlist = { 'add': function(product_id) готовая к использованию, и пустая 'remove': function() {

далее на основе add нужно дополнить remove
потом в контроллере (/catalog/controller/account/wishlist.php) на основе функции add сделать функцию remove, так как пост запрос из аякса она не увидит.
потом дописываем кнопку в шаблоне для вишлиста, всё.
по крайней мере в моей версии опенкарта это так выглядит, и на мой взгляд план действий такой

Share this post


Link to post
Share on other sites

в конец  controller/account/wishlist.php 
 

Спойлер


public function remove(){


        $this->load->language('account/account');
        $this->load->language('account/wishlist');

		$json = array();
		
		$this->load->model('catalog/product');

		if (isset($this->request->post['product_id'])) {
            $product_id = $this->request->post['product_id'];
        } else {
            $product_id = 0;
        }

        $product_info = $this->model_catalog_product->getProduct($product_id);

        if (isset($this->request->post['product_id']) )  {
            // Remove product of Wishlist
            if ($this->customer->isLogged()) {

				$this->load->model('account/wishlist');
                $this->model_account_wishlist->deleteWishlist($this->request->post['product_id']);
            } else {
                $key = array_search($this->request->post['product_id'], $this->session->data['wishlist']);
                if ($key !== false) {
                    unset($this->session->data['wishlist'][$key]);
                }
			}
			$json['redirect'] = $this->url->link('account/wishlist', '', true);

        }


        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
	}


 


в шаблон  account/wishlist.php 

html  

Спойлер


<button  class="wishlist_remove btn" data-product-id="{{ product.product_id}}">
     <i class="bi bi-x"></i>
</button>

 

 



JS
 

Спойлер


<script type="text/javascript"><!--

$('.wishlist_remove').on('click', function() {
   console.log("whislist remove:", $(this).data('product-id'));
   //return
    $.ajax({
      url: "index.php?route=account/wishlist/remove",
      type: "post",
      data: "product_id=" + $(this).data('product-id'),
      dataType: "json",
      success: function (json) {
        $(".alert-dismissible").remove();
        if (json["redirect"]) {
          location = json["redirect"];
        }

        if (json["success"]) {
          console.log(json["success"]);
          $("#content").prepend('<div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> ' +  json["success"] +  ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');
        }
        //$("#wishlist-total span").html(json["total"]);
        //$("#wishlist-total").attr("title", json["total"]);

        $("html, body").animate({ scrollTop: 0 }, "slow");
      },
      error: function (xhr, ajaxOptions, thrownError) {
        alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
      },
    });
});    
//--></script> 


 

 

Share this post


Link to post
Share on other sites
В 25.08.2020 в 17:08, DImNSk сказал:

в конец  controller/account/wishlist.php 
 

  Показать контент

 


public function remove(){


        $this->load->language('account/account');
        $this->load->language('account/wishlist');

		$json = array();
		
		$this->load->model('catalog/product');

		if (isset($this->request->post['product_id'])) {
            $product_id = $this->request->post['product_id'];
        } else {
            $product_id = 0;
        }

        $product_info = $this->model_catalog_product->getProduct($product_id);

        if (isset($this->request->post['product_id']) )  {
            // Remove product of Wishlist
            if ($this->customer->isLogged()) {

				$this->load->model('account/wishlist');
                $this->model_account_wishlist->deleteWishlist($this->request->post['product_id']);
            } else {
                $key = array_search($this->request->post['product_id'], $this->session->data['wishlist']);
                if ($key !== false) {
                    unset($this->session->data['wishlist'][$key]);
                }
			}
			$json['redirect'] = $this->url->link('account/wishlist', '', true);

        }


        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
	}

 

 

 

 


в шаблон  account/wishlist.php 

html  

  Показать контент

 


<button  class="wishlist_remove btn" data-product-id="{{ product.product_id}}">
     <i class="bi bi-x"></i>
</button>

 

 



JS
 

  Показать контент

 


<script type="text/javascript"><!--

$('.wishlist_remove').on('click', function() {
   console.log("whislist remove:", $(this).data('product-id'));
   //return
    $.ajax({
      url: "index.php?route=account/wishlist/remove",
      type: "post",
      data: "product_id=" + $(this).data('product-id'),
      dataType: "json",
      success: function (json) {
        $(".alert-dismissible").remove();
        if (json["redirect"]) {
          location = json["redirect"];
        }

        if (json["success"]) {
          console.log(json["success"]);
          $("#content").prepend('<div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> ' +  json["success"] +  ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');
        }
        //$("#wishlist-total span").html(json["total"]);
        //$("#wishlist-total").attr("title", json["total"]);

        $("html, body").animate({ scrollTop: 0 }, "slow");
      },
      error: function (xhr, ajaxOptions, thrownError) {
        alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
      },
    });
});    
//--></script> 

 

 

 

 

 

Спасибо!!!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By kirians
      Вы задумывались над тем, что удобный поиск повышает конверсию Вашего магазина на 25-35%?
      Чем быстрей пользователь найдет то, что ищет, тем больше вероятность, что он останется на сайте и купит товар!
       

       
          Увеличивайте конверсии на сайте с помощью умного и быстрого поиска:
      Используйте подсказки, чтобы сделать поиск более точным Выберите поля, по которым хотите вести поиск (имя, описание, SKU, ISBN, MODEL, UPC, JAN, Meta tag, Attribute) Посмотрите историю поиска, для дальнейшей статистики и отслеживания переходов Настраиваете выводимые результаты поиска (заголовки, категории или отключите цену из выводимых параметров) С каждым новым запросом Ваш поиск будет становиться более точным Укажите количество выводимых товаров по запросу Укажите правила для отображения заголовков, картинок товара и показывайте или прячьте цену товара Подходит к любой теме используемой в вашем магазине Адаптивный на мобильных устройствах  
    • By kirians
      1 889.99 руб
      Скачать/Купить дополнение


      Ajax Live Search for Opencart (Поиск вживую)
      Вы задумывались над тем, что удобный поиск повышает конверсию Вашего магазина на 25-35%?
      Чем быстрей пользователь найдет то, что ищет, тем больше вероятность, что он останется на сайте и купит товар!
       

       
          Увеличивайте конверсии на сайте с помощью умного и быстрого поиска:
      Используйте подсказки, чтобы сделать поиск более точным Выберите поля, по которым хотите вести поиск (имя, описание, SKU, ISBN, MODEL, UPC, JAN, Meta tag, Attribute) Посмотрите историю поиска, для дальнейшей статистики и отслеживания переходов Настраиваете выводимые результаты поиска (заголовки, категории или отключите цену из выводимых параметров) С каждым новым запросом Ваш поиск будет становиться более точным Укажите количество выводимых товаров по запросу Укажите правила для отображения заголовков, картинок товара и показывайте или прячьте цену товара Подходит к любой теме используемой в вашем магазине Адаптивный на мобильных устройствах  
      Добавил kirians Добавлено 03.11.2020 Категория Поиск Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Нет Старая цена 0  
    • By Seriusis
      Простой модификатор, позволяет добавить товары в избранное без регистрации.
      Основа решения взята в одной из тем на форуме, доработана и оформлена как модификатор. Совместим с 2.3 и 3.x 
      Модифицирует 2 контроллера : wishlist.php и header.php
      Внимание! 
      Если в файле catalog/controller/account/wishlist.php изменялся код или его модифицируют другие модификаторы, не надо ставить этот модификатор! Лучше сделайте изменения руками!
      Демо 
      https://oc23.likedev.pro/
       
      Установка
      Через установщик дополнений оперкарт.
      После установки почистить кэш модификаторов.
       
      Также смотрите модули:
      Accordion & Tabs & Steps, Faq & HowTo Microdata, any place & content
    • By Seriusis
      Скачать/Купить дополнение


      Закладки без регистрации
      Простой модификатор, позволяет добавить товары в избранное без регистрации.
      Основа решения взята в одной из тем на форуме, доработана и оформлена как модификатор. Совместим с 2.3 и 3.x 
      Модифицирует 2 контроллера : wishlist.php и header.php
      Внимание! 
      Если в файле catalog/controller/account/wishlist.php изменялся код или его модифицируют другие модификаторы, не надо ставить этот модификатор! Лучше сделайте изменения руками!
      Демо 
      https://oc23.likedev.pro/
       
      Установка
      Через установщик дополнений оперкарт.
      После установки почистить кэш модификаторов.
       
      Также смотрите модули:
      Accordion & Tabs & Steps, Faq & HowTo Microdata, any place & content
      Добавил Seriusis Добавлено 05.05.2020 Категория Модули Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Opencart.pro 2.3 Обращение к серверу разработчика Нет Старая цена 0  
    • By zomo
      Часто администраторы магазинов сталкиваются с тем, что забывают обновить страницу с последними заказами тем самым теряя время и покупателей!
      Данный модуль исправляет эту ситуацию, теперь, чтобы увидеть последние актуальные заказы не нужно каждый раз обновлять страницу или судорожно заходить в почтовый ящик, модуль сделает это за вас.
       
      Период обновление блока (актуализации последних заказов) - раз в 10 секунд.
       
      Установка
      Перейдите в раздел Дополнения -> Менеджер дополнений; Загрузите файл ajax_recent.ocmod для своей версии;  
      Внимание! Модуль заменяет стандартный модуль вывода последних заказов в админке!
      В случае если установлены модули цветных статусов заказов либо подобных адаптация возможна, но на платной основе.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.