Jump to content

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


Recommended Posts

По мотивам этого топика 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 - верное, но почему оно не срабатывает в нормальном режиме??? такое ощущение, что срабатывает постаякс какой-то =)

Link to post
Share on other sites
  • Replies 76
  • Created
  • Last Reply

Top Posters In This Topic

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

надо поправить в файле /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;
});

Link to post
Share on other sites
  • 1 month later...

<!-- Выбор варианта товара -->
<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

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 4 weeks later...

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

Link to post
Share on other sites

Добрый день, как и все я заменил код в /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


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

За ранее спасибо!
Link to post
Share on other sites

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;});
Link to post
Share on other sites

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

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

Link to post
Share on other sites

Странно однако, только что заменил строку в 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">
и все работает

Link to post
Share on other sites

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

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

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
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.

Loading...
×
×
  • Create New...