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 NikOne
      Здравствуйте уважаемые
      Хочу сделать в корзине уже выбранную страну с номером телефона, чтоб людям не пришлось долго искать.
      Хочу допустим по умолчанию выбрать одну из стран, но при этом была возможность выбрать другую страну для номера телефона
      Модуль Ajax Quick Checkout6.6.5
       
      спасибо )
       

    • By denis92
      Фильтр от Digital Elephant - это современное и надежное решение для быстрой фильтрации товаров, благодаря продуманной оптимизации запросов по категориям, производителям, атрибутам, опциям и ocfilter. Также присутствует дополнительный функционал, такой как кнопка show more, кеширование, формирование посадочных страниц и многое другое. 

      DEMO FILTER
      Demo

      DEMO ADMIN
      Demo используйте username/password:demo/demo

      Доступна тестовая версия по запросу в ЛС

      Перечень функционала:
      Фильтрация товаров по категориям, производителям, опциям, атрибутам и встроенным фильтрам опенкарта Ajax обновление при выборе сортировки и лимита Ajax обновление пагинации и отображаемого количества товаров на странице Ajax кнопка "показать еще" Кеширование(для магазинов с большим количеством товаров) Развертывание и свертывание элементов фильтра с сохранением состояния Выбор типа отображаемой формы опций фильтра(checkbox, radio, checkbox image, radio image, select) Формирование посадочных страниц на основе metakeywords Другие настройки(выбор прелоадера, отображение кол-во товаров с привязкой к опциям и т.д.)  
      Внимание!
      * Некоторые файлы модуля закодированы
      * Скачивая модуль, вы даете согласие на разрешения сбора информации о вашем домене и версии опенкарта
      * Не тестировался с ocStore (тестовую версию можете запросить в ЛК)
      * Покупая модуль вы даете согласие, что протестировали тестовую версию модуля и у вас не возникло претензий или проблем

      Бесплатная консультация 24/7
      Платная техподдержка

      Установка и настройка
      YOUTUBE

      * Документация установки и настройки модуля прилагается в скачанном архиве.
      * Не забывайте после настройки модуля чистить папку system/storage/cache и обновлять модификаторы
  • 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.