Корзина jQuery

При создании интернет-магазина одной из основных частей является корзина. Корзину лучше всего писать с использованием javascript, это позволяет пользователю контролировать и очищать ее без перегрузки страницы. Сейчас мы рассмотрим как сделать корзину с использованием jQuery. В этом нам помогут плагины к нему jQuery cookie и jGrowl.

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

Добавлять в корзину будем по ссылке, формат ссылки следующий:

<a id="good-2356-600" href="#" class="addCart">В корзину</a>

Вся суть заключается в class присвоенному ссылке и id. Мы будем отслеживать все клики по классу addCart, id состоит из следующих параметров: первый - good (значит что добавляем товар), второй - id товара в вашей базе, третий - цена товара за 1 шт, и четвертый - необязательный (в примере не указан) означает кол-во добавляемого товара. Количество можно например легко менять, если поставить рядом счетчик или выпадающий список. Но там уже потребуется дополнительный скрипт для изменения id, или же можно переписать основную функцию и количество отследить там. Но в примере все упрощено.

Отслеживать клик по ссылке мы будем так:

$('a.addCart').click(function() {
   data = $(this).attr('id').split('-');
   addCart(data[1], data[2], 1);
   return false;
  });

Как видно из примера мы отслеживаем id у ссылки и разбиваем его по символу "-" получая параметры.

Вот синтаксис функции добавления:

function addCart(p1, p2, p3){
    if (!p3 || p3==0) {p3=1;}
    msg.id = p1; 		  // АйДи
    msg.price = parseInt(p2); // Цена
    msg.count = parseInt(p3); // Количество
    var check = false;
    var cnt = false;
    var totalCountGoods = 0;
    var totalprice = 0;
    var goodsId = 0;
    var basket = '';
    $('#clearBasket').show();
    $('#checkOut').show();
    $('.hPb').show();
    $('.hPe').hide();
    basket = decodeURI($.cookie("basket"));
    if (basket=='null') {basket = '';}
    basketArray = basket.split(",");
    for(var i=0; i<basketArray.length-1;i++) {
        goodsId = basketArray[i].split(":");
	if(goodsId[0]==msg.id)	// ищем, не покупали ли мы этот товар ранее
	{
            check = true;
	    cnt   = goodsId[1];
	    break;
	}
    }

    if(!check) {
        basket+= msg.id + ':' + msg.count + ':' + msg.price + ',';
    } else {
        $.jGrowl("Уже есть в корзине!");
    }

    if(!check) {
        $.jGrowl("Добавлено!");
        basketArray = basket.split(",");// Находим все товары
        for(var i=0; i<basketArray.length-1;i++) {
	    goodsId = basketArray[i].split(":"); // Находим id товара, цену и количество
	    totalCountGoods+=parseInt(goodsId[1]);
	    totalprice+=parseInt(goodsId[1])*parseInt(goodsId[2]);
	}

	$('#totalGoods').text(totalCountGoods);
	$('#totalPrice').text(totalprice);
	$.cookie("totalPrice", totalprice, {path: "/"});
	$.cookie("basket", basket, {path: "/"});
    }
}

Теперь посмотрим HTML код корзины:

<div id="basket">
<table>
<tbody>
<tr class="hPb">
<td>Выбрано:</td>
<td><span id="totalGoods">0</span> товаров</td>
</tr>
<tr class="hPb">
<td>Сумма:</td>
<td><span id="totalPrice">0</span> руб.</td>
</tr>
<tr class="hPe">
<td colspan="2">Корзина пуста</td>
</tr>
<tr>
<td><a id="clearBasket" href="#">Очистить</a></td>
<td><a id="checkOut" href="/basket/">Оформить</a></td>
</tr>
</tbody>
</table>
</div>

// Прячем по умолчанию ссылки "Очистить" и "Оформить"
<style>
#clearBasket, #checkOut {
 display: none;
}
.hPb {
    display: none;
}
</style>

Теперь код, который вызывается при нажатии на ссылку "Очистить корзину"

		$('#clearBasket').click(function() {
			$.cookie("totalPrice", '', {path: "/"});
			$.cookie("basket", '', {path: "/"});
			$('#totalPrice').text('0');
			$('#totalGoods').text('0');
			$('.hPb').hide();
			$('.hPe').show();
			$(this).hide();
			$('#checkOut').hide();
			$.jGrowl("Корзина очищена!");		

			return false;
		});

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

Необходим еще один кусок кода. Ведь когда мы обновляем страницу или переходим на другую браузер не запоминает добавляли мы товары или нет в корзину, т.к. оно содержится в куки. Следующий код можно реализовать на PHP, но мы рассмотрим его на javascript.

