Перейти к содержанию
Baco

addToCart + 2-ве опции

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

Доброго времени каждому...

 

Столкнулся с проблемой, а именно с библиотекой этого скрипта.

 

Задача:

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

 

Дано:

1. Скрипт, приведённый выше.

2. Опции типа "mixed" (выпадающий список с рисунком)

3. Доступ ко всем данным типа: 

data-description="" //Сумма с префиксом и в валютном формате

data-imagesrc=""  //Рисунок

data-price=""  //Цена из базы

data-prefix="" //Сам префикс

data-name="" //ID опции

 

В корзину данные же ложатся прекрасно, НО:

var ddData = $('#htmlselect-' + option_id).data('ddslick'); // Тут получаем набор объектов через библиотеку
	
	if (ddData !== null && ddData !== undefined) {      // проверочка...
		var name = ddData.selectedData.name;        // option=[option_id]
		var value = ddData.selectedData.value;      // value
		var data = '&' + name + '='+ value;	    // формирование строки для addToCart 	
	} else {
		var data = '';
	}

Вопрос: как добавить в data несколько опций одного товара через 2-ва отдельных ddslick-а ?

 

P.S. Демо

Изменено пользователем Baco

Поделиться сообщением


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

data(key,value)

 

сформировать value как объект

Поделиться сообщением


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

На данный момент проблема тут: var ddData = $('#htmlselect-' + option_id).data('ddslick');

то есть в одну переменную - 2-ва набора значений добавить, или разделить по option_id, и как добавить это в data, что бы к одному товару, добавилось типа:

(
    [option] => Array
        (
            [227] => 18, //option #1
            [228] => 22  //option #2
        )

    [quantity] => 1
    [product_id] => 30
)

Поделиться сообщением


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

var value = {'option':{'227':'18','228':12},'quantity':1,'product_id':30}

$(elem).data('ddslick',value)

var ddslick = $(elem).data('ddslick')

Поделиться сообщением


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

var ddData = $('#htmlselect-' + option_id).data('ddslick'); - входные данные

 

смотреть мануал по работе скрипта, если писать по "индостайлу", то получается так:

var ddData_1 = $('#htmlselect-227').data('ddslick'); // Тут получаем набор объектов через библиотеку опции по ID 227
var ddData_2 = $('#htmlselect-228').data('ddslick'); // Тут получаем набор объектов через библиотеку опции по ID 228
	
	if (ddData_1 !== null && ddData_1 !== undefined) {      // проверочка...
		var name_1 = ddData_1.selectedData.name;        // option=[227]
		var value_1 = ddData_1.selectedData.value;      // value 18
		var data_1 = '&' + name_1 + '='+ value_1;	// формирование строки для addToCart 	
	} if else (ddData_2 !== null && ddData_2 !== undefined) {
		var name_2 = ddData_2.selectedData.name;        // option=[228]
                var value_2 = ddData_2.selectedData.value;      // value 12
                var data_2 = '&' + name_2 + '='+ value_2;	// формирование строки для addToCart 	
	} else {
		var data_1 = '';
                var data_2 = '';
	}

вот как бы так не говнокодить, а выбрать и "смержить" значения все в data, кстати объектами не получится послать, надо только в массиве опции высылать постом...

Поделиться сообщением


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

Ок...

из примера

 

Массив объектов

var ddData = [
    {
        text: "Facebook",
        value: 1,
        selected: false,
        description: "Description with Facebook",
        imageSrc: "http://dl.dropbox.com/u/40036711/Images/facebook-icon-32.png"
    },
    {
        text: "Twitter",
        value: 2,
        selected: false,
        description: "Description with Twitter",
        imageSrc: "http://dl.dropbox.com/u/40036711/Images/twitter-icon-32.png"
    },
    {
        text: "LinkedIn",
        value: 3,
        selected: true,
        description: "Description with LinkedIn",
        imageSrc: "http://dl.dropbox.com/u/40036711/Images/linkedin-icon-32.png"
    },
    {
        text: "Foursquare",
        value: 4,
        selected: false,
        description: "Description with Foursquare",
        imageSrc: "http://dl.dropbox.com/u/40036711/Images/foursquare-icon-32.png"
    }
];

Если отсылать эти данные в корзину, то

$.ajax({

data: ....

})

смотрим

data

 

 

т.е jquery сам разберется с типами (должен разобраться)

Ничего не надо говнокодить... все красиво получается...

Поделиться сообщением


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

Ага.. увидел демку :(

 

 

Первое что бросилось в глаза

var ddData = $('#htmlselect-' + option_id)

при неком стечении обстоятельств) таких объектов может быть несколько)

 

поэтому это должен быть класс

 

 

Причем

add_bc(product_id) {

нужно немного доработать

function add_bc(product_id,el) {
onclick="add_bc('48',this)

this и el нужны чтобы однозначно определить в каком контейнере нажали кнопку

<div class="product-grid">
<div class="product-48">

тогда

function add_bc(product_id,el) {
var parent = $(el).closest(".product-"+product_id)
...

}

далее весь раскручивать от parent

 

например

parent.find("[id~=htmlselect-").each(function(){
data = $(this).data('ddslick')
....
})

Как-то так....

  • +1 1

Поделиться сообщением


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

Логика хороша, уже ближе к сути, но всё равно, проблема тут: var data = '&' + name + '='+ value

1. Данные - не массив объектов JSON, они - "вытяжка" из ddData = $('#htmlselect-' + option_id).data('ddslick');

2. Как разбить по идентификаторам  ddData, в зависимости от опции и соответственно как добавить (пусть сам уж jquery разбирается) в  data значения:

[option] => Array

 (
   [227] => 18, //option #1 ..[ ddData_1.selectedData.name] => ddData_1.selectedData.value,
   [228] => 22 //option #2  ..ddData_2.selectedData.name] => ddData_2.selectedData.value;
 )

Поделиться сообщением


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


ddData[0] = $('#htmlselect-228').data('ddslick')

ddData[1] = $('#htmlselect-229').data('ddslick')

data = ''

$.each(ddData,function(index, valval){

        var name = valval.selectedData.name; // option=[option_id]

        var value = valval.selectedData.value; // value

        data += '&' + name + '='+ value;

})

код проверен на твоих данных

data = "&option[228]=0&option[229]=0"

data = "&option[228]=0&option[229]=25"

 

 

  • +1 1

Поделиться сообщением


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

Почти реализовал, вернее через $.each( как раз получилось то, что задумывалось, теперь завис на первостепенном этапе - это индексе для ddData[], если автоинкремент ставлю, то обнуляет после каждого forech товара... но это несущественно, как то придумаю уж... как реализую, влеплю контрольно репу, за подсказку по jquery...

 

P.S. Сам забуксовал... вынес начальное значение инкремента за массив и всё стало как надо...

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.