Позарез нужна консультация по 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. Отчего собственный чанк ведет к якобы отсутствию результатов фильтрации? Чего ему может недоставать?

Спасибо заранее
Владимир
05 июля 2019, 11:06
modx.pro
732
0

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

Наумов Алексей
05 июля 2019, 14:39
0
Что бы фильтры и результаты были в разных местах нужно:
1. Использовать toPlaceholders, да
2. Правильная разметка, все должно быть внутри общего блока с id=mse2_mfilter, стрелочками указал…


Код вызова покажите, может там где ошибки…
    Владимир
    05 июля 2019, 15:08
    0
    Спасибо
    По поводу «внутри блока...» я уже обнаружил свой пробел в познаниях.
    Попробую присвоить 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, то все нормально.
    Кстати, может, он не принимает чанки из файловой системы? только это приходит в голову
      Владимир
      05 июля 2019, 15:23
      0
      UPD
      Версия про чанки из файловой системы не подтвердилась.
      Перемещение их в БД не помогло
        Наумов Алексей
        05 июля 2019, 15:27
        0
        Ну может с чанком товара проблема?
          Владимир
          05 июля 2019, 15:38
          0
          Этот чанк прекрасно справляется с работой при штатном открытии страницы.
          А вот при обновлении через ajax — вместо кода получаю строку про отсутствие подходящих данных
      Владимир
      05 июля 2019, 17:00
      0
      Нашел, что препятствовало работе фильтра в моем чанке.
      Но легче от этого мне не стало.
      Чанк имеет вид
      [[+param:eq=`1`:then=`
      html с плейсхолдерами…
      `]]

      [[+param:eq=`2`:then=`
      другой html с плейсхолдерами
      `]]

      Убираю условия, оставляю голый код чанка — все работает.
      Т.е., фильтр не умеет обрабатывать чанки с такими фильтрами.
      Чанк, видимо, должен быть простым и прямолинейным.
      И как быть?
        Наумов Алексей
        08 июля 2019, 09:12
        0
        Да умеет… Может на Fenom этот чанк переписать?
          Владимир
          08 июля 2019, 10:33
          0
          Спасибо )
          Я эту проблему уже обошел, экспериментировать больше не хочется.
          Сделал чанк простым и безусловным, превратив его в несколько чанков, логику вытащил наружу и сделал динамическое имя для указания в сниппете.
          Ну и в принципе сделал несколько выводов, которых не нашел в документации.
          1. Это требуемая «безусловность» чанка результатов — отсутствие обрамляющей его логики.
          2. Если не используется параметр toPlaceholders, [[+filters]] и [[+results]] обязаны находиться внутри чанка, определяемого в &tplOuter — вне зависимости от того, где размещен элемент id=«mse2_mfilter».
          3. Если не используется toPlaceholders, то переименованные [[+filters]] и [[+results]] обязаны находиться ВНЕ указанного чанка, внутри они не работают.
          Все это опытным путем. Соблюл эти три правила — фильтр заработал.
            Владимир
            08 июля 2019, 17:56
            0
            П.3 следует читать: Если ИСПОЛЬЗУЕТСЯ toPlaceholders
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9