Вопрос по фильтру mFilter

Здравствуйте, Василий и сообщество!
Подскажите, пожалуйста, у меня фильтр работает корректно с указанием перечня ресурсов в &resources=``, но через &parents=`` работать отказывается.

Это конечно терпимо, когда товаров мало, но когда их за 100 и последующие нужно добавлять вручную — не очень удобно. Скажите, можно ли как-то вывести через категории? Может я чего-то неправильно делаю?
Вот вызов фильтра mFilter:
[[!mFilter?
		&includeMS=`1`
		&includeMSList=`price,add1,add2`
		&includeTVs=`1`
                &processTVs=`1`
                &resources=`4,17...`  //работает 
                &parents=`8,9...`   //не работает
                &includeTVList=`colorImg,form,typeOfImage,country`
                &sortFilters=`ms_add1,ms_add2,tv_colorImg,tv_form,tv_typeOfImage,tv_country,price`
                &tpl=`tpl.msGoods.row`
                &limit=`6`
                &pageFirstTpl=`<li class="control"><a href="[[+href]]">Первая</a></li>`
                &pageLastTpl=`<li class="control"><a href="[[+href]]">Последняя</a></li>`
]]
Светлана Закревская
16 января 2013, 17:23
modx.pro
1
2 356
0

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

Василий Наумкин
16 января 2013, 21:46
0
У сниппета mFilter нет параметра &parents=``.



