megauser Опубликовано 9 октября, 2019 Жалоба Поделиться Опубликовано 9 октября, 2019 Вопрос такого плана, как сделать чтоб товар можно было массово положить в корзину, Например на странице одного товара мы имеем 3 (связанных товара)У этих связанных товаров убираем изображение ( оставляя только имя и чекбокс с вариантом или вариантами) Далее в товаре при нажатии на кнопку в корзину чтоб выделенные чекбоксы отправлялись как товары в корзину. Получается мне править два файла?ajax/cart.phpи ajax_cart.js? Как собрать все товары? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 9 октября, 2019 Жалоба Поделиться Опубликовано 9 октября, 2019 + product.tpl, к примеру: <input type="checkbox" name="variants[{$v->id}]" value="{$v->id}"> потом в js var data = $(this).serialize(); и передать аяксом этот массив на обработку PHP.P.S. А вообще ты сам вряд ли что сможешь сделать, от тебя толку никакого как и денег 0. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 октября, 2019 Жалоба Поделиться Опубликовано 9 октября, 2019 Получается мне править два файла? ajax/cart.php и ajax_cart.js? Как собрать все товары?Есть разные возможности. Если постараться, то можно даже не особо большими изменениями в одном шаблоне product.tpl обойтись... Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 9 октября, 2019 Автор Жалоба Поделиться Опубликовано 9 октября, 2019 + product.tpl, к примеру: <input type="checkbox" name="variants[{$v->id}]" value="{$v->id}"> потом в js var data = $(this).serialize(); и передать аяксом этот массив на обработку PHP.P.S. А вообще ты сам вряд ли что сможешь сделать, от тебя толку никакого как и денег 0. эх, последнее дело чужие деньги считать. Тут форум вроде помощи или биржа? В вашем сообщении прям требование заплатить.Напоминает бомбил у нас в Шереметьево. (Тоже на жизнь обиженные) Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 9 октября, 2019 Автор Жалоба Поделиться Опубликовано 9 октября, 2019 Есть разные возможности.Если постараться, то можно даже не особо большими изменениями в одном шаблоне product.tpl обойтись... Получается сделал так в связанных товарах вывел чекбокс в product.tpl (обернул все в form class"variants") {if $related_products} <div class="checkbox_products"> {foreach $related_products as $related_product} <!-- Товар--> <div class="product_checkbox"> <!-- Название товара --> <div>{$related_product->name|escape}</div> <!-- Название товара (The End) --> {if $related_product->variants|count > 0} <!-- Выбор варианта товара --> {foreach $related_product->variants as $v} <div class="variant"> <input id="variants_{$v->id}" name="variants[{$v->id}]" value="1" type="checkbox" /> {if $v->name}<label class="variant_name" for="variants_{$v->id}">{$v->name}</label>{/if} <span>{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span> </div> {/foreach} <!-- Выбор варианта товара (The End) --> {else} Нет в наличии {/if} </div> <!-- Товар (The End)--> {/foreach} </div> {/if} Далее в ajax_cart.js добавил функцию $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; в data data: $(this).serializeObject(), Далее в ajax/ cart.php foreach для вариантов if(is_array($simpla->request->get('variants'))) { $variants = $simpla->request->get('variants'); foreach($variants as $s => $v) $simpla->cart->add_item($s, $v); } else $simpla->cart->add_item($simpla->request->get('variant', 'integer'), $simpla->request->get('amount', 'integer')); Теперь 2 товара в связанных отправляются все отлично, основной товар не отправляется.Прошу помощи, не понял как организовать работу ajax_cart.js ( думаю там причина) Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 10 октября, 2019 Автор Жалоба Поделиться Опубликовано 10 октября, 2019 Если кто поможет разобраться , Основной товар у меня идет radiobutton , а связанные через чекбокс, добавляются либо один товар который основной , а если выбираю чекбоксы то товары добавляются корректно, но без основного товара. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 10 октября, 2019 Жалоба Поделиться Опубликовано 10 октября, 2019 (изменено) Изменено 10 октября, 2019 пользователем Noxter Цитата Ссылка на сообщение Поделиться на другие сайты
Решение phukortsin Опубликовано 10 октября, 2019 Решение Жалоба Поделиться Опубликовано 10 октября, 2019 Пробуйте в "foreach для вариантов" убрать одно слово "else". Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 10 октября, 2019 Автор Жалоба Поделиться Опубликовано 10 октября, 2019 Пробуйте в "foreach для вариантов" убрать одно слово "else". Благодарю! Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 28 января, 2020 Жалоба Поделиться Опубликовано 28 января, 2020 Пробуйте в "foreach для вариантов" убрать одно слово "else". Интересно а можно данное решение реализовать только с выпадающими select. Аналогично сделал, только вместо radiobuttons у меня select. Не работает Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 28 января, 2020 Жалоба Поделиться Опубликовано 28 января, 2020 Интересно а можно данное решение реализовать только с выпадающими select. Аналогично сделал, только вместо radiobuttons у меня select. Не работает Все можно но нужно чуть переделать если у вас несколько селектов то собирать с них а вот если селект multiple то там наверно почти так же Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 28 января, 2020 Жалоба Поделиться Опубликовано 28 января, 2020 Все можно но нужно чуть переделать если у вас несколько селектов то собирать с них а вот если селект multiple то там наверно почти так же Получается что связанные товары идут выпадающим списком. А что именно переделать? ajax_cart.js по сути идет такой же.в ajax/cart.php мы тоже foreach оставляем. где копать? Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 28 января, 2020 Жалоба Поделиться Опубликовано 28 января, 2020 (изменено) Все можно но нужно чуть переделать если у вас несколько селектов то собирать с них а вот если селект multiple то там наверно почти так же нет, обычный селект с возможностью одного выбора. ajax_cart.js $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; // Аяксовая корзина $('form.variants').on('submit', function(e) { e.preventDefault(); button = $(this).find('button[type="submit"]'); var o1 = $(this).offset(), o2 = $('.cart__count').offset(), dx = o1.left - o2.left, dy = o1.top - o2.top, distance = Math.sqrt(dx * dx + dy * dy); cart = $(this).find('svg.item__button--cart'), check = $(this).find('svg.item__button--check'), count = Number($('.cart__count').html()); $(this).closest('.product').find('.item__image > img').effect("transfer", { to: $(".cart__count"), className: "transfer_class" }, distance); $('.transfer_class').html($(this).closest('.product').find('.item__image').html()); $('.transfer_class').find('img').css('height', '100%'); if ($(this).find('input[name=variant]:checked').size() > 0) { variant = $(this).find('input[name=variant]:checked').val(); } if ($(this).find('select[name=variant]').size() > 0) { variant = $(this).find('select').val(); } $.ajax({ url: "../ajax/cart.php", data: $(this).serializeObject(), dataType: 'json', success: function(data) { count++; $('.cart__count').html(count); cart.css('display', 'none'); check.css('display', 'inline-block'); } }); return false; }); ну а в ajax/cart.php сделал по аналогии выше с решением. Изменено 28 января, 2020 пользователем Kami Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 29 января, 2020 Жалоба Поделиться Опубликовано 29 января, 2020 variant = $(this).find('select').val(); на variant = $(this).find('select[name=variant]').val(); или variant = $(this).find('select[name=variant] option:selected').val(); Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.