Вопрос по фильтру mFilter
Здравствуйте, Василий и сообщество!
Подскажите, пожалуйста, у меня фильтр работает корректно с указанием перечня ресурсов в &resources=``, но через &parents=`` работать отказывается.
Это конечно терпимо, когда товаров мало, но когда их за 100 и последующие нужно добавлять вручную — не очень удобно. Скажите, можно ли как-то вывести через категории? Может я чего-то неправильно делаю?
Вот вызов фильтра 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>`
]]
Комментарии: 11
Спасибо за ответ, к сожалению, пока сама этого сделать не могу (
Чего вы не можете сделать?
В этой теме: mSearch
Вот сниппет этот сниппет:
В этой теме: 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]]` сделайте.
К сожалению, у меня такой вариант не работает, пробовала до того как здесь задать вопрос, пишет: Задан пустой поисковый запрос
P.S. А по поводу чего не могу сделать — написать свой сниппет, о котором сказал Василий.
P.S. А по поводу чего не могу сделать — написать свой сниппет, о котором сказал Василий.
Задан пустой поисковый запроса в query через GET передаете запрос?
Ну так, вы или &resources передавайте или &query. В данном случае вам необходимо убрать input name=query.
Вот так выглядит мой вызов mFilter
Вот так выглядит мой вызов 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>
Влезу со своим вопросом. Так как он продолжает тему.
С подсказками Василия я дошел до примера, который вы привели. И у меня все возвращается.
Проблема у тебя теперь в другом.
1. Я хочу фильтры расположить в разных местах страницы. Но фильтровать они должны все вместе. Я понимаю, все элемент формы должны быть внутри формы. Понятно можно объявить форму в начале и конце body. Но тогда необходимо будет элементы формы фильтра расставлять самостоятельно и ручками писать js под каждый, что бы заполнялся.
Есть альтернатива. Расставить элементы без формы. А наступление событий отслеживать js и когда оно наступает, получать данные со всех элементов, которые предварительно указать ручками в js, и отправлять на сервер ajax.
В обоих пример придется руками расставлять элементы. А во втором, заранее в js указать все элементы из которых брать данные.
А есть ли какой либо ещё вариант. И правильно ли я мыслю.
2. Вопрос это по выводу. Во первых как вижу фильтр возвращает данные в плейсходер [+rows], не пойму а как настроить нужный вид отображения. Указать какие поля отображать.
И как сбросить фильтр, что бы снова вывести все элементы.
Вопросов много. Уже неделю разбираюсь с фильтром, и пока конца я не вижу. Очень буду благодарен за любую подсказку.
С подсказками Василия я дошел до примера, который вы привели. И у меня все возвращается.
Проблема у тебя теперь в другом.
1. Я хочу фильтры расположить в разных местах страницы. Но фильтровать они должны все вместе. Я понимаю, все элемент формы должны быть внутри формы. Понятно можно объявить форму в начале и конце body. Но тогда необходимо будет элементы формы фильтра расставлять самостоятельно и ручками писать js под каждый, что бы заполнялся.
Есть альтернатива. Расставить элементы без формы. А наступление событий отслеживать js и когда оно наступает, получать данные со всех элементов, которые предварительно указать ручками в js, и отправлять на сервер ajax.
В обоих пример придется руками расставлять элементы. А во втором, заранее в js указать все элементы из которых брать данные.
А есть ли какой либо ещё вариант. И правильно ли я мыслю.
2. Вопрос это по выводу. Во первых как вижу фильтр возвращает данные в плейсходер [+rows], не пойму а как настроить нужный вид отображения. Указать какие поля отображать.
И как сбросить фильтр, что бы снова вывести все элементы.
Вопросов много. Уже неделю разбираюсь с фильтром, и пока конца я не вижу. Очень буду благодарен за любую подсказку.
1. Более-менее нормальный вариант, при условии, что на всех страницах фильтр одинаковый (а тогда и mFilter не особо нужен), это сгенерировать фильтр, скопировать его html и рассовать руками по шаблону внутри формы.
У него будут определённые классы и id на которые будет реагировать родной js. По другому — только свой фильтр делать.
2. Там указывается чанк для вывода, используются сниппеты getPage + getResources. В чанке, соответственно, нужные плейсхолдеры прописать, а ненужные — удалить.
3. Сбросить фильтр можно на js — пройтись по всем переключателям и выстваить в дефолтное положение, или проще, при клике по специальной ссылке:
У него будут определённые классы и id на которые будет реагировать родной js. По другому — только свой фильтр делать.
2. Там указывается чанк для вывода, используются сниппеты getPage + getResources. В чанке, соответственно, нужные плейсхолдеры прописать, а ненужные — удалить.
3. Сбросить фильтр можно на js — пройтись по всем переключателям и выстваить в дефолтное положение, или проще, при клике по специальной ссылке:
document.location = document.location;
Но тут будет перезагрузка страницы.
Без этого поля вообще пустая страница.
Вот мой чанк, который работает:
Вот мой чанк, который работает:
<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 (которого у Вас нет), тоже не работает.
Запусти отдельно getCatIds, посмотри, что выдаёт.
Если ничего — надо разбираться, почему.
Если ничего — надо разбираться, почему.
Если Вы имели ввиду — вызвать отдельно, то выводит 0.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.