А в &resources=`` можно указать свой сниппет, который будет выбирать все товары категории и возвращать их списком через запятую. Его нужно написать самостоятельно.
    Светлана Закревская
    16 января 2013, 23:04
    0
    Спасибо за ответ, к сожалению, пока сама этого сделать не могу (
      Denys Butenko
      17 января 2013, 00:17
      0
      Чего вы не можете сделать?
      В этой теме: mSearch
      Вот сниппет этот сниппет:
      if (!empty($_REQUEST['query'])) {return;}
      $parent = $modx->resource->id;
      
      $tmp = $modx->getChildIds($parent);
      if (empty($tmp)) {return 0;}
      $tpls = explode(',', $modx->getOption('minishop.goods_tpl'));
      $q = $modx->newQuery('modResource', array('id:IN' => $tmp, 'template:IN' => $tpls, 'deleted:!=' => 1, 'published' => 1));
      $q->select('id');
      if ($q->prepare() && $q->stmt->execute()) {
          $ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN, 0);
          return implode(',', $ids);
      }
      Сохраните его, и поле &resource=`[[!snippet]]` сделайте.
      Светлана Закревская
      17 января 2013, 14:38
      0
      К сожалению, у меня такой вариант не работает, пробовала до того как здесь задать вопрос, пишет: Задан пустой поисковый запрос
      P.S. А по поводу чего не могу сделать — написать свой сниппет, о котором сказал Василий.
        Andrei Kilin
        17 января 2013, 16:06
        0
        Задан пустой поисковый запрос
        а в query через GET передаете запрос?
          Denys Butenko
          17 января 2013, 23:27
          0
          Ну так, вы или &resources передавайте или &query. В данном случае вам необходимо убрать input name=query.
          Вот так выглядит мой вызов mFilter
          <form action="[[~[[*id]]]]" method="post" id="mFilter">
          [[!mFilter?
          &includeMS=`1`
          &includeMSList=`price,add1`
          &tpl=`tpl.msGoods.row`
          &resources=`[[!getCatIds]]`
          &limit=`9`
          ]]
          <input type="hidden" name="page" value="1">
          <input type="hidden" name="sort" value="ms_price,desc">
          <input type="hidden" name="limit" value="9">
          <input type="hidden" name="action" value="filter">
          </form>
            Prizrak Pro
            18 января 2013, 06:59
            0
            Влезу со своим вопросом. Так как он продолжает тему.

            С подсказками Василия я дошел до примера, который вы привели. И у меня все возвращается.

            Проблема у тебя теперь в другом.

            1. Я хочу фильтры расположить в разных местах страницы. Но фильтровать они должны все вместе. Я понимаю, все элемент формы должны быть внутри формы. Понятно можно объявить форму в начале и конце body. Но тогда необходимо будет элементы формы фильтра расставлять самостоятельно и ручками писать js под каждый, что бы заполнялся.

            Есть альтернатива. Расставить элементы без формы. А наступление событий отслеживать js и когда оно наступает, получать данные со всех элементов, которые предварительно указать ручками в js, и отправлять на сервер ajax.

            В обоих пример придется руками расставлять элементы. А во втором, заранее в js указать все элементы из которых брать данные.

            А есть ли какой либо ещё вариант. И правильно ли я мыслю.

            2. Вопрос это по выводу. Во первых как вижу фильтр возвращает данные в плейсходер [+rows], не пойму а как настроить нужный вид отображения. Указать какие поля отображать.

            И как сбросить фильтр, что бы снова вывести все элементы.

            Вопросов много. Уже неделю разбираюсь с фильтром, и пока конца я не вижу. Очень буду благодарен за любую подсказку.
              Василий Наумкин
              18 января 2013, 07:08
              0
              1. Более-менее нормальный вариант, при условии, что на всех страницах фильтр одинаковый (а тогда и mFilter не особо нужен), это сгенерировать фильтр, скопировать его html и рассовать руками по шаблону внутри формы.

              У него будут определённые классы и id на которые будет реагировать родной js. По другому — только свой фильтр делать.

              2. Там указывается чанк для вывода, используются сниппеты getPage + getResources. В чанке, соответственно, нужные плейсхолдеры прописать, а ненужные — удалить.

              3. Сбросить фильтр можно на js — пройтись по всем переключателям и выстваить в дефолтное положение, или проще, при клике по специальной ссылке:
              document.location = document.location;
              Но тут будет перезагрузка страницы.
              Светлана Закревская
              18 января 2013, 21:50
              0
              Без этого поля вообще пустая страница.
              Вот мой чанк, который работает:
              <form action="[[~[[*id]]]]" method="post" id="mFilter" class="form-horizontal">
              	[[!mFilter?
              		&includeMS=`1`
              		&includeMSList=`price,add1,add2`
              		&includeTVs=`1`
                              &processTVs=`1`
                              &resources=`4,17...`
                              &includeTVList=`colorImg,form,typeOfImage,country`
                              &sortFilters=`ms_add1,ms_add2,tv_colorImg,tv_form,tv_typeOfImage,tv_country,price`
                              &tpl=`tpl.msGoods.row`
                              &limit=`6`
                              &pageFirstTpl=`<li class="control"><a href="[[+href]]">Первая</a></li>`
                              &pageLastTpl=`<li class="control"><a href="[[+href]]">Последняя</a></li>`
              
              	]]
              	<input type="hidden" name="query" value="[[+mse.query]]">
              	<input type="hidden" name="page" value="1">
              	<input type="hidden" name="sort" value="ms_price,asc">
              	<input type="hidden" name="limit" value="6">
              	<input type="hidden" name="cat_id" value="[[*id]]">
              	<input type="hidden" name="action" value="filter" />
              </form>
              А этот не работает (пустая страница):

              <form action="[[~[[*id]]]]" method="post" id="mFilter" class="form-horizontal">
              	[[!mFilter?
              		&includeMS=`1`
              		&includeMSList=`price,add1,add2`
              		&includeTVs=`1`
                              &processTVs=`1`
                              &resources=`[[!getCatIds]]`
                              &includeTVList=`colorImg,form,typeOfImage,country`
                              &sortFilters=`ms_add1,ms_add2,tv_colorImg,tv_form,tv_typeOfImage,tv_country,price`
                              &tpl=`tpl.msGoods.row`
                              &limit=`6`
                              &pageFirstTpl=`<li class="control"><a href="[[+href]]">Первая</a></li>`
                              &pageLastTpl=`<li class="control"><a href="[[+href]]">Последняя</a></li>`
              	]]
              	<input type="hidden" name="page" value="1">
              	<input type="hidden" name="sort" value="ms_price,asc">
              	<input type="hidden" name="limit" value="6">
              	<input type="hidden" name="cat_id" value="[[*id]]">
              	<input type="hidden" name="action" value="filter" />
              </form>
              При чем не работает ни с полем (тут пишет Задан пустой поисковый запрос), ни без него, без поля cat_id (которого у Вас нет), тоже не работает.
                Василий Наумкин
                19 января 2013, 07:42
                0
                Запусти отдельно getCatIds, посмотри, что выдаёт.

                Если ничего — надо разбираться, почему.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11