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

Замена кнопки купить на ссылку в корзину


simpl1k

Recommended Posts

Добрый день, вообщем необходимо сделать, что бы после добавления товара в корзину кнопка купить становилась ссылкой на корзину и  при повторном клике был переход в корзину (для примера вот тут так реализовано https://www.wildberries.ru/). Я примерно представляю как это должно выглядеть, но не понимаю до конца:



<div class="cart">
<?php if (тут должно быть условие какое то ?) { ?>
<input type="button" value="<?php echo $button_cart; ?>" id="button-cart" class="button" /> class="button" />
<?php } else { ?>
тут должна быть замена на ссылку в коризну?
<?php } ?>
</div> 

Подскажите правильно ли я мыслю, или может есть готовое решение ? искал искал, но что-то не нашел. Спасибо


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


В файле catalog/controller/product/product.php

 

После строки:

if ($product_info) {

Добавляем:

            $this->data['product_in_cart'] = false;
            foreach ($this->cart->getProducts() as $cart_product) {
                if ($product_info['product_id'] == $cart_product['product_id']) {
                    $this->data['product_in_cart'] = true;
                    break;
                }
            }

Потом в шаблоне товара можно использовать так: <?php if ($product_in_cart) { ?>

 

Потом ещё надо сделать замену в скрипте добавления товара в корзину.

Он тоже находится в product.tpl

 

P.S.: Иструкция для версии 1.5.x. Т.к. вы не указали версию движка, привёл по наиболее вероятному сценарию.

Змінено користувачем mpn2005
  • +1 2
Надіслати
Поділитися на інших сайтах

 

Потом ещё надо сделать замену в скрипте добавления товара в корзину.

Он тоже находится в product.tpl

 

P.S.: Иструкция для версии 1.5.x. Т.к. вы не указали версию движка, привёл по наиболее вероятному сценарию.

Да версия движка 1.5.х.

Если не сложно, не могли бы Вы подсказать что именно поменять в скрипте? 

сам скрипт из product.tpl

$('#button-cart').bind('click', function() {
	$.ajax({
		url: 'index.php?route=checkout/cart/add',
		type: 'post',
		data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
		dataType: 'json',
		success: function(json) {
			$('.success, .warning, .attention, information, .error').remove();
			
			if (json['error']) {
				if (json['error']['option']) {
					for (i in json['error']['option']) {
						$('#option-' + i).after('<span class="error">' + json['error']['option'][i] + '</span>');
					}
				}
                
                if (json['error']['profile']) {
                    $('select[name="profile_id"]').after('<span class="error">' + json['error']['profile'] + '</span>');
                }
			} 
			
			if (json['success']) {
				$('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
					
				//$('.success').fadeIn('slow');
					
				$('#cart').load('index.php?route=module/cart #cart > *');
				
				//$('html, body').animate({ scrollTop: 0 }, 'slow'); 
			}	
		}
	});
});
Надіслати
Поділитися на інших сайтах


 

После строки:

if (json['success']) {

Добавить:

$('.product-info .cart').html('Тут нужный код после добавления в корзину');

Спасибо большое, все получилось. Но вот вопрос, задуманное то я с Вашей помощью сделал на странице продукта, а про категории и забыл как то, попытался сделать по аналогии, но ничего не получилось, во всех случаях мне выводило  Undefined variable: product_info in.

Для страницы категорий это можно реализовать как то? Спасибо заранее если подскажите.

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


Спасибо большое, все получилось. Но вот вопрос, задуманное то я с Вашей помощью сделал на странице продукта, а про категории и забыл как то, попытался сделать по аналогии, но ничего не получилось, во всех случаях мне выводило  Undefined variable: product_info in.

Для страницы категорий это можно реализовать как то? Спасибо заранее если подскажите.

В категории нет product_info, т.к. там не один товар.

Данные по товарам содержатся в массиве, поэтому там необходимо поступать совсем по другому.

 

В файле catalog/controller/product/category.php

После строки:

$this->data['products'] = array();

Добавляем:

            $cart_product_id = array();
            foreach ($this->cart->getProducts() as $cart_product) {
                $cart_product_id[$cart_product['product_id']] = 1;
            }

Это мы создали индексный массив, чтобы не перебирать товары по нескольку раз. Т.к. товаров много, а не один.

 

Теперь после строки:

$this->data['products'][] = array(

Добавляем:

'in_cart' => !empty($cart_product_id[$result['product_id']]),

С контроллером на этом всё.

 

Осталось в шаблоне в нужном месте вставить условие:

<?php if ($product['in_cart']) { ?>
Товар в корзине!
<?php } else { ?>
Товара нет в корзине!
<?php } ?>

P.S.: В шаблоне это всё должно находиться внутри цикла перебора товаров: <?php foreach ($products as $product) { ?>

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

 

Осталось в шаблоне в нужном месте вставить условие:

 

Спасибо все получилось, но последний вопрос в продукт.тпл был скрипт который сразу менял кнопку, а в категориях такого нет.

И ссылка меняется только после обновления страницы.

 

Я пытался вставить из product.tpl в category.tpl

$('#button-cart').bind('click', function() {
	$.ajax({
		url: 'index.php?route=checkout/cart/add',
		type: 'post',
		data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
		dataType: 'json',
		success: function(json) {
			$('.success, .warning, .attention, information, .error').remove();
		
			if (json['success']) {
				$('.product-info .cart').html('<a href="<?php echo $cart; ?>"><?php echo $text_cart; ?></a>');
					
				$('#cart').load('index.php?route=module/cart #cart > *');
       
			}	
		}
	});
});

Вместо .product-info я вставлял и product-grid и product-list, плюс в том скрипте bind click привязывается к id кнопки купить,  а в категориях добавление идет через onlick и как это привязать к скрипту? 

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


Вместо .product-info я вставлял и product-grid и product-list, плюс в том скрипте bind click привязывается к id кнопки купить,  а в категориях добавление идет через onlick и как это привязать к скрипту? 

Со скриптом тут тоже всё по другому.

 

В шаблоне category.tpl.

Находим:

    <?php foreach ($products as $product) { ?>
    <div>

И приводим к такому виду:

    <?php foreach ($products as $product) { ?>
    <div id="product-<?php echo $product['product_id']; ?>">

Добавлен id для блока товара, чтобы мы могли потом к нему получить доступ.

 

Потом в файле catalog/view/javascript/common.js

 

После строки:

$('#cart-total').html(json['total']);

Добавляем:

$('#product-' + product_id + ' .cart').html('Товар добавлен в корзину!');

P.S.: В некоторых шаблонах используется свой файл common.js и он может находится по другому пути.

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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