Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

addToCart + 2-ве опции


Baco

Recommended Posts

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

 

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

 

Задача:

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

 

Дано:

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
Надіслати
Поділитися на інших сайтах

На данный момент проблема тут: 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 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.