Этот код лучше всего помещать в самом сверху всех наших функций:

$(document).ready(function(){
		msg = new Array();
		var basket = '';
		var totalprice = 0;
		var totalCountGoods = 0;
		if (!$.cookie("basket")) {$.cookie("basket", '', {path: "/"});}
		basket = decodeURI($.cookie("basket"));
		basketArray = basket.split(",");// Находим все товары
		for(var i=0; i<basketArray.length-1;i++) {
			goodsId = basketArray[i].split(":"); // Находим id товара, цену и количество
			totalCountGoods+=parseInt(goodsId[1]);
			totalprice+=parseInt(goodsId[1])*parseInt(goodsId[2]);
		}
		if (totalprice > 0) {
			$('#clearBasket').show();
			$('#checkOut').show();
			$('.hPb').show();
			$('.hPe').hide();
		}
		if (!totalprice) {totalprice = 0;}

		$('#totalPrice').text(totalprice);
		$('#totalGoods').text(totalCountGoods);
});

Вот собственно и все. Этого вполне достаточно для реализации корзины на jQuery. Оформление заказа так же легко пишется. Получаете строку из куки, разбиваете ее и по id уже узнаете и название товара и цену. Почему цену? Ведь цена у нас и так имеется в куки. Это для безопасности, для того чтобы хитрые люди не вписывали в куки цену меньшую, чем она есть за товар.

Посмотреть пример в действии.

Понравился пост? Подпишитесь на RSS ленту или Twitter.
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (12 votes, average: 4,67 из 5)
Loading ... Loading ...

Похожие записи

