Перейти к содержанию
simpl1k

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

Рекомендуемые сообщения

Добрый день, вообщем необходимо сделать, что бы после добавления товара в корзину кнопка купить становилась ссылкой на корзину и  при повторном клике был переход в корзину (для примера вот тут так реализовано 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('Тут нужный код после добавления в корзину');
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.