Позарез нужна консультация по mFilter2
Ув. специалисты, подскажите, в каком направлении направить свои усилия по решению двух проблем.
Они явно копеечные, но день на них уже ушел.
1. Фильтры и результаты в соответствии с дизайном разнесены в коде страницы и не могут быть умещены в один div (<div class=«msearch2» id=«mse2_mfilter»><div id=«mse2_results»>). Когда плейсхолдер [[+filters]] помещается вне указанного дива, он остается пустым, фильтры в этом месте не появляются.
Приделываю к сниппету параметр &toPlaceholders=`my.`, заменяю [[+filters]] на [[+my.filters]], [[+results]] на [[+my.results]]. Фильтры в нужном месте появляются. А вот товары не выводятся вовсе. И все это сопровождается строкой в логе ошибок: ...\core\xpdo\om\xpdoquery.class.php: 764) Encountered empty IN condition with key id.
2. Переношу [[+filters]] и [[+results]] в <div class=«msearch2» id=«mse2_mfilter»><div id=«mse2_results»>, как по умолчанию. Удаляю &toPlaceholders=`my.`.
Товары отображаю собственным чанком. В котором прописаны все необходимые классы и id, как в дефолтном чанке.
Фильтры появляются, товары тоже.
Но! Стоит изменить фильтр — товары исчезают, вместо них сообщение, что не найдено ничего подходящего.
Пагинация при этом показывает множество страниц, как и должно быть.
Т.о., два вопроса.
1. Как вынести фильтры за пределы ?
2. Отчего собственный чанк ведет к якобы отсутствию результатов фильтрации? Чего ему может недоставать?
Спасибо заранее
Они явно копеечные, но день на них уже ушел.
1. Фильтры и результаты в соответствии с дизайном разнесены в коде страницы и не могут быть умещены в один div (<div class=«msearch2» id=«mse2_mfilter»><div id=«mse2_results»>). Когда плейсхолдер [[+filters]] помещается вне указанного дива, он остается пустым, фильтры в этом месте не появляются.
Приделываю к сниппету параметр &toPlaceholders=`my.`, заменяю [[+filters]] на [[+my.filters]], [[+results]] на [[+my.results]]. Фильтры в нужном месте появляются. А вот товары не выводятся вовсе. И все это сопровождается строкой в логе ошибок: ...\core\xpdo\om\xpdoquery.class.php: 764) Encountered empty IN condition with key id.
2. Переношу [[+filters]] и [[+results]] в <div class=«msearch2» id=«mse2_mfilter»><div id=«mse2_results»>, как по умолчанию. Удаляю &toPlaceholders=`my.`.
Товары отображаю собственным чанком. В котором прописаны все необходимые классы и id, как в дефолтном чанке.
Фильтры появляются, товары тоже.
Но! Стоит изменить фильтр — товары исчезают, вместо них сообщение, что не найдено ничего подходящего.
Пагинация при этом показывает множество страниц, как и должно быть.
Т.о., два вопроса.
1. Как вынести фильтры за пределы ?
2. Отчего собственный чанк ведет к якобы отсутствию результатов фильтрации? Чего ему может недоставать?
Спасибо заранее
Комментарии: 9
Спасибо
По поводу «внутри блока...» я уже обнаружил свой пробел в познаниях.
Попробую присвоить id=«mse2_mfilter» какому-нибудь прародительскому блоку.
Наверное, это решит проблему. Надеюсь.
Но есть вторая, к которой не знаю, как подойти.
Вот такой сейчас у меня вызов фильтра
[[!mFilter2?
&class=`msProduct`
&element=`msProducts`
&parents=`[[+id]]`
&filters=`
ms|price:number
`
&tpl=`@FILE:chunks/products_tile.tpl`
&tplOuter=`@FILE:chunks/chunk.mfilter2.outer.My.tpl`
&limit=`12`
&includeMS=`1`
&includeMSList=`price`
&tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
]]
Так вот при использовании чанка chunks/products_tile.tpl скрипт /assets/components/msearch2/action.php возвращает верную пагинацию, верное кол-во результатов, но вместо самих результатов присылает строку «Подходящих результатов не найдено». Если удалить параметр &tpl, то все нормально.
Кстати, может, он не принимает чанки из файловой системы? только это приходит в голову
По поводу «внутри блока...» я уже обнаружил свой пробел в познаниях.
Попробую присвоить id=«mse2_mfilter» какому-нибудь прародительскому блоку.
Наверное, это решит проблему. Надеюсь.
Но есть вторая, к которой не знаю, как подойти.
Вот такой сейчас у меня вызов фильтра
[[!mFilter2?
&class=`msProduct`
&element=`msProducts`
&parents=`[[+id]]`
&filters=`
ms|price:number
`
&tpl=`@FILE:chunks/products_tile.tpl`
&tplOuter=`@FILE:chunks/chunk.mfilter2.outer.My.tpl`
&limit=`12`
&includeMS=`1`
&includeMSList=`price`
&tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
]]
Так вот при использовании чанка chunks/products_tile.tpl скрипт /assets/components/msearch2/action.php возвращает верную пагинацию, верное кол-во результатов, но вместо самих результатов присылает строку «Подходящих результатов не найдено». Если удалить параметр &tpl, то все нормально.
Кстати, может, он не принимает чанки из файловой системы? только это приходит в голову
UPD
Версия про чанки из файловой системы не подтвердилась.
Перемещение их в БД не помогло
Версия про чанки из файловой системы не подтвердилась.
Перемещение их в БД не помогло
Ну может с чанком товара проблема?
Этот чанк прекрасно справляется с работой при штатном открытии страницы.
А вот при обновлении через ajax — вместо кода получаю строку про отсутствие подходящих данных
А вот при обновлении через ajax — вместо кода получаю строку про отсутствие подходящих данных
Нашел, что препятствовало работе фильтра в моем чанке.
Но легче от этого мне не стало.
Чанк имеет вид
[[+param:eq=`1`:then=`
html с плейсхолдерами…
`]]
[[+param:eq=`2`:then=`
другой html с плейсхолдерами
`]]
…
Убираю условия, оставляю голый код чанка — все работает.
Т.е., фильтр не умеет обрабатывать чанки с такими фильтрами.
Чанк, видимо, должен быть простым и прямолинейным.
И как быть?
Но легче от этого мне не стало.
Чанк имеет вид
[[+param:eq=`1`:then=`
html с плейсхолдерами…
`]]
[[+param:eq=`2`:then=`
другой html с плейсхолдерами
`]]
…
Убираю условия, оставляю голый код чанка — все работает.
Т.е., фильтр не умеет обрабатывать чанки с такими фильтрами.
Чанк, видимо, должен быть простым и прямолинейным.
И как быть?
Да умеет… Может на Fenom этот чанк переписать?
Спасибо )
Я эту проблему уже обошел, экспериментировать больше не хочется.
Сделал чанк простым и безусловным, превратив его в несколько чанков, логику вытащил наружу и сделал динамическое имя для указания в сниппете.
Ну и в принципе сделал несколько выводов, которых не нашел в документации.
1. Это требуемая «безусловность» чанка результатов — отсутствие обрамляющей его логики.
2. Если не используется параметр toPlaceholders, [[+filters]] и [[+results]] обязаны находиться внутри чанка, определяемого в &tplOuter — вне зависимости от того, где размещен элемент id=«mse2_mfilter».
3. Если не используется toPlaceholders, то переименованные [[+filters]] и [[+results]] обязаны находиться ВНЕ указанного чанка, внутри они не работают.
Все это опытным путем. Соблюл эти три правила — фильтр заработал.
Я эту проблему уже обошел, экспериментировать больше не хочется.
Сделал чанк простым и безусловным, превратив его в несколько чанков, логику вытащил наружу и сделал динамическое имя для указания в сниппете.
Ну и в принципе сделал несколько выводов, которых не нашел в документации.
1. Это требуемая «безусловность» чанка результатов — отсутствие обрамляющей его логики.
2. Если не используется параметр toPlaceholders, [[+filters]] и [[+results]] обязаны находиться внутри чанка, определяемого в &tplOuter — вне зависимости от того, где размещен элемент id=«mse2_mfilter».
3. Если не используется toPlaceholders, то переименованные [[+filters]] и [[+results]] обязаны находиться ВНЕ указанного чанка, внутри они не работают.
Все это опытным путем. Соблюл эти три правила — фильтр заработал.
П.3 следует читать: Если ИСПОЛЬЗУЕТСЯ toPlaceholders
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.