Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Плюс/Минус


Recommended Posts

Здравствуйте!

Подскажите пжл, как реализовать в категории Плюс/минус вместо кнопки "Купить".

http://joxi.ru/52a1l8GiEJEpy2

 

По нажатию Плюс - товар добавляется в корзину(+1)

По нажатию Минус - Минусуется с корзины(-1)

Надіслати
Поділитися на інших сайтах


17 минут назад, mss сказал:

По нажатию Плюс - товар добавляется в корзину(+1)

По нажатию Минус - Минусуется с корзины(-1)

С плюсом всё легко - просто вызываете событие add которое на кнопке купить, оно и будет добавлять. А вот с удалением сложнее. Смотрите как это сделано в корзине. В корзине удаление идет по cart_id товара в корзине. Вам нужно найти все товары которые сейчас в корзине покупателя, выбрать только тот у которого product_id равен тому на котором тыкнули минус и уменьшить его количество. Недавно обсуждал подобную тему, может натолкнёт вас на нужные мысли

 

Надіслати
Поділитися на інших сайтах

10 минут назад, iglin сказал:

С плюсом всё легко - просто вызываете событие add которое на кнопке купить, оно и будет добавлять.

Ага, с плюсом - проблем нет.

 

11 минут назад, iglin сказал:

с удалением сложнее

с минусом - пока не понятно

Надіслати
Поділитися на інших сайтах


19 минут назад, SergeTkach сказал:

возможно, триггеры Вам помогут.

на плюс да.  

Надіслати
Поділитися на інших сайтах

Только что, mss сказал:

с минусом - пока не понятно

Ну если прям совсем образно, то нужно в js создать функцию del например по аналогии с add, в ней обращаться через ajax на новую функцию которую вы создадите в контроллере checkout/cart (пример такой функции я выше дал, но там полное удаление товара, в вашем случае нужно переделать и менять количество на -1, ну или удалять если всего 1 в корзине), дальше через js перерисовывать так же корзину как при добавлении... 

 

  • +1 1
Надіслати
Поділитися на інших сайтах

common.js

$(function(){
	$('.btn-remove-in-cart').click(function(){
		let product_id = $(this).attr('data-productid');

		$.ajax({
			url: 'index.php?route=checkout/cart/removeAllProductsForCartId',
			type:'post',
			dataType:'json',
			data:{'product_id': product_id},
			success: function(res){
				// тут, обновляем корзину
				// удаляем кнопку
			}
		})
	})
});

model/product

public function getProductsCartId($product_id){
        $query = $this->db->query("SELECT cart_id  FROM " . DB_PREFIX . "cart  WHERE product_id = '" . (int) $product_id . "' AND api_id = '" . (isset($this->session->data['api_id']) ? (int) $this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int) $this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");

        return $query->rows;
    }

category.php

$query_cart_id = $this->model_catalog_product->getProductsCartId($result['product_id']);
                $in_cart = false;
                if($query_cart_id){
                    $in_cart = true;
                }


...
'in_cart' => $in_cart,

category.tpl

<?php if($product['in_cart']){?>
              <button data-productid="<?php echo $product['product_id']; ?>" class="btn-remove-in-cart btn btn-default">Удалить из корины</button>
              <?php } ?>

 

Надіслати
Поділитися на інших сайтах


2 минуты назад, mss сказал:

common.js


$(function(){
	$('.btn-remove-in-cart').click(function(){
		let product_id = $(this).attr('data-productid');

		$.ajax({
			url: 'index.php?route=checkout/cart/removeAllProductsForCartId',
			type:'post',
			dataType:'json',
			data:{'product_id': product_id},
			success: function(res){
				// тут, обновляем корзину
				// удаляем кнопку
			}
		})
	})
});

model/product


public function getProductsCartId($product_id){
        $query = $this->db->query("SELECT cart_id  FROM " . DB_PREFIX . "cart  WHERE product_id = '" . (int) $product_id . "' AND api_id = '" . (isset($this->session->data['api_id']) ? (int) $this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int) $this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");

        return $query->rows;
    }

category.php


$query_cart_id = $this->model_catalog_product->getProductsCartId($result['product_id']);
                $in_cart = false;
                if($query_cart_id){
                    $in_cart = true;
                }


...
'in_cart' => $in_cart,

category.tpl


<?php if($product['in_cart']){?>
              <button data-productid="<?php echo $product['product_id']; ?>" class="btn-remove-in-cart btn btn-default">Удалить из корины</button>
              <?php } ?>

 

контроллер cart

public function removeAllProductsForCartId(){
        $this->load->language('checkout/cart');

        $json = array();

        // Remove
        if (isset($this->request->post['key'])) {
            $products = $this->cart->getProducts();
            foreach ($products as $product) {
                if ($product['product_id'] == $this->request->post['key']) {
                    $this->cart->remove($product['cart_id']);

                    unset($this->session->data['vouchers'][$product['cart_id']]);
                }
            }

            $json['success'] = $this->language->get('text_remove');

            unset($this->session->data['shipping_method']);
            unset($this->session->data['shipping_methods']);
            unset($this->session->data['payment_method']);
            unset($this->session->data['payment_methods']);
            unset($this->session->data['reward']);

            // Totals
            $this->load->model('extension/extension');

            $totals = array();
            $taxes = $this->cart->getTaxes();
            $total = 0;

            // Because __call can not keep var references so we put them into an array.
            $total_data = array(
                'totals' => &$totals,
                'taxes'  => &$taxes,
                'total'  => &$total
            );

            // Display prices
            if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                $sort_order = array();

                $results = $this->model_extension_extension->getExtensions('total');

                foreach ($results as $key => $value) {
                    $sort_order[$key] = $this->config->get($value['code'] . '_sort_order');
                }

                array_multisort($sort_order, SORT_ASC, $results);

                foreach ($results as $result) {
                    if ($this->config->get($result['code'] . '_status')) {
                        $this->load->model('extension/total/' . $result['code']);

                        // We have to put the totals in an array so that they pass by reference.
                        $this->{'model_extension_total_' . $result['code']}->getTotal($total_data);
                    }
                }

                $sort_order = array();

                foreach ($totals as $key => $value) {
                    $sort_order[$key] = $value['sort_order'];
                }

                array_multisort($sort_order, SORT_ASC, $totals);
            }

            $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total, $this->session->data['currency']));
        }

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

 

Надіслати
Поділитися на інших сайтах


9 минут назад, mss сказал:

кнопка Удалить из корзины появилась, но не удаляет

ну как минимум в js у вас data:{'product_id': product_id}, а в removeAllProductsForCartId вы ждёте key

Надіслати
Поділитися на інших сайтах

34 минуты назад, iglin сказал:

ну как минимум в js у вас data:{'product_id': product_id}, а в removeAllProductsForCartId вы ждёте key

копипаст, он такой.  

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.