Добавляем товар в корзину с параметрами (checkbox)
Пытаюсь добавить в корзину товар с параметрами.
Создал TV с именем add, в нём через запятую указываю значения.
Переделал сниппет для фильтрации. Вызывается [[*add:checkbox]], всё хорошо.
В minishop.js судя по функции ищется тег с классом .params, в данном случае input, и передается атрибут имени = значение.
В чанке tpl.msCart.row добавил (название тв: [[+data.add]])
Максимум чего смог добиться это в корзине показывается (название тв: on)
Необходимо: на странице товара, покупатель отмечает чекбоксы, а выбранные передавались в корзину.
Я так думаю, необходимо добавить другую функцию в minishop.js который парсил бы данные и проверял наличие checked у чекбокса?
UPD: Если в input добавить value="'.$v.'" и добавить товар в корзину, в корзине выведет значение ТВ-параметра add, но только последнее из цикла for(..) какой бы чекбокс не отметить.
UPD2: Нашел в консоле заголовки ответа, содержит следующее:
UPD3: изменил сниппет:
Теперь передаются все параметры:
UPD4:
Исправил на add0, add1 без квадратных скобок.
В корзине показывает, если сделать вывод [[+data.add1]]
Получается, мы получили 4 разных параметра.
Но делать проверку в корзине через
Создал 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 заранее не известно. Как вывести в корзине все значения которые передаются вместе с товаром? Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Пытаюсь изменить minishop.js, чтобы он проверял чекбокс на 'checked', но все равно либо не передает параметры, либо передает все.
Если выделить 1 или 2 или 3 из 4, значение в data.* не передается вообще. Если все выделить, передаются все.
Вот так работает.
Так еще отправляет select с именем color.
Буду рад, если подскажите универсальное решение для полей типа checkbox и select