1 Отредактировано Илья (22.03.2016 13:55:01)

Тема: Фильтр товаров

Здравствуйте. Есть ли возможность реализовать выбор только одного варианта Производителя?
http://storage2.static.itmages.ru/i/16/0322/s_1458640465_4534013_9064101590.png

Повысить оценку Понизить оценку

2 Отредактировано Закусило Александр (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: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}

4

Re: Фильтр товаров

К сожалению такой вариант не подходит. Спасибо Вам за варианты. А не могли бы Вы подсказать как это организовать js скриптом?

Повысить оценку Понизить оценку

Re: Фильтр товаров

Илья пишет:

К сожалению такой вариант не подходит. Спасибо Вам за варианты. А не могли бы Вы подсказать как это организовать js скриптом?

А чем он не подходит? Он же полностью решит Вашу задачу.

6

Re: Фильтр товаров

Закусило Александр пишет:

А чем он не подходит? Он же полностью решит Вашу задачу.

Это не правильно, со стороны маркетинга.

Повысить оценку Понизить оценку

7 Отредактировано Закусило Александр (24.03.2016 17:08:52)

Re: Фильтр товаров

Ну Вы зарисуйте как Вам надо. Я Вам подскажу как реализовать. Или расскажите подробнее как должно всё должно происходить.

8

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 вырезаете не поможет.

10

Re: Фильтр товаров

Александр, Пробовал я через prop эффекта ноль почему то?

Повысить оценку Понизить оценку

11 Отредактировано Закусило Александр (02.06.2016 14:49:12)

Re: Фильтр товаров

А у Вас случайно formstyler не используется поверх стандартных галочек? Он просто подсталяет контейнер с классом для отображения за место галочки. И поэтому если это так, то этот класса надо у контейнера снимать через removeClass

12

Re: Фильтр товаров

Александр, да я делаю это на стандартном движке readyscript

Повысить оценку Понизить оценку

Re: Фильтр товаров

Ну значит так используется formstyler. Поэтому уберите класс у нужно контейнера.

14

Re: Фильтр товаров

Все работает спасибо!

Повысить оценку Понизить оценку

15

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

17

Re: Фильтр товаров

Да неважно сколько выбрано, скрипт не дает выбрать 2 сразу ,он снимет галочку с пердидущего и тут https://jsfiddle.net/qef8jwae/6/ это работает, а на сайте перестает

Повысить оценку Понизить оценку

Re: Фильтр товаров

Чудес в программировании не бывает.
Что у Вас должно получиться и какой у Вас сайт?

19 Отредактировано Илья (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(); 

Или я опять неправильно что-то понимаю? Если, да то опишите что должно быть в конечном варианте.

21

Re: Фильтр товаров

http://storage9.static.itmages.ru/i/16/0609/s_1465460015_2066475_1003c2343d.png

Повысить оценку Понизить оценку

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

Либо есть вариант, закомментировать там часть кода с установкой значения в этом файле.