Вывод результата mFilter2 в отдельный чанк

Здравствуйте.

Можно ли как-то вынести результат работы фильтра mFilter2 в отдельный чанк?
Структура сайта не позволяет использовать один чанк-шаблон, в котором находится сам фильтр и вывод результатов.

Нужно сделать так, чтобы фильтр был, например, в чанке [[$sidebar]], а результат в чанке [[$content]]
Но я не знаю как это сделать.

P.S. Я фрилансер и клиент попросил сделать редизайн сайта, в связи с этим изменилась структура сайта, которая не позволяет реализовать задуманное.
Андрей Александрович
13 июля 2014, 16:07
modx.pro
4
5 524
0

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

Evgeny Epifanov
13 июля 2014, 20:29
0
&toPlaceholders
Если не пусто, mFilter2 сохранит все данные в плейсхолдеры: [[+filters]], [[+results]] и [[+total]] с префиксом, указанным в этом параметре. Например, если вы указжете &toPlaceholders=`my.`, то получите: [[+my.filters]], [[+my.results]] и [[+my.total]]
http://docs.modx.pro/components/msearch2/snippets/mfilter2
    Андрей Александрович
    13 июля 2014, 23:36
    0
    Я читал документацию. Но, возможно, не совсем разобрался.
    Пробовал и этот вариант с &toPlaceholders. Задаю префикс как в примере и все равно вывод работает в пределах стандартного чанка «tpl.mFilter2.outer»

    Можно как-то на пальцах подробнее рассказать или на примере (было бы замечательно!)
      Evgeny Epifanov
      14 июля 2014, 00:07
      0
      Ниже уже ответили. Чуть дополню:
      Все, что касается mFilter нужно обернуть в id=«mse2_mfilter»,
      сами фильтры, т.е. плейсхолдер [[+my.filters]] должны быть внутри id=«mse2_filters»,
      количество найденых ресурсов [[+my.total]] внутри id=«mse2_total»,
      результат фильтрации [[+my.results]] внутри id=«mse2_results»,
      ну и пагинация внутри id=«mse2_pagination»
    Дмитрий Кондаков
    13 июля 2014, 23:49
    0
    Тебе нужно сделать вывод сниппета в [[$sidebar]] с параметром &toPlaceholders=`my.`, при этом перенести [[+my.results]] из tpl.mFilter2.outer в [[$content]]. И самое главное [[$sidebar]] и [[$content]] обернуть в общий блок с id=«mse2_mfilter», а из tpl.mFilter2.outer соответсвенно убрать этот id
      Андрей Александрович
      14 июля 2014, 00:59
      0
      Так, с этим вроде разобрался. Спасибо, Дмитрий и спасибо Евгений!

      Теперь возникла вторая проблема: когда фильтр не трогаешь, то выводится основной контент в категории, например. А когда начинаешь фильтровать, то выводится и результат фильтра и сам контент.
      Можно как-то проверить результат на пустоту?
      Пробовал следующий код, но он не сильно помогает — получается не то что нужно
      [[+results:empty=`[[*content]]`:else=`<div id="mse2_results" class="clearfix">[[+results]]</div>`]]
        Evgeny Epifanov
        06 августа 2014, 20:20
        0
        Попробуйте вместо else -> notempty
        если еще актуально…
          Александр
          01 декабря 2014, 18:17
          0
          Евгений если написать [[+results:empty=`[[*content]]`:notempty=`[[+results]]`]]
          то не срабатывает empty
            Evgeny Epifanov
            02 декабря 2014, 19:24
            0
            Попробуйте:
            [[+total:gt`0`:then=`[[+results]]`:else=`[[*content]]`]]
              Александр
              02 декабря 2014, 21:46
              0
              правильно будет так:
              [[!+total`0`:then=`<div id="mse2_results">[[results]]</div>`:else=`<div id="mse2_results">[[*content]]</div>`]]
                Александр
                02 декабря 2014, 21:59
                0
                только в место mse2_results нужно поставить results
              Александр
              02 декабря 2014, 22:32
              0
              Евгений, все хорошо, но не выводится пагинация и фильтры:

              <div class="row">
                                  	<div id="mse2_sort" class="span5 col-md-5">
                                  		[[!%mse2_sort]]
                                  		<a href="#" data-sort="ms|price" data-dir="[[+mse2_sort:is=`ms|price:desc`:then=`desc`]]" data-default="desc" class="sort">[[!%mse2_sort_price]] <span></span></a>
                                  	    <a href="#" data-sort="ms|availability" data-dir="[[+mse2_sort:is=`ms|availability:desc`:then=`desc`]]" data-default="desc" class="sort">[[!%mse2_sort_availability]] <span></span></a>
                                  	    [[!%mse2_limit]]
                                  	    <select name="mse_limit" id="mse2_limit">
                              				<option value="10" [[+limit:is=`10`:then=`selected`]]>10</option>
                              				<option value="20" [[+limit:is=`20`:then=`selected`]]>20</option>
                              				<option value="50" [[+limit:is=`50`:then=`selected`]]>50</option>
                              				<option value="100" [[+limit:is=`100`:then=`selected`]]>100</option>
                              			</select>
                                  	 </div>
                                  	[[+tpls:notempty=`
                                  	<div id="mse2_tpl" class="span4 col-md-4">
                                  		<a href="#" data-tpl="0" class="[[+tpl0]]">[[!%mse2_chunk_default]]</a> /
                                  		<a href="#" data-tpl="1" class="[[+tpl1]]">[[!%mse2_chunk_alternate]]</a>
                                  	</div>
                                  	`]]
                                  </div>
                                   
                                  <div id="mse2_selected_wrapper">
                                  <div id="mse2_selected">[[!%mse2_selected]]:
                          				<span></span>
                          			</div>
                          		</div>
        Валерий
        11 декабря 2018, 11:16
        0
        Всем добрый день.

        Столкнулся с непонятной проблемой. Пытаюсь вывести фильтр и результат фильтрации в разных контейнерах.
        Получаю такую картину:

        1. При указании
        &toPlaceholders=`my.`
        И при корректном переносе всех id:
        <div id="mse2_mfilter" class="wrapper">
            <div class="navigation">
                [[!mFilter2?
                    &parents=`[[*id]]`
                    &toPlaceholders=`my.`
                    &class=`msProduct`
                    &element=`msProducts`
                    &filters=`
                        ms|vendor:vendors,
                        ms|price:number,
                        ms|size:number
                    `
                    &tplOuter=`user_tpl.mFilter2.outer`
                    &tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
                    &tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
                    &tplFilter.outer.ms|size=`tpl.mFilter2.filter.slider`
                    &tplFilter.row.ms|size=`tpl.mFilter2.filter.number`
                    &showLog=`1`
                ]]
            </div>
            <div class="right-zone">
                <div id="mse2_results">
        			[[+my.results]]
        		</div>
            </div>
        </div>
        В чанке фильтра «user_tpl.mFilter2.outer» удаляю #mse2_mfilter и добавляю к плейсхолдерам «my.», больше ничего не меняю.
        Результат: фильтр слева исчезает, а продукция справа есть.

        2. Однако, когда я не указываю "&toPlaceholders" и работаю с плейсхолдерами по-умолчанию, у меня фильтр слева есть, но, результат справа не показывается до момента активации фильтра (до первого выбора любого фильтра). Потом справа появляются товары и все работает нормально.

        Я понимаю, что где-то ошибся с настройками, но я не могу найти где. Все ID прописаны корректно. Может быть должна быть какая-то максимальная\минимальная глубина нахождения каждого ID?
          Anton_red
          05 февраля 2019, 01:03
          0
          Аналогичная проблема. Не понимаю, где намудрил.
            Валерий
            06 февраля 2019, 13:30
            0
            Свою проблему решил в итоге, просто скопировав с нуля родной чанк и удалив аккуратно лишнее, проверяя на каждом удалении работу.
            Пришлось внутри чанка организовать две колонки — после этого все заработало.
            Похоже, одну из оберток все-таки терял.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          14