Перейти к содержанию
Официальный форум поддержки Simpla

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


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

По мотивам этого топика http://forum.simplacms.ru/comments.php?DiscussionID=745

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

В форме задал текстовое поле name="amount", но оттуда не забираются значение при помещении в корзину. Начал разбираться, добрался до скрипта /ajax/cart.php, который обрабатывает форму, там есть такая строка

$simpla->cart->add_item($simpla->request->get('variant', 'integer'), $simpla->request->get('amount', 'integer'));

через которую и задается количество товарных позиций ($simpla->request->get('amount', 'integer')), на сколько я понял. Я проверил свою теорию, заменив строку

$simpla->cart->add_item($simpla->request->get('variant', 'integer'), $simpla->request->get('amount', 'integer'));
на
$simpla->cart->add_item($simpla->request->get('variant', 'integer'), 10);

после нажатию на "Добавить в корзину", в корзину попало 10 товарных позиций. Я не остановился на этом, сделав, еще один опыт

http://***.ru/ajax/cart.php?variant=32&amount=15
и добавил строку print_r($_SESSION);die($simpla->request->get('amount', 'integer')); в файл cart.php, обнаружил, что сумма обновляется, значение total_products - верное, но почему оно не срабатывает в нормальном режиме??? такое ощущение, что срабатывает постаякс какой-то =)

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 76
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Косяк - прав))

надо поправить в файле /js/ajax-cart.js на это

// Аяксовая корзина
$('form.cart').live('submit', function(e) {
e.preventDefault();
var button = $(this).find('input[type=submit]');//здесь добавил var, это порочная практика делать глобальными переменные
$.ajax({
url: "ajax/cart.php",
data: {
variant: $(this).find('select').val(),
amount: $(this).find('input[name=amount]').val()
},
dataType: 'json',
success: function(data){
$('#cart_informer').html(data);
if(button.attr('added_text'))
button.val(button.attr('added_text'));
}
});
$(this).find('input[type=submit]').effect("transfer", { to: $("#cart_informer") }, 500);
return false;
});

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Друзья, поделитесь пожалуйста, как ее интегрировать, что где изменять не совсем понятно понятно, может что-то упущено?

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

<!-- Выбор варианта товара -->
<form class="variants" action="/cart">
<table>
{foreach $product->variants as $v}
<tr class="variant">
<td>
<input id="discounted_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $v@first}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
</td>
<td>
{if $v->name}<label class="variant_name" for="discounted_{$v->id}">{$v->name}</label>{/if}
</td>
<td>
{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
</td>
</tr>
{/foreach}
</table>
<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
</form>
<!-- Выбор варианта товара (The End) -->

КУДА ВПИСАТЬ? SIMPLA 2.1

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

Я ставил, и не один раз.
data: {
variant: здесь код выбора варианта(зависит от версии),
amount: $(this).find('input[name=amount]').val()
},
В шаблон добавляем в форму инпут, только без обратных слешей

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

Добрый день, не могли бы разжевать доходчиво как сделать форму для ручного ввода? Версия 2.1 ,поменял код в корзине /js/ajax-cart.js на тот, что был написан выше, в шаблон cart.tpl какова именно вида код должен быть form? Если не сложно скиньте кусок кода которым нужно заменить select стоящий по умолчанию.

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

Добрый день, как и все я заменил код в /js/ajax-cart.js

Пример моего кода:

$('form.cart').live('submit', function(e) {

e.preventDefault();

button = $(this).find('input[type="submit"]');

$.ajax({

	url: "ajax/cart.php",

	data: {
	
	variant: $(this).find('select').val()},
	
	amount: $(this).find('input[name="amount"]').val(),

	dataType: 'json',

	success: function(data){

		$('#cart_informer').html(data);

		if(button.attr('added_text'))

			button.val(button.attr('added_text'));

	}

});

$(this).find('input[type="submit"]').effect("transfer", { to: $("#cart_informer") }, 500);	

return false;

});



Затем в products.tpl добавил такой код

	<form class="variants" action="/cart">
               <input type="text"  name="amount" value="10">
                <input type="submit" class="order_button" value="" data-result-text=""/>
	</form>



И к сожалению не реагирует, при клике вместо 10 товаров, заносит 1.
Еще я не понимаю связки /js/ajax-cart.js - данного файла и CMS. Так как когда начал проверять скрипты связанные с корзиной увидел что шаблон вообще обрабатывает другой скрипт

design/{$settings->theme}/js/ajax_cart.js


Может все так и нужно, просто хотелось бы узнать почему, именно тот скрипт, где к нему обращение идет. И почему изменив все данные что вы указали выше, все так и не работает. Может где то не понял Вас?

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

В версии 2.1 ajax_cart.js помещен в шаблон, а тот что находится в js корня сайта остался от предыдущих версий

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

ajax_cart.js из шаблона
Где была строка с датой, дописал:

data: {variant: $(this).find('input[name=variant]:checked').val(), amount: $(this).find('input[name="amount"]').val()},



... но толку до сих пор нет, может пхп должен где то принять это значение?

П.с. полный код скрипта из шаблона:

// Аяксовая корзина$('form.variants').live('submit', function(e) {	e.preventDefault();	button = $(this).find('input[type=submit]');	$.ajax({		url: "ajax/cart.php",		data: {variant: $(this).find('input[name=variant]:checked').val(), amount: $(this).find('input[name=amount]').val()},		dataType: 'json',		success: function(data){			$('#cart_informer').html(data);			if(button.attr('data-result-text'))				button.val(button.attr('data-result-text'));		}	});	var o1 = $(this).offset();	var o2 = $('#cart_informer').offset();	var dx = o1.left - o2.left;	var dy = o1.top - o2.top;	var distance = Math.sqrt(dx * dx + dy * dy);	$(this).closest('.product').find('.image img').effect("transfer", { to: $("#cart_informer"), className: "transfer_class" }, distance);		$('.transfer_class').html($(this).closest('.product').find('.image').html());	$('.transfer_class').find('img').css('height', '100%');	return false;});
Ссылка на сообщение
Поделиться на другие сайты

И там заменил и там менял, даже полностью код из первого во второй переносил.
файл в корне называется ajax-cart.js а в шаблоне ajax_cart.js

Посмотрите я выше привел пример кода яваскрипта из шаблона, где и указал amount

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

Странно однако, только что заменил строку в ajax_cart.js
с
data: {variant: $(this).find('input[name=variant]:checked').val()},
на
data: {variant: $(this).find('input[name=variant]:checked').val(),amount: $(this).find('input[name=amount]').val()},
в products.tpl добавил < input type="text" name="amount" value="10">
и все работает

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

Да вы правы, все работает, проверил на дефолтном (defoult) шаблоне.
Большое спасибо, пойду разбираться, почему не работает на моем шаблоне.

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

На будущее, остальным: Моя проблема заключалась в том, что у меня в середине формы было закрытие дива, который был объявлен не в форме. Из-за него был сбой.

Всем Спасибо! Удачных проектов и интересных разработок!

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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...