94 Комментариев на «Корзина jQuery»

  • Sulik
    16 Январь, 2011, 5:34

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

    Well-loved. Like or Dislike: Thumb up 4 Thumb down 0

    Ответить

  • Sulik
    16 Январь, 2011, 5:39

    только вот здесь опечатку исправьте
    строка 9 for(var i=0; i 0) {

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    16 Январь, 2011, 5:50

    Спасибо на добром слове!
    Да, там опечатка (парсер съел) — исправил.

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    16 Январь, 2011, 6:22

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

    Thumb up 0 Thumb down 0

    Ответить

  • Тоня
    23 Январь, 2011, 22:01

    как же добавить динамически количество добавляемого товара, прошу прощения за каламбур)..
    если допустим рядом будет стоять импут вида

    где 345 — id товара

    Thumb up 0 Thumb down 0

    Ответить

  • Тоня
    23 Январь, 2011, 22:03

    импут «вида» не прошел)..
    ну общими словами — обычный input с value=»нужное количество» и name = «айди нашего товара»

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    23 Январь, 2011, 23:41

    Value с input можно взять функцией val()
    Подробнее тут
    http://api.jquery.com/val/

    А в name — id нашего товара я бы не стал запихивать. Лучше просто, также id инпуту.

    Таким образом в функции, где мы отслеживаем клик по сути Вам нужно будет добавить взятие значение с input. Но чтобы его взять, инпуту нужно будет присвоить {id товара}-count, чтобы значение было например 324234-count.

    Когда будете брать значение обращаться к id инпута будете так

    $({id товара}-count).val()

    Вроде понятно объяснил)

    Thumb up 0 Thumb down 0

    Ответить

  • Александр
    11 Март, 2011, 18:48

    Здравствуйте, пожалуйста покажите самый простейший пример оформления того что в корзине или вывода того что в корзине. У меня очень мало опыта работы с jq.

    Thumb up 1 Thumb down 0

    Ответить

  • makecode
    11 Март, 2011, 19:49

    Пример работы того что в корзине есть по ссылке с примером. Просто подобавляйте товары и увидите как оно отображается. Оформить можно с помощью CSS.

    Работать непосредственно с корзиной лучше на PHP, функцией $_COOKIE, т.к. именно в куки хранятся все товары (id и количество).

    Берете строку из $_COOKIE, разбиваете на массив, листаете, по ID выцепляете название товаров. Сложного ничего нет.

    Thumb up 0 Thumb down 0

    Ответить

  • Александр
    11 Март, 2011, 19:53

    так куки в этом примере написаны на жаве, пхп тут ни при чем. на пхп лишь только заросы к базе писать учитывая параметры полученные из жавы…

    Thumb up 0 Thumb down 1

    Ответить

  • makecode
    11 Март, 2011, 20:14

    На яваскрипте, а не на яве. Это разные вещи, не путайте.

    Вышеописанный скрипт пишет состояние корзины в куки и позволяет без перезагрузки страницы добавлять товары в корзину.

    Оформлять заказ, считывать данные о товарах — все равно придется на серверном языке (PHP например)

    Thumb up 1 Thumb down 0

    Ответить

  • shtin
    12 Март, 2011, 11:26

    подскажите как загружать из cookie (на других страницах каталога) данные о добавленных товарах в корзину ?

    Thumb up 0 Thumb down 0

    Ответить

  • shtin
    12 Март, 2011, 12:18

    неактуально ^^

    Thumb up 0 Thumb down 0

    Ответить

  • Костя
    31 Март, 2011, 21:45

    А почему jGrowl в примере не работает?

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    1 Апрель, 2011, 8:10

    Костя, в начале поста написано что потребуются два плагина jCookie и jGrowl.
    Чтобы пример был проще в плане исходного кода — сообщения jGrowl я заменил обычными alert().

    jGrowl можно найти на его офсайте.
    http://stanlemon.net/projects/jgrowl.html

    Thumb up 0 Thumb down 0

    Ответить

  • Андрей
    5 Апрель, 2011, 21:54

    Добрый день! Спасибо за интересный материал. Но на практике у меня возникла проблема с выделением переменной из куки.
    Имеется кука (выведено с помощью print_r):
    Array ( [totalPrice] => 1600 [basket] => 23586:1:300,2356:1:600,2357:1:700, [PHPSESSID] => 45848ad63db800392d043279bfe0bd87 )
    Теперь я хочу выделить переменные basket вот так:
    for ($i = 0; $i <= count($_COOKIE['basket']); $i++)
    {
    echo $_COOKIE['basket'][$i]." «;
    }
    Выводит: 2
    3
    А хотелось бы: 23586:1:300
    2356:1:600
    2357:1:700
    Что тут не так? Сегодня всю голову сломал, помогите, пожалуйста!

    Thumb up 0 Thumb down 0

    Ответить

  • Андрей
    5 Апрель, 2011, 21:58

    И ещё можно добавить работу с сессиями (это для тех пользователей у кого куки отключены)?

    Thumb up 0 Thumb down 0

    Ответить

  • Eugene
    6 Апрель, 2011, 2:50

    Отличная статья, спасибо большое. Вот только не получается у меня из куки выцепить с помощью пхп только айдишники товаров. Строку разбиваю, но немогу получить вывод айди — выводит все подряд -__-. Догадываюсь, что цикл, но пока — что-то безрезультатно..

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    6 Апрель, 2011, 10:58

    Андрей, javascript напрямую работать с сессиями не умеет, т.к. он работает на стороне клиента. Можно слать запросы в файл PHP, а тот уже пусть пишет сессии. Собственно статья о корзине, и данный код усложнит общий.

    Eugene, раз у Вас значения перечисляются через запятую, то можно разбить строку в массив функцией explode
    $basketArray = explode(«,», $_COOKIE["basket"]);

    Потом пролистать массив

    for ( $i=0; $i echo $basketArray[$i];
    }

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    6 Апрель, 2011, 10:59

    Код побился, вот http://pastebin.com/K8gcDA79

    Thumb up 1 Thumb down 0

    Ответить

  • Eugene
    6 Апрель, 2011, 12:29

    Благодарю, так и делал, но вопрос состоял немного в другом, извиняюсь — неправильно сформулировал: возможно ли сделать вывод скажем не всех значений куки, а только айди, при том, что в куки содержатся айди:кол-во:цена

    Thumb up 0 Thumb down 1

    Ответить

  • makecode
    6 Апрель, 2011, 12:36

    Да, точно также разбиваете вашу строку по знаку двоеточие.
    Результат в элементах массива и будет данными
    http://pastebin.com/SYSzyJmm

    Thumb up 0 Thumb down 0

    Ответить

  • Eugene
    6 Апрель, 2011, 12:43

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

    Thumb up 0 Thumb down 0

    Ответить

  • makecode
    6 Апрель, 2011, 12:52

    А в чем проблема? Прогоняйте как в первом исходнике через for весь массив. Внутри цикла делите по двоеточию, получайте данные, а потом делайте с ними все что хотите. Стройте таблицу заказа например.

    Алгоритм такой

    ==================
    Берем куку
    Разделяем ее по запятой, получаем массив
    Прогоняем массив в цикле.
    Внутри цикла делим строку по двоеточию.
    Получаем данные, айди, количество и цену.

    Thumb up 1 Thumb down 0

    Ответить

  • Eugene
    6 Апрель, 2011, 14:30

    Спасибо, вроде получилось, но выглядит как порнография :)
    http://pastebin.com/11S8dF46

    Thumb up 0 Thumb down 0

    Ответить

  • Андрей
    6 Апрель, 2011, 15:57

    Спасибо большое! Теперь нужную переменную выделил))) Ну а с сессиями поразмыслю на досуге!

    Thumb up 0 Thumb down 0

    Ответить

  • redmol
    6 Май, 2011, 16:43

    Здравствуйте!
    Спасибо за труд, очень простое и эффективное решение!
    Подскажите, пожалуйста, как сделать, чтобы при повторном нажатии на товар количество в куках увеличивалось, вместо появления сообщения? Какую команду нужно написать? Спасибо.

    Thumb up 1 Thumb down 1

    Ответить

    makecode Ответил:

    Изменения небольшие. Вам нужно как в примере пролистать массив
    for(var i=0; i Потом по id найти товар и количество, потом добавить 1 к количеству. Собрать строку для куки и записать в куки.

    Второй вариант. Зная id и цену товара, а также текущее количество можно собрать строку, например 2565:1:600

    В центре это количество, следовательно собрав строку уже с увеличенным параметром, можно заменить кусок строки в куки на новую
    cookie.replace(«2565:1:600″, «2565:2:600″)
    И записать.

    Thumb up 1 Thumb down 0

    Ответить

    redmol Ответил:

    Спасибо, за ответ! Буду разбираться.
    Подскажите еще, пожалуйста: как можно сделать, чтобы выполнялось добавления в корзину и переход на другую страницу? Нижеследующим способ не прокатил:
    Перейти в корзину

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Там, где отслеживаете клик, после функции addCart()

    Поставить

    location.href=’basket.php’;

    Thumb up 0 Thumb down 0

    Ответить

    redmol Ответил:

    ставил вот здесь, в разных местах, не работает:
    $(‘a.addCart’).click(function() {
    data = $(this).attr(‘id’).split(‘-’);
    addCart(data[1], data[2], 1);
    location.href=’basket.php’;
    return false;
    });

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Рекомендую firebug для отслеживания ошибок.

    Смотрите http://www.spravkaweb.ru/javascript/reference/location

    Проверьте синтаксис, может кавычки не там или не те поставили.

    Thumb up 0 Thumb down 0

    Ответить

    redmol Ответил:

    Спасибо! Вот так заработало:
    document.location.href = «basket.php»;

    Thumb up 0 Thumb down 0

    Ответить

    hertz Ответил:

    Изменения небольшие. Вам нужно как в примере пролистать массив
    for(var i=0; i Потом по id найти товар и количество, потом добавить 1 к количеству. Собрать строку для куки и записать в куки.

    Вопрос у меня банальный. Как найти по ID, и как собрать строку для куки?

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Смотрите внимательнее пример. Там так и написано находим ID товара.

    Thumb up 0 Thumb down 0

    Ответить

  • Константин
    3 Август, 2011, 8:46

    Как сделать, чтобы totalPrice сумма не округлялась?

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    В функции addCart
    Заменить parseInt на parseFloat

    Thumb up 1 Thumb down 0

    Ответить

    Константин Ответил:

    Пробовал не получалось, сейчас увидел, что не на тот goodsid поставил :)

    Thumb up 0 Thumb down 0

    Ответить

    Константин Ответил:

    А попородробней можно желательно с кодом…

    Thumb up 0 Thumb down 0

    Ответить

  • Константин
    3 Август, 2011, 18:17

    Извиняюсь, а есть ли у вас готовый скрипт удаления из корзины по элементам?

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Готового нет, но я сначала разбираю куки, потом в цикле собираю заново без удаляемого элемента, потом записываю. Это не сложно.

    Thumb up 0 Thumb down 0

    Ответить

  • Константин
    3 Август, 2011, 19:26

    Программно сделал разбор куки и сбор в обратной последовательности, с изменением количества куки. При этом goodsId(p1) я не трогал, значение у всех записей по умолчанию 1, определил на количество другую переменную.

    Возникла такая ситуация: куки обновляются, количество записей остается неизменно, но в выводится на 1 меньше.

    Подскажите как поправить код.

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Добавьте где-нибудь там перед выводом числа инкремент числа, типа
    i++;

    Thumb up 0 Thumb down 0

    Ответить

  • 7 Август, 2011, 18:30

    Уважаемый автор!! первое хочу выразить благодарность за пример, такая щедрость на урок не везде есть! А второе хотел бы узнать как именно сделать оформление заказа!? хотя бы краткий но рабочий пример! Если бы вы статью написали к этому уроку то считаю что тема станет раскрытой!

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    К сожалению универсального нет, есть на рабочем проекте но там свои тонкости.

    Оформление заказа сделать не сложно. Разбираете cookie вашей корзины, составляете заказ и отсылаете его на электронную почту или фиксируете в базе/отслеживаете, опять же от специфики вашего проекта.

    Thumb up 0 Thumb down 0

    Ответить

    Ваня Ответил:

    makecode к сожалению с jQuery я не силён!!! И методом тыка и поиском подобных тем я так и не смог реализовать вывод данных! Суть такова что мне нужно вывести только те товары которые выбрал пользователь, я хочу это сделать через куки! Нужно вытащить, id из ссылки тоесть нажал пользователь по ссылки скрипт посчитал и всё сохранил и мне нужно проверить id если такой есть то выводи нет значит нет. good-2356-600. Как же можно это сделать с скриптом из вашего примера, что бы он к примеру создавал массив и выводил id товара!?
    1
    2
    3
    4
    5
    и т.д.

    Thumb up 0 Thumb down 0

    Ответить

  • Константин
    22 Август, 2011, 12:24

    Почему если вставлять в куки русско-язычные параметры, то они будут в кодировке utf-8. Как можно сделать так, чтобы была кодировка win-1251?

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Когда читаете куки попробуйте через decodeURI

    Thumb up 0 Thumb down 0

    Ответить

    Константин Ответил:

    Этот вариант не работает

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Сделайте перед записью encodeURI, после чтения decodeURI. Выставите кодировку самого исходного файла, проверьте кодировку в meta.

    Thumb up 0 Thumb down 0

    Ответить

    Константин Ответил:

    Если сделать перед записью encodeURI, то скрипт начинает некорректно работать

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Что значит некорректно?
    Правильно используете?
    http://www.w3schools.com/jsref/jsref_encodeuri.asp

    Ее аналог в PHP
    http://htmlweb.ru/php/function/urldecode.php#/php/function/urlencode.php

    Thumb up 0 Thumb down 0

    Ответить

  • redmol
    23 Август, 2011, 7:45

    Банальный вопрос: как установить время жизни куки «basket»? после окончания сессии удаляются.
    Заранее спасибо!

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    http://makecode.ru/2011/01/jquery-cookie/
    Переменная expires

    Thumb up 1 Thumb down 0

    Ответить

  • Антон
    11 Сентябрь, 2011, 1:13

    Большое спасибо за предоставленный материал.
    Давно искал нечто похожее)))
    Возник вопрос, как реализовать добавление параметров в корзину (таких, как цвет, размер), которые выбирает покупатель из списка. Разобрался как отображать выбранный параметр товара с помощью jquery, но не знаю как этот выбранный параметр засунуть в ид ссылки корзины. Буду очень благодарен за ответ.

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Обратите внимание как это делается в примере. Все параметры собираются через : (двоеточие), просто добавляйте свои параметры так же через двоеточие и все.

    Thumb up 0 Thumb down 0

    Ответить

  • Антон
    11 Сентябрь, 2011, 19:34

    Извиняюсь, побилось всё из-за моих тегов(
    Вот тут написал код jquery для изменения размеров и то, что не получается вбить в корзинку:
    http://pastebin.com/iDTLZUSa

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    < a id"good-3663-< span id="GoodSizes" >< /span >»
    Это жестяная жесть.
    Так нельзя.

    Вы же отслеживаете смену размера так?
    Так.
    Раз вся информация содержится в id ссылки, значит нужно менять как раз его.
    Значит — нужно при смене размера как раз и производить эту операцию.

    У Вас известен id товара у которого Вы производите смену размера. Во и ищите id этой ссылки, разбивайте командой split по дефису и собирайте заново из кусков получившегося массива и нового размера.
    Вот и все.

    Thumb up 0 Thumb down 0

    Ответить

  • Антон
    12 Сентябрь, 2011, 16:17

    Огромное спасибо=) буду решать эту задачку.

    Thumb up 0 Thumb down 0

    Ответить

  • 26 Сентябрь, 2011, 14:53

    Здравствуйте!!! Я оптимизировал данный скрипт под себя и создал компонент на его основе под joomla. Но на месте стоять нельзя и как только я сделал минимальный рабочий уровень, начал думать как расширить компонент и возникла у меня мысль, что в этом скрипте есть недостаток, а именно нельзя удалить конкретный товар из корзины можно только очистить всё, вопрос каким образом можно удалить конкретный, товар!??? Может подскажите! Просидев 2 дня с cookie я честно добился на небольшом примере как удалить определённое значение, но конструкция конкретно отличается от скрипта корзины. ПАМАГИТЯ мне это реализовать!

    Thumb up 1 Thumb down 0

    Ответить

  • 26 Сентябрь, 2011, 15:49

    Дополнение заметил что одни человек таким уже интересовался но не описал как он это сделал.

    В родном коде есть функция добавления function addCart
    Скажите а можно ли сделать на её основе функцию удаления. Просто уже реально лазию в отчаянии по инету в поисках ответа.

    Thumb up 1 Thumb down 0

    Ответить

  • 28 Сентябрь, 2011, 10:38

    День 5 веду дневник! =)
    Вообщем я щас в таком этапе удаления товара. Вот хренова с javascript у меня но что делать пытаюсь как то сделать.

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

    id.’-’.$raz_na->cena.’» class=»addCookie»>

    вывел картинку в виде крестика.

    А это скрипт удаления, честно скажу не совсем я его написал, спасибо моему другу Максу, что бы я без него делал. Хорошо когда ты знаешь что писать и как делать а когда незнаешь то задача становится какойто непосильной.

    $(‘div.addCookie’).click(function() {
    data = $(this).attr(‘id’).split(‘-’);
    addCookie(data[1], data[2], 1);
    return false;
    });

    function addCookie(p1, p2, p3){
    if (!p3 || p3==0) {p3=1;}
    msg.id = p1; // АйДи
    msg.price = parseInt(p2); // Цена
    msg.count = parseInt(p3); // Количество
    var check = false;
    var cnt = false;
    var iii=»;
    var tt=’:';
    var totalCountGoods = 0;
    var totalprice = 0;
    var goodsId = 0;
    var basket = »;
    $(‘#clearBasket’).show();
    $(‘#checkOut’).show();
    $(‘.hPb’).show();
    $(‘.hPe’).hide();
    basket = decodeURI($.cookie(«basket»));
    if (basket==’null’) {basket = »;}
    basketArray = basket.split(«,»);
    if(!check) {
    alert(«Товар удалён»);
    var tempArr = »;
    basketArray = basket.split(«,»);// Находим все товары
    for(var i=0; i<basketArray.length-1;i++) {
    goodsId = basketArray[i].split(":"); // Находим id товара, цену и количество
    if(goodsId[0] == p1){
    for(var j=0; j<basketArray.length-1;j++) {
    if(j != i)
    tempArr = tempArr + basketArray[j] + ',';
    }
    basket = tempArr;
    break;
    }
    }
    $('#totalGoods').text(totalCountGoods);
    $("#one").val(iii);
    $('#totalPrice').text(totalprice);
    $("#cena").val(totalprice);
    $.cookie("totalPrice", totalprice, {path: "/"});
    $.cookie("basket", basket, {path: "/"});
    }
    }

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

    Thumb up 2 Thumb down 0

    Ответить

  • dimple
    28 Сентябрь, 2011, 20:05

    Здравствуйте! Спасибо большое за эту статью! Помогите, пожалуйста, с вопросом, если не трудно. Мне нужно сделать так, чтобы можно было менять кол-во товара в теге input. Я правильно поняла последовательность: нужно присвоить для id input’а: id=»{id товара}-count», в value input’a помещается кол-во товара. а потом как передастся все это из input’a в функцию? мы ведь отслеживаем по клику по ссылке? извините за глупые вопросы, не сильна в javascript(

    Thumb up 1 Thumb down 0

    Ответить

    makecode Ответил:

    Думаете в правильном направлении, потом количество забирайте и все. Достаточно знать только id.
    Например так:
    var countGood = $(‘#count_’+idgood).val();

    Thumb up 1 Thumb down 0

    Ответить

  • dimple
    29 Сентябрь, 2011, 6:43

    Спасибо большущее! будем разбираться=)

    Thumb up 0 Thumb down 0

    Ответить

    Hertz Ответил:

    Я вот так сделал.
    function addCart(p1, p2, p3){
    if (!p3 || p3==0) {p3=$(‘#count’ + idgood).val();}

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

    Див с товарами сохраняется так
    var basketbox = $(«#basketbox»).html();
    $.cookie(«basketbox», basketbox, {path: «/»});
    Загружаю так
    basketbox = decodeURI($.cookie(«basketbox»));
    $(‘#basketbox’).html(basketbox);
    Но значения остаются по умолчанию =(

    Thumb up 1 Thumb down 0

    Ответить

  • Nik
    24 Октябрь, 2011, 0:51

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

    если не сложно то как можно подробнее так как в яваскрипте не очень

    Thumb up 1 Thumb down 0

    Ответить

  • Nik
    24 Октябрь, 2011, 22:29

    подскажите а если у меня вместо скажем цены будет текстовое значение (например цвет товара — синий, скрасный) что и где мне надо поменять.
    и надо писать msg.count = р4 или msg.count = parseString(p4)

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Писать долго, времени нет. Но задача не сложная, я опишу Вам логику:

    На странице товара создаете select с выбором цвета. Устанавливаете value с цифрой, например:
    1 — красный
    2 — зеленый
    3 — синий

    Самому select назначаете id в виде color-(id товара), при добавлении в корзину, с помощью val() считываете текущее значение и пишете в куки.

    Потом так же считываете.

    Thumb up 1 Thumb down 0

    Ответить

  • Nik79
    17 Ноябрь, 2011, 0:45

    очень многое получилось уже. огромное спасибо.
    но дошел до одной задачи и трабла
    На почту у меня отправляется целиком массив данных о товаре в том числе ссылка ведущая на страницу товара.
    но при получении письма эти ссылки блокируются браузером и стают не кликабельными.
    как это можно исправить пожалуйста подскажите

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Вообще это вопрос не по теме. Но подозреваю, что Вы просто криво формируете ссылку. Перепроверьте код 100 раз. Перед отправкой попробуйте его сначала echo у себя на сервере. Думаю, увидите сразу в чем проблема.

    Thumb up 0 Thumb down 0

    Ответить

  • Nik79
    17 Ноябрь, 2011, 21:14

    вы оказались правы. криво сформировалась ссылка.
    и вношу свою лепту .мож кому пригодится. для смены количества товара . изменение значения импута

    <label for="quantity» class=»quantity_box»>Количество:  <input type="text" class="inputboxquantity" size="4" id="quantity» name=»quantity[]» value=»1″>
    <input type="button" class="quantity_box_button quantity_box_button_up" onclick="var qty_el = document.getElementById('quantity’); var qty = qty_el.value; if( !isNaN( qty )) qty_el.value++;return false;»>
    <input type="button" class="quantity_box_button quantity_box_button_down" onclick="var qty_el = document.getElementById('quantity’); var qty = qty_el.value; if( !isNaN( qty ) && qty > 1 ) qty_el.value—;return false;»>
    где — это айди товара в вашей базе

    Thumb up 1 Thumb down 0

    Ответить

    Nik79 Ответил:

    при публикации сообщения код покоцало. в таком виде код не верный

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Воспользуйтесь http://pastebin.com/

    Thumb up 0 Thumb down 0

    Ответить

  • Anton
    9 Январь, 2012, 1:02

    Спасибо всем шикарная статья у меня все, что необходимо было сделать для проекта, получилось ))
    встроил в систему с шаблонизатором и обработчик на пхп написал для корзины, отображается и удаление )) правда долго мучался поначалу не понимал как куки вообще работают, раньше имел дело с сессиями средствами пхп, но куки лучше без обновлений практически javascript просто самолет )) еще инпут увелечение колличества в корзине продумываю…
    Вот например если удалять тот товар которого увеличиваешь колличество и потом записываешь с новым колличеством в куки и! для этого все описано выше :)

    Thumb up 0 Thumb down 0

    Ответить

    Alex Ответил:

    Да, статья действительно хорошая! Можете скинуть пример обработчика на пхп. Сам счас делаю, и чего-то видимо не понимаю, пока не получается у самого.

    Thumb up 0 Thumb down 0

    Ответить

  • Алексей
    11 Январь, 2012, 16:27

    Подскажите как к корзине прикрутить таблицу с товаром из базы MySQL к корзине. Как я понимаю по ID товара в базе, но как именно? Хочу сделать отображение в корзине не только количества выбранного товара, но и название, фото при оформлении покупки!

    Thumb up 0 Thumb down 0

    Ответить

  • Anton
    12 Январь, 2012, 11:41

    Опубликую свой обработик
    <?
    // решение через куки
    $basketArray = explode(",", $_COOKIE["basket"]);

    for ( $i=0; $iassign(«data»,$data);

    $template ->assign(«TOTAL_PRICE»,$total);

    ?>

    Thumb up 0 Thumb down 0

    Ответить

  • Anton
    12 Январь, 2012, 11:42

    странно он не правельно отображается тут

    Thumb up 0 Thumb down 0

    Ответить

  • Anton
    12 Январь, 2012, 11:44

    вот посмотрите сами
    websiteprofi.ru/cgi-bin/cart.txt

    Thumb up 0 Thumb down 0

    Ответить

  • None
    2 Февраль, 2012, 2:01

    Здравствуйте.
    А поделитесь пожалуйста простейшим решением, как отправлять сформированную корзину на email.
    Очень нужно…
    Спасибо большое!

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Простейшее — распарсить куки на php и отправить письмо.

    Thumb up 0 Thumb down 0

    Ответить

    None Ответил:

    Дело в том, что я нуб в php.
    А начальство попросило реализовать такое для корпоративного сайта.
    Из всего, что нашел — это решение самое простое, но нету отправки на емейл.
    Не подскажите?

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Пару строчек кода не обойдетесь. Все зависит от конкретной задачи.
    Рекомендую поискать сразу готовые решения, они есть
    http://yandex.ru/yandsearch?text=jquery+%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B0

    Thumb up 0 Thumb down 0

    Ответить

  • Евгений
    17 Февраль, 2012, 2:13

    Доброго времени суток.
    а можно ли в
    В корзину
    чтобы вместо 2356 и 600 бралась информация из БД.
    в смысле: у меня выбирается продукция из каталога путем

    $request2 = «select * from product where genre_id = «.$_GET["genre"];
    $result2 = mysql_query($request2);
    $number_rows2 = mysql_num_rows($result2);
    $i=0;

    while($i < $number_rows2){
    $genre_id = mysql_result($result2,$i,"genre_id");
    $product_id = mysql_result($result2,$i,"product_id");
    $product_title = mysql_result($result2,$i,"product_title");
    $i++;
    }
    и вот чтобы вместо 2356 бралось значение product_id
    как связать это все? :)

    Thumb up 0 Thumb down 0

    Ответить

  • dimple
    29 Февраль, 2012, 21:19

    Здравствуйте! Уважаемый автор, если не трудно, опишите, пожалуйста, процесс обновления корзины при изменении количества товара. Наверное, сначала нужно перезаписать как-то value в input, а потом реализовать все на основе функции addcart? как заменить value, не могу понять второй день(

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Сто лет назад делал без input, на span.
    http://jsfiddle.net/LzNVZ/
    Код неоптимизирован. Там понажимайте на +/- будет менятся значение.
    Потом при добавлении в корзину считывайте это значение со span в функцию.

    Thumb up 1 Thumb down 0

    Ответить

    dimple Ответил:

    большое спасибооо!!!!

    Thumb up 0 Thumb down 0

    Ответить

  • Ирина
    21 Март, 2012, 23:06

    Добрый день!
    Ваша корзинка мне очень понравилась и соответствует требованиям моего сайта. Но у меня проблема в том, что я не могу добавлять стоимость. Не выходит jGrowl, но не это важно, так как и без него можно добавлять цену. Я не специалист программирования и поэтому не знаю как наладить корзинку. Помогите, пожалуйста.
    Ирина

    Thumb up 0 Thumb down 0

    Ответить

  • Игорь
    4 Апрель, 2012, 19:02

    Спасибо автору!
    Подскажите плиз новичку — как передать айди товара в корзину и потом из карзины при нажатии на кнопку оформить айди (мона еще общую цену)?

    Thumb up 1 Thumb down 0

    Ответить

  • Игорь
    6 Апрель, 2012, 11:29

    Спасибо все реализовал при клике на «оформить» перехожу на страницу карзины где сделал вывод товара (id,название и цена) в цикле — скажите пожалуйста как теперь посчитать общую цену и сделать чтоб можно было увеличивать кол-во 1 товара с пересчитыванием общей цены?

    Thumb up 0 Thumb down 0

    Ответить

  • Игорь
    9 Апрель, 2012, 20:21

    Кому интересно изменил алерт на эффект «летаюшая картинка в корзину» код нужно вставить вместо Алерта (где «добавлено в корзину») доп. плагтнов ненадо:
    $(«тут селектор картинки товара»)
    .clone()
    .css({‘position’ : ‘absolute’, ‘z-index’ : ’100′})
    .appendTo(«.addCart»)
    .animate({opacity: 0.5,
    marginLeft: 250, marginTop:-200, //marginЫ управляют направлением полета
    width: 50,
    height: 50}, 400, function() {
    $(this).remove();
    });

    Thumb up 0 Thumb down 0

    Ответить

    Константин Ответил:

    Что как-то не работает!

    Thumb up 0 Thumb down 0

    Ответить

    Игорь Ответил:

    должно работать — могу весь код сбросить.
    и в .appendTo(«.addCart») вместо селектора . addCart поставить селектор блока КУДА будет лететь а маргин убрать

    Thumb up 0 Thumb down 0

    Ответить

Оставить комментарий