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

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

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

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

P.S. Я фрилансер и клиент попросил сделать редизайн сайта, в связи с этим изменилась структура сайта, которая не позволяет реализовать задуманное.
Андрей Александрович
13 июля 2014, 16:07
modx.pro
4
5 698
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, 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