Древовидная фильтрация в mFilter2

Привет!
Потребовалось оформить категории в mFilter2 вот таким образом:




Как это сделать? И можно ли это сделать с помощью стандартных фильтров типа parents, categories и grandparents?

зы Использую tickets и msearch2, магазинов никаких нет.
Александр
25 апреля 2015, 04:25
modx.pro
1
2 014
0

Комментарии: 11

Александр
25 апреля 2015, 12:52
0
Или это как-то через чанки реализовать можно?
    Сергей Скат
    26 апреля 2015, 18:35
    0
    я советую тебе просто выводить варианты категорий (в виде ТВ) а заглавную категорию выводить вручную и по клику на нее отмечать все ее категории
      Александр
      26 апреля 2015, 20:07
      0
      А можно немного подробнее?

      Какого типа нужно создать тв, и в каком чанке прописать название заглавной категории чтобы она именно перед своими дочерними категориями встала?
        Александр
        26 апреля 2015, 20:09
        0
        Может можно как-то обозначить для заглавных категорий один чанк, а для дочерних — другой?
          Сергей Скат
          26 апреля 2015, 22:30
          +1
          ну, как я это вижу (совсем не канон, даже не факт что правильный подход ) сделать ТВ с типом список, например Недвижимость — а в нем квартиры/комнаты/ и тд, mFilter выведет эти категорийй с заголовком недвижимость, далее нужно найти чанк вывода этих чекбоксов и сделать из заголовка в которое выводится имя тв тоже чекбокс, далее на js отлавливать клик на чекбокс «Недвижимость» и просто прокликать все дочерние чекбоксы через цикл, как то так
            Александр
            27 апреля 2015, 06:22
            0
            Попробовал так сделать, результат кое-какой есть )

            Сделал параметр realty (список), в нём возможные значения (Квартиры||Комнаты||Земельные участки и т.д.), на всякий случай разрешил его всем шаблонам.

            Прошелся по категориям недвижимости и к каждому разделу назначил соответствующий пункт из realty.

            Вызвал mFilter2 так:
            [[!mFilter2?
                &parents=`0`
                &filters=`tv|realty`
            ]]

            В итоге выводит вот такой фильтр:



            Но если выбирать пункты, то в результаты поиска выводятся только те страницы, которые отмечены tv realty. То есть, если я выбираю Гаражи и машиноместа, то выводится ссылка только на этот раздел, а дочерние игнорируются, хотя они там есть.

            Параметры &hideContainers = `false` и &showHidden = `true` по умолчанию.

            Есть подозрение, что я неправильно указываю filters при вызове. Есть какие-нибудь соображения? )
              Сергей Скат
              27 апреля 2015, 13:17
              0
              я не понял в чем проблема, фильтры ты вывел, по идее должны работать, беда в чем?
                Александр
                27 апреля 2015, 13:25
                0
                Вот страница krskdoska.ru/

                Если не вводить ничего в поисковую строку, и просто кликнуть на фильтр (скажем, Квартиры), то справа в результатах выводится только ссылка на раздел с квартирами. А нужно, чтобы выводились все тикеты из этого раздела.

                Надеюсь, понятно выразился )
    Александр
    27 апреля 2015, 20:28
    0
    Спасибо большое за помощь!

    Пошел дальше, сделал через js отслеживание чекбоксов, чтобы можно было выбирать разделы группами (http://krskdoska.ru).
    Если нажать на чекбокс Недвижимость — то выбираются все подразделы, но фильтрация не происходит.

    Я так понимаю, в скрипте нужно запустить фильтрацию, но что именно прописать?

    Скрипт, отвечающий за выделение чекбоксов:

    <script type="text/javascript">
    //<![CDATA[ 
    $(function(){
    $('.main_check').on('change',function () {
        var $that = $(this);
        $that.next('ul').find(':checkbox').prop('checked', $that.prop('checked'));
    });
    $('.checkbox').on('change', function(){
        var $that = $(this),
            ul = $that.closest('ul'),
            main = ul.prev('.main_check');
        main.prop('checked', $(':checkbox',ul).length == $(':checkbox:checked',ul).length);
    });
    });//]]>  
    </script>

    Сгенерированный код страницы, где выводятся чекбоксы:

    <ul class="folder">
        	<li>Недвижимость<input type="checkbox" class="main_check">
        	    <ul class="section">
        	        <li>
        <label for="mse2_tv|realty_0" class="">
        	<input type="checkbox" class="checkbox" name="tv|realty" id="mse2_tv|realty_0" value="Гаражи и машиноместа"> Гаражи и машиноместа <sup>1 </sup>
        </label>
       
    </li>
    <li>
        <label for="mse2_tv|realty_1" class="">
        	<input type="checkbox" class="checkbox" name="tv|realty" id="mse2_tv|realty_1" value="Дома и дачи"> Дома и дачи <sup>2 </sup>
        </label>
       
    </li>
    <li>
        <label for="mse2_tv|realty_2" class="">
        	<input type="checkbox" class="checkbox" name="tv|realty" id="mse2_tv|realty_2" value="Земельные участки"> Земельные участки <sup>1 </sup>
        </label>
       
    </li>
    <li>
        <label for="mse2_tv|realty_3" class="">
        	<input type="checkbox" class="checkbox" name="tv|realty" id="mse2_tv|realty_3" value="Квартиры"> Квартиры <sup>3 </sup>
        </label>
       
    </li>
    <li>
        <label for="mse2_tv|realty_4" class="">
        	<input type="checkbox" class="checkbox" name="tv|realty" id="mse2_tv|realty_4" value="Коммерческая недвижимость"> Коммерческая недвижимость <sup>1 </sup>
        </label>
       
    </li>
    <li>
        <label for="mse2_tv|realty_5" class="">
        	<input type="checkbox" class="checkbox" name="tv|realty" id="mse2_tv|realty_5" value="Комнаты"> Комнаты <sup>3 </sup>
        </label>
       
    </li>
        	    </ul>
        	</li>
        </ul>
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      11