Вывод результата mFilter2 в отдельный чанк
Здравствуйте.
Можно ли как-то вынести результат работы фильтра mFilter2 в отдельный чанк?
Структура сайта не позволяет использовать один чанк-шаблон, в котором находится сам фильтр и вывод результатов.
Нужно сделать так, чтобы фильтр был, например, в чанке [[$sidebar]], а результат в чанке [[$content]]
Но я не знаю как это сделать.
P.S. Я фрилансер и клиент попросил сделать редизайн сайта, в связи с этим изменилась структура сайта, которая не позволяет реализовать задуманное.
Можно ли как-то вынести результат работы фильтра mFilter2 в отдельный чанк?
Структура сайта не позволяет использовать один чанк-шаблон, в котором находится сам фильтр и вывод результатов.
Нужно сделать так, чтобы фильтр был, например, в чанке [[$sidebar]], а результат в чанке [[$content]]
Но я не знаю как это сделать.
P.S. Я фрилансер и клиент попросил сделать редизайн сайта, в связи с этим изменилась структура сайта, которая не позволяет реализовать задуманное.
Комментарии: 14
&toPlaceholdershttp://docs.modx.pro/components/msearch2/snippets/mfilter2
Если не пусто, mFilter2 сохранит все данные в плейсхолдеры: [[+filters]], [[+results]] и [[+total]] с префиксом, указанным в этом параметре. Например, если вы указжете &toPlaceholders=`my.`, то получите: [[+my.filters]], [[+my.results]] и [[+my.total]]
Я читал документацию. Но, возможно, не совсем разобрался.
Пробовал и этот вариант с &toPlaceholders. Задаю префикс как в примере и все равно вывод работает в пределах стандартного чанка «tpl.mFilter2.outer»
Можно как-то на пальцах подробнее рассказать или на примере (было бы замечательно!)
Пробовал и этот вариант с &toPlaceholders. Задаю префикс как в примере и все равно вывод работает в пределах стандартного чанка «tpl.mFilter2.outer»
Можно как-то на пальцах подробнее рассказать или на примере (было бы замечательно!)
Ниже уже ответили. Чуть дополню:
Все, что касается mFilter нужно обернуть в id=«mse2_mfilter»,
сами фильтры, т.е. плейсхолдер [[+my.filters]] должны быть внутри id=«mse2_filters»,
количество найденых ресурсов [[+my.total]] внутри id=«mse2_total»,
результат фильтрации [[+my.results]] внутри id=«mse2_results»,
ну и пагинация внутри id=«mse2_pagination»
Все, что касается mFilter нужно обернуть в id=«mse2_mfilter»,
сами фильтры, т.е. плейсхолдер [[+my.filters]] должны быть внутри id=«mse2_filters»,
количество найденых ресурсов [[+my.total]] внутри id=«mse2_total»,
результат фильтрации [[+my.results]] внутри id=«mse2_results»,
ну и пагинация внутри id=«mse2_pagination»
Тебе нужно сделать вывод сниппета в [[$sidebar]] с параметром &toPlaceholders=`my.`, при этом перенести [[+my.results]] из tpl.mFilter2.outer в [[$content]]. И самое главное [[$sidebar]] и [[$content]] обернуть в общий блок с id=«mse2_mfilter», а из tpl.mFilter2.outer соответсвенно убрать этот id
Так, с этим вроде разобрался. Спасибо, Дмитрий и спасибо Евгений!
Теперь возникла вторая проблема: когда фильтр не трогаешь, то выводится основной контент в категории, например. А когда начинаешь фильтровать, то выводится и результат фильтра и сам контент.
Можно как-то проверить результат на пустоту?
Пробовал следующий код, но он не сильно помогает — получается не то что нужно
Теперь возникла вторая проблема: когда фильтр не трогаешь, то выводится основной контент в категории, например. А когда начинаешь фильтровать, то выводится и результат фильтра и сам контент.
Можно как-то проверить результат на пустоту?
Пробовал следующий код, но он не сильно помогает — получается не то что нужно
[[+results:empty=`[[*content]]`:else=`<div id="mse2_results" class="clearfix">[[+results]]</div>`]]
Попробуйте вместо else -> notempty
если еще актуально…
если еще актуально…
Евгений если написать [[+results:empty=`[[*content]]`:notempty=`[[+results]]`]]
то не срабатывает empty
то не срабатывает empty
Попробуйте:
[[+total:gt`0`:then=`[[+results]]`:else=`[[*content]]`]]
правильно будет так:
[[!+total`0`:then=`<div id="mse2_results">[[results]]</div>`:else=`<div id="mse2_results">[[*content]]</div>`]]
только в место mse2_results нужно поставить results
Евгений, все хорошо, но не выводится пагинация и фильтры:
<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>
Всем добрый день.
Столкнулся с непонятной проблемой. Пытаюсь вывести фильтр и результат фильтрации в разных контейнерах.
Получаю такую картину:
1. При указании
Результат: фильтр слева исчезает, а продукция справа есть.
2. Однако, когда я не указываю "&toPlaceholders" и работаю с плейсхолдерами по-умолчанию, у меня фильтр слева есть, но, результат справа не показывается до момента активации фильтра (до первого выбора любого фильтра). Потом справа появляются товары и все работает нормально.
Я понимаю, что где-то ошибся с настройками, но я не могу найти где. Все ID прописаны корректно. Может быть должна быть какая-то максимальная\минимальная глубина нахождения каждого ID?
Столкнулся с непонятной проблемой. Пытаюсь вывести фильтр и результат фильтрации в разных контейнерах.
Получаю такую картину:
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?
Аналогичная проблема. Не понимаю, где намудрил.
Свою проблему решил в итоге, просто скопировав с нуля родной чанк и удалив аккуратно лишнее, проверяя на каждом удалении работу.
Пришлось внутри чанка организовать две колонки — после этого все заработало.
Похоже, одну из оберток все-таки терял.
Пришлось внутри чанка организовать две колонки — после этого все заработало.
Похоже, одну из оберток все-таки терял.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.