На прошлом занятии мы рассмотрели простой вывод каталога товаров сниппетами miniShop2. Как мы помним, товары - это расширенные ресурсы MODX, а значит, с ними можно работать и другим сниппетам.
Сегодня мы познакомимся с платным дополнение для MODX, которое осуществляет поиск и фильтрацию любых ресурсов - mSearch2.
Основные особенности:
Морфологический поиск сразу на нескольких языках. По умолчанию - русский и английский.
Обновление поискового индекса автоматически, при сохранении ресурса в админке.
Возможность задать "поисковый вес" каждому индексируемому полю ресурса.
Возможность индексации ТВ параметров и комментариев Tickets.
Поиск по ресурсам внутри админки сайта.
Сохранение поисковых запросов и управление синонимами слов.
Автоподсказки и быстрый поиск.
Ajax фильтрация результатов поиска с построением прямых url через History Api.
Возможность расширения класса фильтрации для прописывания собственной логики.
Гибкая работа с шаблонами оформления - для каждого фильтра есть возможность назначить собственные.
Высокая скорость работы и поиска, и фильтра.
Возможность выводить результаты поиска и фильтрации любыми сниппетами.
После покупки дополнения в репозитории Simple Dream, вам нужно загрузить и установить его на сайт. При этом будут скачаны 2 словаря phpMorphy, которые обеспечивают работу с морфологией.
Затем, в админке, вы можете загрузить еще дополнительные словари:
После этого вам нужно проиндексировать весь сайт. Делается это только после первой установки mSearch2, изменении набора языков или настроек индексировани.
После этого вы уже можете что-то искать в админке.
Обратите внимание, что поиск - морфологический. Например, по запросу "товары" mSearch2 находит рсеурсы с названием "Товар", а вот встроенный поиск MODX 2.3 - нет. Он ищет точное совпадение.
Таким образом, вы получаете морфологический поиск по ресурсам сайта прямо в админке.
Есть два способа вывода поиска на сайте: простой и с фильтрацией.
Простой способ - это вывод формы поиска, и результатов с постраничной разбивкой под ней.
[[!mSearchForm?
&autocomplete=`results`
]]
[[!pdoPage?
&element=`mSearch2`
]]
[[!+page.nav]]
Автоподсказки выводятся сразу по результатам запроса. То есть, это даже не подсказки, а быстрый поиск - если кликнуть на результат, то вы сразу перейдёте на страницу ресурса - http://minishop2.com/search/simple.
Более продвинутый вывод поиска, с фильтрацией:
[[!mSearchForm?
&autocomplete=`queries`
]]
[[!mFilter2?
&forceSearch=`1`
]]
Параметр &forceSearch=1
указывает фильтру, что не нужно сразу выводить ресурсы для фильтрации - должен быть поисковый запрос. Также здесь уже включен режим автоподсказок по истории запросов.
Как видите, использовать mSearch2 очень просто - http://minishop2.com/search/filter.
В отличии от других подобных решений фильтрации, mFilter2 строит фильтры динамически, в зависимости от выводимых ресурсов. А это значит, чтобы мы можем использовать msProducts для вывода товаров.
[[!mFilter2?
&parents=`0`
&limit=`10`
&element=`msProducts`
&filters=`
ms|price:number
,parent:categories
,msoption|tags
,ms|vendor:vendors
`
&class=`msProduct`
&tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
]]
Всё оформление блока вывод находится в чанке tpl.mFilter2.outer, также мы указываем специальные числовые чанки для вывода слайдера с ценой.
Пожалуй, это самый крутой способ выводить товары сайта - http://minishop2.com/catalog/.
Вот мы и познакомились с самым популярным платным дополнением магазина Simple Dream. Конечно, это только верхушка айсберга, и возможности для фильтрации ресурсов поистине неисчерпаемы.
Например, вы можете добавить товару новое поле через плагины miniShop2 и настроить фильтрацию по нему - вот готовая инструкция.
Вообще, рекомендую внимательно почитать документацию на сайте http://docs.modx.pro/components/msearch2/, там всё очень подробно расписано.
Самостоятельно пробовать платные дополнения перед покупкой можно на http://tefile.modx.pro.
На следующем занятии мы познакомимся с другим платным компонентом Office, который позволяет сделать красивую авторизацию, работу с профилем пользователя и вывод заказов miniShop2.
Очень беспокоит один вопрос, на который не нашел ответа в магазине симплдрим. Хочу купить, для начала, mSearch2 и в связи с этим хотелось бы понимать, что покупаю. В том смысле, как я могу дальше использовать этот код? Только в одном или во всех своих проектах? Могу ли я брать деньги за настроенные мной сайты с установленным купленным кодом? Как обстоят дела с обновлением? Появляется ли у меня приоритет в тех. поддержке? Если где то есть доступное описание этих моментов, пожалуйста дай ссылочку! Я бегло прочитал "Положения" в магазине, но это, кажется, не то.
Как угодно.
Дополнение покупается для ключа репозитория. Один сайт - один ключ. Для нового сайта нужно покупать еще раз, за кажду покупку + 10% скидка и так до 50%.
Естественно.
Отлично, все обновления бесплатны на весь срок жизни дополнения.
Да, появляется возможность задавать вопросы в поддержке магазина.
Полная ясность. Спасибо за оперативность :)
Василий, а можно каким то образом вызывать блок фильтров и вывод результатов в разных местах шаблона? А то у меня по дизайну слева в сайдбаре сначала менюшка с категориями товаров, ниже под ней блок фильтров, еще ниже, может еще, что то будет. А справа в контентной области, сначала слайдер, а под ним уже каталог, который, собственно, результаты и есть.
http://docs.modx.pro/components/msearch2/snippets/mfilter2
То есть при таком вызове
В [[+cat.filters]] должно, что то выводиться (там пусто), я правильно понял?
Точку после cat забыл.
Уххххххх.. Центнер кирпичей уже произвел. Спасибо! )
Все замечательно сверсталось и настроилось, спасибо! ) Пара вопросов появилась в процессе. Если хотя бы раз использовать фильтр, то даже если все галки потом убрать, то исчезает пагинация от pdoPage. Как бы, вот её обратно? Вызов такой
И еще, у меня блоки с фильтрами в сайдбаре, сделаны скрывающимися. Вот можно где то хранить их состояние? Ну, в смысле, я могу сам их в куку сложить, но ведь состояния чекбоксов где то хранятся? Может и состояние блоков туда же? Есть для этого какой то простой способ?
Пагинация должна быть в блоке mse2_pagination, а у тебя просто pagination - вот скрипт её и не вставляет на страницу.
Состояние чекбоксов хранится в url, чтобы можно было давать прямые ссылки на результаты фильтрации. Состояние элементов оформления лучше хранить в куках юзера.
Василий, ты потрясающе понятный человек. Спасибо :)
На здоровье!
Василий привет! Обнаружилась такая ситуация. Для доступа к сайту есть два домена, на латинице и на кириллице, один ссылка на другой. И вот, когда попадаешь на страничку с каталогом с латинского домена (по сохраненной ссылке, например) и используешь на ней фильтр, то js ругается на невозможность передавать данные на другой домен и не работает. Ошибку показывает в 606-й строке default.js
Кириллический домен кодируется в punycode
Доброго времени суток уважаемый Василий. Прошу написать мне пару строчек ясности, если это не совсем затруднидь вас. Если не ставить mimishop2 на сайт, будет ли работать mFilter2, если да, то как он будет подтягивать изображения с ресурсов?
У меня есть на сайте структурированный каталог, в каждом ресурсе есть TV поля для фильтрации + картинки. Реально ли выводить фильтром эти данные, или же необходимо грузить mimishop2.
Для того, чтобы установить mimishop2 на сайт, его нужно сначала написать. Потому что есть miniShop2, а mimishop2 нет.
Он и не будет - это будет делать сниппет, используемый для вывода результатов: хоть pdoResources, хоть getResources.
Конечно. Можно попробовать дополнение в работе на http://tefile.modx.pro перед покупкой.
Где можно посмотреть, как настраивать TV параметры в ресурсах, чтобы потом их вывести с помощью фильтров? У меня есть к примеру n-количество ресурсов с тремя TV 1. Марка 2. Тип кузова 3. Грузоподъемность (данные в числах, чтобы потом слайдером выводить) В каком виде мне сделать запрос, чтобы вывелись эти поля для сортировки с помощью фильтра? Подскажите плиз.
Правильно ли я заполняю TV параметры? Или их нужно заполнять в самом TV а потом в ресурсе просто из возможных вариантов выбирать???
http://docs.modx.pro/components/msearch2/snippets/mfilter2
Спасибо, помогло! )) Только вот все выводится по английски: сортировка, лексиконы и т.д. Это из за того, что стоит включены два словаря английский и русский?! Мне надо они оба для поиска... Как по умолчанию сделать лексиконы русскими?
Прочитай, пожалуйста, что написано по ссылке, в самом конце.
А где указывается то, что выводится в [[+results]] ??? У меня абракадабра выводится, единственным хорошим есть ссылка, которая реально ведет на нужную страницу.
Хочу сделать так, чтобы выводилась картинка и ссылка. Вот
http://docs.modx.pro/components/msearch2/snippets/mfilter2
Укажи параметры для этого сниппета при вызове mFilter2 - они туда передадутся.
Большое спасибо за качественную и реально полезную консультацию по MODX. Василий Наумкин - The Best!
На здоровье!
Василий, подскажи, пожалуйста. Разделил вывод и фильтр с помощью toPlaceholder. Все замечательно выводится. Но вот фильтры не работают. Что я не так делаю?
Для правильной работы необходимо, чтобы все элементы фильтра располагались в одном блоке с #mse2_mfilter. Именно так прописано с стандартном чанке tpl.mFilter2.outer.
Разместил все под один контейнер. Изменений нет.
https://file.modx.pro/files/e/b/7/eb7fd42f4fd7defdfc0d94ed728c71fa.png
Даже на картинке видно, что вывод результатов не попадает в этот блок.
Ну как не попадает? ColumnLeft - фильтр, ColumnRight - результат, оба блока в
Так же как на minishop2.com и mamaboutique http://take.ms/OkrkG
Василий, все же прошу помочь с этим вопросом. 3 дня ломаю голову, весь твой FAQ по компоненту прочел. Честно говоря, думал, что в этом курсе будут рассмотрены эти аспекты. А инфы меньше, чем в FAQе приложения.
По картинкам плохо угадывается - я обратил снимание, что подсвечивается только блок фильтров, а на код не посмотрел.
Ты купил дополнение? Создай тикет, напиши там доступы к сайту, я зайду и посмотрю, что не так.
Сколько бы я не написал информации, всегда есть у кого не работает и ничего здесь не поделать.
Здравствуйте уважаемый. У меня на странице подбора шасси все настроено благодаря Вам и работает: [[!mFilter2? &element=
pdoResources
&tpl=tpl.Product.row
&tvPrefix=`` &parents=12
&hideContainers=1
&includeTVs=imgtovara
&filters=tv|cargo:number, tv|marka
&tplFilter.outer.tv|cargo=tpl.mFilter2.filter.slider
&tplFilter.row.tv|cargo=tpl.mFilter2.filter.number
]]**А вот на странице подбора автобуса не выводится слайдер, в чем я ошибся?**[[!mFilter2? &element=
это вопрос номер один. Вторая проблема, в УПРАВЛЕНИИ СЛОВАРЯМИ не нахожу новый фильтр для смены имени, смотрел в обоих языках ru и en. ПОМОГИТЕ плиз.
pdoResources
&tpl=tpl.Product.row
&tvPrefix=`` &parents=5
&hideContainers=1
&includeTVs=imgtovara
&filters=tv|place:number, tv|marka, tv|tipavtobusa
&tplFilter.outer.tv|placeBus=tpl.mFilter2.filter.slider
&tplFilter.row.tv|placeBus=tpl.mFilter2.filter.number
]]В первом случае:
Во втором: > tv|place:number, ... &tplFilter.outer.tv|placeBus
Неужели так трудно внимательно сверить два вызова дополнения и найти отличия, почему в одном случае работает, а в другом нет?
Ну не смешно уже.
Я же отправлял тебя в документацию, просил прочитать внимательно, что написано в конце. Ну как так можно то? > Для оформления фильтров используются записи из лексикона. Если вы добавили новый фильтр и он отображается непонятной длинной надписью на английском - это значит, что её нужно добавить в словарь mSearch2.
Там даже картинка есть, как добавлять записи.
Больше я на такие вопросы отвечать не буду, имей совесть.
Сори. Я просто тормоз!!! Не зря говорят, 7 раз отмерь и раз отрежь. Надо быть повнимательнее
Значит, нет значений для вывода фильтра.
То есть, ТВ параметр place у всех выводимых товаров пуст.
Та нет, там все заполнено, просто я попрошу, чтобы мне очки купили. Не внимателен больно. TV был с приставкой s, ТО ЕСТЬ places
По какой причине может перестать работать фильтрация, если учитывать ,что я ничего на сайте не делал связанного с ней. Фильтры выводятся, а аякс не работает и пропал ползунок слайдер. Все подключения скриптов рабочие и ведут куда надо.. Помогите понять причину... вот здесь беда
Значит, делал что-то, не связанное с ней.
В консоли ошибка javascript.
А как ее исправить?
Попробуй подумать, что ты там сделал, что фильтрация перестала работать? Не сама же она взяла и сломалась?
А если сама - то пора вызывать охотников за приведениями.
все, меня повесят на суку... Колупался с галереей, может она чего. Ладно пойду бэкап подымать
Без бэкапа никак, да.
Я не знаю как оценить ваше последнее сообщение? Если здесь сарказм, то да я ХЗ как его решить ту гребанную проблему. А если в самом деле без бэкапа никак, тогда я так и сделаю.
Нет, не сарказм, без бэкапов действительно никуда.
Все мои дополнения потому и хранятся в GitHub, что можно отмотать историю изменений и понять, что и почему сломалось.
Просто хотел морально поддержать, больше не буду, извини.
Вчера сделал бэкап но ничего не поменялось. Я уже в панике. Не знаю что и думать. Наверное закажу недели две назад бэкап. А иначе выбора нет! P.S. За поддержку спасибо )
У тебя в коде страницы вот что
Сначала подключается jQuery 1.9, а сразу после этого его заменяет jQuery 1.5, в котором нет метода on() и отсюда ошибка при его использовании в mSearch2.
Убирай нафиг подключение этого древнего jQuery 1.5!
БОЛЬШОЕ ВАМ СПАСИБО!!! Я сразу и не понял, что в этом куске кода подключение идет [[*showAd:is=
1
:then=\[\[$adLinks\]\]
]]Прошу прощения за такой вопрос, но я не смог найти где править цвет ползунка slider хочу вместо голубого сделать красным. Сами якоря, которые тягать я нашел - это картинки, а вот полоску не могу поменять цвет... Подскажите где изменить.