пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Корзина заказов

  1. Корзина заказов

Модуль корзины интернет-магазина на jQueryиз песочницы

jQuery*, JavaScript*

При разработке интернет-магазинов мне часто приходилось посредством javascript (а конкретнее его фреймворком — jQuery) проделывать некоторые повторяющиеся от проекта к проекту вещи. Например, добавление товаров в корзину, обновление информации о количестве товаров и общей сумме на странице, удаление товаров из корзины по одному, изменение их количества и полная очистка всех товаров из корзины. И все это, разумеется, без перезагрузки страницы.
И я пришел к выводу, что нужно писать код так, что бы потом его с легкостью можно было использовать в следующих проектах.

Итак пишем модуль для работы с корзиной интернет-магазина с использованием jQuery.
Оговорюсь, что я опубликую только javascript-код, серверную часть трогать не буду, обозначу так же, какими данными будет обмениваться клиент с сервером.

Определяемся с методами:
 

(function($) {
        $.Cart = {
                 init : function(settings){
                         // инициализация модуля
                 },
                 add : function(context){
                         // добавление одного наименования товара в корзину в количестве 1шт.
                 },
                 get : function(){
                         // обновление информации о количестве товаров в корзине и общей сумме 
                 },
                 count : function(context) {
                         // изменение количества товаров одного и того же наименования в корзине
                 },
                 del : function(context) {
                         // удаление одного наименования из корзины
                 },
                 clear : function() {
                         // полная очистка корзины
                 },               
                 showMessage : function(message) {
                         // показ сообщения при добавлении товара
                 }
        }
})(jQuery);



Инициализация:
Что нам нужно сделать в инициализации?
Необходимо переданные в метод init настройки, должным образом обработать (совместить с параметрами по умолчанию) и применить их, а так же повесить на элементы заданные в настройках соответствующие обработчики событий.
Определяемся с параметрами по умолчанию.
 

var defaults = {
        content : '.content', // селектор главного блока на странице корзины
        count : '.prod span font', // в блоке .prod на странице количество товаров в корзине
        summ : '.summ span font', // в блоке .prod общая сумма
        add : '.tocart', // селектор элемента, при нажатии на который товар будет добавлен в корзину
        addattr : 'name', // атрибут элемента, содержащий ID товара
        counta : '.carts .actions .count input', // поле содержащее количество товаров одного наименования в корзине
        countattr : 'name', // атрибут поля, содержащий ID товара
        countvattr : 'value', // атрибут поля, содержащий количество товаров
        del : '.carts .actions .delete input', // селектор элемента, при нажатии на который 1 наименование товара будет удалено из корзины
        delattr : 'name', // атрибут элемента, содержащий ID товара
        clear : '.cartclear', // селектор элемента, при нажатии на который корзина будет очищена
        topcart : '.topcart', // селектор ссылки ведущей в корзину
        urladd : '/cart/add/', // url добавления товара в корзину
        urlget : '/cart/get/', // url информации о количестве товаров в корзине и общей сумме
        urlcart : '/cart/', // url непосредственно самой корзины
        urlcount : '/cart/count/', // url обновления количества товаров одного наименования
        urlclear : '/cart/clear/', // url полной очистки корзины
        urldel : '/cart/del/', // url удаления одного наименования товара из корзины
        type_message : 'flash', // тип сообщения при добавлении товара в корзину
        time_message : 3000, // время показа сообщения
        interval : 10000 // интервал времени, через который будет обновляться блок с информацией о количестве товаров в корзине и общей сумме
};


Смешиваем параметры указанные при инициализации с параметрами по умолчанию и применяем их
 

$.extend(defaults, settings);
this.settings = defaults;


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

this.get(); // обновляем блок
setInterval(function(){
        $.Cart.get(); // обновляем блок через заданный в параметрах интервал
}, this.settings.interval);
$(this.settings.add).click(function(){
        $.Cart.add(this); // добавляем товар в корзину при клике на элемент settings.add, в качестве параметра передаем сам элемент
});
$(this.settings.counta).live('blur', function(){
        $.Cart.count(this); // при потере фокуса поля, содержащего количество товаров одного наименования в корзине, передаем информацию на сервер
});
$(this.settings.del).live('click', function(){
        $.Cart.del(this); // удаляем наименование товара при нажатии на элемент "удалить"
});
$(this.settings.clear).live('click', function(){
        $.Cart.clear(); // очищаем корзину
});
return this;



Добавление одного наименования товара в корзину в количестве 1шт.
Метод add, получает параметр context (элемент, на который произошел клик) и отправляет на сервер данные.
 

$.ajax({
        url : $.Cart.settings.urladd, // куда отправляем данные
        type : 'post', // метод
        dataType: 'json', // тип данных, которые получаем
        data : {id : $(context).attr($.Cart.settings.addattr)}, // данные, которые отправляем (id добавляемого товара)
        success : function(data){ // при получении ответа
        if (data.count && data.summ || data.count===0 && data.summ===0) { // проверяем есть ли в нем количество и общая сумма для того, что бы сразу
                 $($.Cart.settings.count).html(data.count); // обновить количество товаров в блоке
                 $($.Cart.settings.summ).html(data.summ); // обновить общую сумму в блоке
                 if (data.count>0) // если товары есть в корзине, то
                         $($.Cart.settings.topcart).find('a').attr('href', $.Cart.settings.urlcart); // делаем ссылку на корзину активной
                 else // если корзина пуста
                         $($.Cart.settings.topcart).find('a').attr('href', 'javascript:void(0);'); // делаем ссылку неактивной
                 $.Cart.showMessage('<p>'+data.message+'</p>'+$($.Cart.settings.topcart).html()); // показываем сообщение
        }
});


 

 


22.06.2017; 22:15
хиты: 135
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь