Ни для кого не секрет, что большинство онлайн магазинов используют cookie
для хранения корзины товаров, однако для разработчиков часто бывает открытием, что куксы можно писать методом javascript
. Я негодую, когда для добавления товара в корзину мне нужно покинуть страницу; недоумеваю когда при клике грузится аякс который только и делает что ставит куксу; и совсем бешусь, после действий в корзине, когда для того чтобы пересчитать сумму мне нужно перезагрузить страницу кнопкой "пересчёт". Поэтому, с моей лёгкой руки, вот уже более 3х лет, все магазины сделанные в нашей компании %companyname% на движке %cmsname%, для разнообразных целей используют яваскриптовую запись данных в cookie
.
JS-код, для записи кукс, найти в интернете просто, немного сложнее написать код для чтения массива. Чтобы было понятно что это, я приведу пример.
Для того чтобы проще было обрабатывать установленные куксы в php, они ставятся примерно в таком виде: "shop_incart[2345]=123;"
, где shop_incart[2345]
- имя куксы, которое php сам преобразует в массив $shop_incart. Иногда для работы с этими данными в яваскриптах, нам необходимо распарсить их в массив. Для этого я написала следующую функцию:
function read_cookie_array(name) { var cookies = { }; if (document.cookie && document.cookie != '') { var split = document.cookie.split(';'); for (var i = 0; i < split.length; i++) { var name_value = split[i].split("="); name_value[0] = name_value[0].replace(/^ /, ''); name_value[0]=decodeURIComponent(name_value[0]); name_value[1]=decodeURIComponent(name_value[1]); if(name_value[0].substring(0,name.length+1)==name+'['){ name_value[0]=name_value[0].substring(name.length+1,name_value[0].indexOf(']')); cookies[name_value[0]] = name_value[1]; } } } return cookies; }
Теперь, чтобы получить массив нужных значений из cookie, достаточно вызвать функцию, примерно так:
var cart_items=read_cookie_array('shop_incart');
Ну, и напоследок выложу ещё несколько функций для работы с куксами в яваскриптах. Обратите внимание на вызов escape(value) при помещении значения в куксу, это важно!
function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+escape(value)+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length)); } return null; } function eraseCookie(name) { createCookie(name,"",-1); } function get_all_cookies() { var cookies = { }; if (document.cookie && document.cookie != '') { var split = document.cookie.split(';'); for (var i = 0; i < split.length; i++) { var name_value = split[i].split("="); name_value[0] = name_value[0].replace(/^ /, ''); cookies[decodeURIComponent(name_value[0])] = decodeURIComponent(name_value[1]); } } return cookies; }
Ссылки по теме:
Полезная статья про escape: Comparing escape(), encodeURI(), and encodeURIComponent().
Часть функций изначально были написаны Питером Кохом - http://www.quirksmode.org/js/cookies.html.
Всегда рада комментариям.
Комментарии:
dubrowsky (Николай Дубровский)
13.11.2010 06:07:46
dubrowsky (Николай Дубровский)
13.11.2010 06:08:48
Елена Лунная
14.11.2010 04:35:53