Добавляем товар в корзину с параметрами (checkbox)

Пытаюсь добавить в корзину товар с параметрами.
Создал TV с именем add, в нём через запятую указываю значения.
Переделал сниппет для фильтрации. Вызывается [[*add:checkbox]], всё хорошо.

if (empty($input) || empty($name)) {return '';}
$tmp = explode(',',$input);
$rows = '';
$idx = 0;
foreach ($tmp as $v) {
$v = trim($v);
$rows .= '<div class="controls">
<label class="checkbox">
<input class="params" name="'.$name.'_'.$idx.'" type="checkbox">'.$v.'</label>
</div>';$idx++;
}
return $rows;

В minishop.js судя по функции ищется тег с классом .params, в данном случае input, и передается атрибут имени = значение.

В чанке tpl.msCart.row добавил (название тв: [[+data.add]])

Максимум чего смог добиться это в корзине показывается (название тв: on)

Необходимо: на странице товара, покупатель отмечает чекбоксы, а выбранные передавались в корзину.

Я так думаю, необходимо добавить другую функцию в minishop.js который парсил бы данные и проверял наличие checked у чекбокса?

UPD: Если в input добавить value="'.$v.'" и добавить товар в корзину, в корзине выведет значение ТВ-параметра add, но только последнее из цикла for(..) какой бы чекбокс не отметить.

UPD2: Нашел в консоле заголовки ответа, содержит следующее:
action:addToCart
gid:5
num:1
data[add]: последний параметр из цикла

UPD3: изменил сниппет:
if (empty($input) || empty($name)) {return '';}

$tmp = explode(',',$input);
$rows = '';
$idx = 0;
foreach ($tmp as $v) {
$v = trim($v);
$rows .= '<div class="controls">
<label class="checkbox">
<input class="params" name="'.$name.'['.$idx.']" id="'.$name.'['.$idx.']" type="checkbox" value="'.$v.'" checked="checked">'.$v.'</label></div>';$idx++;
}

return $rows;
Код с лишней информацией в input'e, позже исправлю.
Теперь передаются все параметры:
action:addToCart
gid:5
num:1
data[add[0]]:чекбокс 1
data[add[1]]:чекбокс 2
data[add[2]]:чекбокс 3
data[add[3]]:чекбокс 4
Но в корзине [[+data.add]] ничего не возвращает.

UPD4:
Исправил на add0, add1 без квадратных скобок.
В корзине показывает, если сделать вывод [[+data.add1]]
Получается, мы получили 4 разных параметра.
Но делать проверку в корзине через
[[+data.add*:isnot=``:then=``]]
и каждое свойства выводить в ручную задача ресурсоёмкая и неудобно в плане масштабирования. Т.к. количество addn заранее не известно. Как вывести в корзине все значения которые передаются вместе с товаром?
Denys Butenko
06 ноября 2012, 18:17
modx.pro
2
3 356
0

Комментарии: 5

Василий Наумкин
07 ноября 2012, 03:21
0
Засуньте в чанк одного товара корзины свой сниппет, который возьмет из сессии массив параметров этого товара (data) и в цикле их выведет.
    Denys Butenko
    07 ноября 2012, 12:56
    0
    Спасибо, как раз думал откуда данные брать, чтобы постоянно цикл не гонять даже когда нет товаров.
    Denys Butenko
    07 ноября 2012, 23:33
    0
    Хм, передавать — передается. Но по умолчанию ставил checked=checked на всех параметрах. А теперь заметил, что сколько бы не выбрал галочкой — всегда передаются все.

    Пытаюсь изменить minishop.js, чтобы он проверял чекбокс на 'checked', но все равно либо не передает параметры, либо передает все.

    $('.addToCartLink').live('click', function(e) {
    		var gid = $(this).data('gid');
    		var params = {};
    		$('.params').each(function(id, param) {
    			if($('.params').prop('checked') == true) {
    		 	 params[param.name] = param.value;
    			}
    		});

    Если выделить 1 или 2 или 3 из 4, значение в data.* не передается вообще. Если все выделить, передаются все.
      Denys Butenko
      07 ноября 2012, 23:36
      0
      Надо почаще писать. После написания сразу же нашел решение.

      $('.params').each(function(id, param) {
      			if(param.checked) {
      		 	 params[param.name] = param.value;
      			}

      Вот так работает.
        Denys Butenko
        08 ноября 2012, 00:26
        0
        $('.params').each(function(id, param) {
        			if(param.checked || param.name == 'color') {
        		 	 params[param.name] = param.value;
        			}

        Так еще отправляет select с именем color.

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