filth
-
Публикаций
343 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные filth
-
-
if(!empty($variant['sku']) && empty($variant['name']))
$this->db->query('SELECT v.id as variant_id, p.id as product_id FROM __products p LEFT JOIN __variants v ON v.product_id=p.id WHERE p.name=? LIMIT 1', $product['name']); -
// Аяксовая корзина $(document).ready(function() { $('form.variants').on('submit', function(e) {e.preventDefault(); button=$(this).find('input[type="submit"]'); if($(this).find('select[name=variant]').length>0) variant=$(this).find('select').val(); if($(this).find('input[name=variant]:checked').length>0) variant=$(this).find('input[name=variant]:checked').val(); $.ajax({ url:"ajax/cart.php", data:{variant:variant}, dataType:'json', success:function(data){$('.cart_informer').html(data); if(button.attr('data-result-text'))button.val(button.attr('data-result-text')); }}); var o1 = $(this).offset(); var o2 = $('.cart_informer').offset(); var dx = o1.left - o2.left; var dy = o1.top - o2.top; var distance = Math.sqrt(dx * dx + dy * dy); $(this).closest('.product').find('.image img').effect("transfer", { to: $(".cart_informer"), className: "transfer_class" }, distance); $('.transfer_class').html($(this).closest('.product').find('.image').html()); $('.transfer_class').find('img').css('height', '100%'); return false; }); });
-
У вас на странице две формы поиска с одинаковым классом, autocomplete отправляет запрос первой из них. Как костыль, можно дважды вызывать скрипт autocomplete для разных классов
-
Вдруг кому поможет, мало ли, проблему вызывает строка
LEFT JOIN __variants v on v.product_id = p.id
в api/Products.php (присутствует в обоих функциях get и count)
-
Извините, так способ рабочий или нет?
Рабочий.
-
Вроде разобрался))) Правильней всего будет такой код для ajax_cart.js
// Аяксовая корзина $(document).ready(function() { $('form.variants').submit (function(e) {e.preventDefault(); button=$(this).find('input[type="submit"]'); if($(this).find('select[name=variant]').length>0) variant=$(this).find('select').val(); if($(this).find('input[name=variant]:checked').length>0) variant=$(this).find('input[name=variant]:checked').val(); $.ajax({ url:"ajax/cart.php", data:{variant:variant}, dataType:'json',success:function(data){$('#cart_informer').html(data); if(button.attr('data-result-text'))button.val(button.attr('data-result-text')); }}); var o1 = $(this).offset(); var o2 = $('#cart_informer').offset(); var dx = o1.left - o2.left; var dy = o1.top - o2.top; var distance = Math.sqrt(dx * dx + dy * dy); $(this).closest('.product').find('.image img').effect("transfer", { to: $("#cart_informer"), className: "transfer_class" }, distance); $('.transfer_class').html($(this).closest('.product').find('.image').html()); $('.transfer_class').find('img').css('height', '100%'); return false; }); });
-
Поколупался, получилось так
// Аяксовая корзина $(document).ready(function() { $('form.variants').submit (function(e) {e.preventDefault(); button=$(this).find('input[type="submit"]'); if($(this).find('input[name=variant]:checked'))variant=$(this).find('input[name=variant]:checked').val(); if($(this).find('select[name=variant]'))variant=$(this).find('select').val(); $.ajax({ url:"ajax/cart.php", data:{variant:variant}, dataType:'json',success:function(data){$('#cart_informer, #mobile_cart_informer').html(data); if(button.attr('data-result-text'))button.val(button.attr('data-result-text')); $.fancybox({href:'#cart_popup',title:'Корзина покупок','onStart':function(){$("#cart_popup").css("display","block");},'onClosed':function(){$("#cart_popup").css("display","none");}});}}); }); });
Тут правда с модулем всплывающей корзины. Работает на jQuery 3.1.0
P.S. Тут удалена анимация перелета товара в корзину.
P.P.S. Убрал
.size()>0)
Так как .size не рабтает в новой jQuery, .length которая пришла на смену тоже ошибку выдает, тут пусть знатоки подскажут чем это чревато)))
.size()>0) -
Все работало, на старом jQuery, понадобилось библиотеку 3.1 подключить, после неё перестали работать корзина и тултип. Тултип "починился" заменой .live на .on, а вот с корзиной не получается.
-
адрес сайта скажите, или прикрепите файлы html/product.tpl и js/ajax_cart.js
product.tpl стандартный, еще не правился ajax_cart.js вот:
$('form.variants').on('submit',function(e){e.preventDefault();button=$(this).find('input[type="submit"]');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:{variant:variant},dataType:'json',success:function(data){$('#cart_informer, #mobile_cart_informer').html(data);if(button.attr('data-result-text'))button.val(button.attr('data-result-text'));$.fancybox({href:'#cart_popup',title:'Корзина покупок','onStart':function(){$("#cart_popup").css("display","block");},'onClosed':function(){$("#cart_popup").css("display","none");}});}}); });
-
Попробуйте его вообще убрать
$('form.variants').on('submit', function(e)
Если бы все так просто))) Не работает.
-
все потому что ajax_cart.js использует метод live который является устаревшим для новых версий jQuery. вам нужно либо добавить jQuery Migrate для того чтобы поддерживался live, либо уйти от live и переписать ajax_cart.js
Не поможете с этим? не силен в .js. Вычитал, что нужно добавить аргумент в метод ".on" по типу
$('form.variants').on('submit','.argument',function(e)....
Что добавить вместо ".argument"? Или не все так просто?
-
А для Деливери чтото будете делать?
-
А какой-то извращенец принципиально в ИЕ работает или вообще в сафари.
У вашего типа нет кроссбраузерности.
А зачем использовать для работы браузеры, которые еще не целиком поддерживают HTML5?Новый ишак кстати понимает эти теги, и сафари и ios тоже. один firefox пасет задних
тут чтото есть http://shpargalkablog.ru/2013/11/calendar.html
-
Всё бы ничего, если бы этот календарь мог и время указывать, т.к. данные в БД должны быть в формате 0000-00-00 00:00:00., а он добавляет только дату. Если человеку время не критично, то можно сделать dateFormat: 'yy-mm-dd 00:00:00'. А вот если человек хочет, чтобы акция закончилась в 12:30, то такой пикер не проканает.
В вашем случае
<input type="datetime-local">
-
А зачем вам скрипт? Опера и хром уже давно понимают
<input type="date"> и <input type="time">
-
а переменная {$module} вообще что выводит?)
Спасибо, вопрос отпал, все получилось, не понимаю в чем была причина, но
{if $module=='ProductsView' }
теперь работает.
-
а если {if $module=='ProductsView' }
Уже пробовал, тоже не работает. потом попробую на стандартной симпле, мож я в движке что то наделал, уже много изменений). Спасибо.
-
А как убрать сайд бар со всех страниц, кроме каталога? пишу в index.tpl
{if $smarty.get.module=='ProductsView' } <div id="left"> Тут сайдбар </div> {/if}
Не работает(((
Временно решил через wrapper, но два шаблона index постоянно править не удобно
-
чтобы показать все товары просто передайте в параметр filter любое другое значение что отличается от ваших условий, например empty, тогда фильтры скинуться. и в сессию запишеться что фильтр пустой
Уже так и сделал, спасибо)
-
так попробуйте
// Текущий фильтр если был передан запрос get-параметром if($this->request->get('filter', 'string')) { $f = $this->request->get('filter', 'string'); } // если ничего не передавали, но в сессии присутствует значение фильтра elseif(isset($_SESSION['filter_stat'])) { $f = $_SESSION['filter_stat']; } if(isset($f)) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; // запишем новое значение фильтра в сессию $_SESSION['filter_stat'] = $f; //передадим значение назад в шаблон $this->design->assign('filter', $f); }
Теперь надо бороться с случаем, если фильтр нашел 0 товаров, но то просто.... И вернуть возможность показать "все товары")))
-
так попробуйте
// Текущий фильтр если был передан запрос get-параметром if($this->request->get('filter', 'string')) { $f = $this->request->get('filter', 'string'); } // если ничего не передавали, но в сессии присутствует значение фильтра elseif(isset($_SESSION['filter_stat'])) { $f = $_SESSION['filter_stat']; } if(isset($f)) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; // запишем новое значение фильтра в сессию $_SESSION['filter_stat'] = $f; //передадим значение назад в шаблон $this->design->assign('filter', $f); }
Работает на отлично! Спасибо огромное, уверен много кому будет полезно.
-
сохраняйте значение фильтра в сессию
$_SESSION['in_stock'] = $filter['in_stock'];
и передавайте эту сессию назад в шаблон
Понимаю, что прошу многовато, но помогите как правильно это добавить сюда
// Текущий фильтр if($f = $this->request->get('filter', 'string')) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; $this->design->assign('filter', $f); }
-
хм, заметил одну деталь, в админке фильтр сохраняет свое значение при выборе категорий и брендов, у клиента фильтр сбрасывается. Вопрос знатокам - возможно ли сохранить в сессии фильтр? Если да, подскажите как)))
-
Ещё добавлю, если клиент выбрал оплату наличными при получении? И видит надпись
можете его оплатить!Ничего страшного, но лучше для оплаты онлайн сделать так:
{* Форма оплаты, генерируется модулем оплаты *} {if $order->status == 3} Ваш заказ удален! {elseif $order->status == 2} Ваш заказ отгружен! Приятного пользования! {elseif $order->status == 0} Ваш заказ обрабатывается, ожидайте подтверждения! {else} {if $payment_method->id==6} Ваш товар есть в наличии, можете его оплатить! {checkout_form order_id=$order->id module=$payment_method->module} {else} {checkout_form order_id=$order->id module=$payment_method->module} {/if} {/if}
id метода оплаты берем из БД!
Обновить через импорт артикулы
в Общие вопросы по функционалу и дизайну
Опубликовано
Благодарствую за толчек в нужное направление, теперь работает как надо.