2 22.03.2016 13:55:39 Отредактировано Закусило Александр (22.03.2016 13:57:54)
Re: Фильтр товаров
Ну можно подредактировать шаблон и переделать на выпадающий список. Шаблон с фильтрами находятся в
/modules/catalog/view/blocks/sidefilters/filters.tpl Скопируйте его в
/templates/ВАША ТЕМА/moduleview/catalog/blocks/sidefilters/filters.tpl
и можете редактировать.
3 22.03.2016 14:44:36 Отредактировано Закусило Александр (22.03.2016 14:45:18)
Re: Фильтр товаров
Строки в этом шаблоне отвечающие за фильтры по брендам это:
{if $param.show_brand_filter && count($brands)>1}
<div class="filter typeMultiselect">
<h4>{t}Производитель{/t}: <a class="removeBlockProps hidden" title="{t}Сбросить выбранные параметры{/t}"></a></h4>
<ul class="propsContentSelected hidden"></ul>
<ul class="propsContent">
{foreach $brands as $brand}
<li>
<input type="checkbox" {if is_array($basefilters.brand) && in_array($brand.id, $basefilters.brand)}checked{/if} name="bfilter[brand][]" value="{$brand.id}" class="cb" id="cb_{$brand.id}_{$smarty.foreach.i.iteration}">
<label for="cb_{$brand.id}_{$smarty.foreach.i.iteration}">{$brand.title}</label>
</li>
{/foreach}
</ul>
</div>
{/if}
По идее есть сделать из него выпадающий список <select>, то всё будет работать.
{if $param.show_brand_filter && count($brands)>1}
<div class="filter typeMultiselect">
<h4>{t}Производитель{/t}: <a class="removeBlockProps hidden" title="{t}Сбросить выбранные параметры{/t}"></a></h4>
<ul class="propsContentSelected hidden"></ul>
<div class="propsContent">
<select name="bfilter[brand][]" class="yesno">
{foreach $brands as $brand}
<option {if is_array($basefilters.brand) && in_array($brand.id, $basefilters.brand)}selected{/if} value="{$brand.id}">{$brand.title}</option>
{/foreach}
</select>
</div>
</div>
{/if}
Re: Фильтр товаров
К сожалению такой вариант не подходит. Спасибо Вам за варианты. А не могли бы Вы подсказать как это организовать js скриптом?
Re: Фильтр товаров
К сожалению такой вариант не подходит. Спасибо Вам за варианты. А не могли бы Вы подсказать как это организовать js скриптом?
А чем он не подходит? Он же полностью решит Вашу задачу.
Re: Фильтр товаров
А чем он не подходит? Он же полностью решит Вашу задачу.
Это не правильно, со стороны маркетинга.
7 24.03.2016 17:01:38 Отредактировано Закусило Александр (24.03.2016 17:08:52)
Re: Фильтр товаров
Ну Вы зарисуйте как Вам надо. Я Вам подскажу как реализовать. Или расскажите подробнее как должно всё должно происходить.
Re: Фильтр товаров
Вот скрипт который реализовывает, то что мне нужно. Он дает выбрать только один checkbox. Т.е. например я выбираю производителя MSI(мне выводятся все товары по этому произволителю). Затем выбираю например HTC(и мне выводятся только товары HTC(соответственно MSI проадает)). Но есть небольшая проблемка, то что галочка с MSI не снимается, подскажите пожалуйста как решить эту проблему?Спасибо.
<script>
$('.checkbox').change(function(){
$('input[name="' + $(this).attr('name') +'"]').removeAttr('checked');
$(this).prop('checked', true);
});
</script>
Re: Фильтр товаров
Вам надо устанавливать и снимать через prop как у Вас идёт ниже. То что вы атрибут checked вырезаете не поможет.
11 02.06.2016 14:47:46 Отредактировано Закусило Александр (02.06.2016 14:49:12)
Re: Фильтр товаров
А у Вас случайно formstyler не используется поверх стандартных галочек? Он просто подсталяет контейнер с классом для отображения за место галочки. И поэтому если это так, то этот класса надо у контейнера снимать через removeClass
Re: Фильтр товаров
Александр, да я делаю это на стандартном движке readyscript
Re: Фильтр товаров
Ну значит так используется formstyler. Поэтому уберите класс у нужно контейнера.
Re: Фильтр товаров
Блин какая то не состыковка. Подскажите пожалуйста.
Тут все работает как надо.
https://jsfiddle.net/qef8jwae/6/
Но когда перевожу на сайт, то выбирает по 2 бренда.
<ul class="propsContent">
{foreach $brands as $brand}
<li>
<input class="checkbox" type="checkbox" name="bfilter[brand][]" value="{$brand.id}" class="cb" id="cb_{$brand.id}_{$smarty.foreach.i.iteration}">
<label for="cb_{$brand.id}_{$smarty.foreach.i.iteration}">{$brand.title}</label>
</li>
{/foreach}
</ul>
<script type="text/javascript">
$(document).ready(function(){
$('.checkbox').change(function(){
$('input[name="' + $(this).attr('name') +'"]').not(this).removeAttr('checked');
});
});
</script>
Re: Фильтр товаров
У меня тоже две галочки. Но это и понятно у Вас же:
<li>
<input class="checkbox" type="checkbox" checked name="bfilter[brand][]" value="1" class="cb" id="cb_1_">
<label for="cb_1_"><span></span>Acer</label>
</li>
<li>
<input class="checkbox" type="checkbox" checked name="bfilter[brand][]" value="2" class="cb" id="cb_2_">
<label for="cb_2_"><span></span>Apple</label>
</li>
Т.е. у обоих checked
Re: Фильтр товаров
Да неважно сколько выбрано, скрипт не дает выбрать 2 сразу ,он снимет галочку с пердидущего и тут https://jsfiddle.net/qef8jwae/6/ это работает, а на сайте перестает
Re: Фильтр товаров
Чудес в программировании не бывает.
Что у Вас должно получиться и какой у Вас сайт?
19 09.06.2016 09:34:13 Отредактировано Илья (09.06.2016 09:38:54)
Re: Фильтр товаров
Закусило Александр, Я Вас понимаю. Вот посмотрите на чистом движке, будет именно так как я описываю. Может это formstyler. Не могли бы подскзать что редактировать?
Пытался вставлять
$('input').styler('destroy');
Не помогает
Re: Фильтр товаров
Закусило Александр, Я Вас понимаю. Вот посмотрите на чистом движке, будет именно так как я описываю. Может это formstyler. Не могли бы подскзать что редактировать?
Пытался вставлять$('input').styler('destroy');
Не помогает
Если вы хотите formstyler удалить, то просто уберите его инициализацию.
$('.filter .cb, .filter .yesno').styler(); //Вот так у Вас было
Если хотите, чтобы он не появлялся на галочках, то уберите:
$('.filter .cb, .filter .yesno').styler();
Или я опять неправильно что-то понимаю? Если, да то опишите что должно быть в конечном варианте.
Re: Фильтр товаров
У Вас отрабатывает код фильтра по умолчанию. Т.е. код срабатывает раньше чем Ваш, либо позже. Если посмотрите в шаблон фильтров, то та есть подключение JS.
{addjs file="{$mod_js}jquery.filter.js" basepath="root"}
Вам нужно поменять код на:
{addjs file="jquery.filter.js"}
И скопировать себе в тему оформления этот файл.
Т.е. из:
/modules/catalog/view/js/jquery.filter.js
В
/templates/Ваша тема/resource/js/jquery.filter.js
И уже поправить код js там добавив Вашу функцию, тогда у Вас расхождений не будет.
Смотрите:
setFilterParam
Либо есть вариант, закомментировать там часть кода с установкой значения в этом файле.