Поиск по сайту на MODX Revolution. mSearch. Modx поиск по сайту
| Как создать поиск по сайту – сниппет AjaxSearch | Уроки MODx Evo
Сниппет может работать в двух принципиально разных режимах:
Без использования Ajax – результаты поиска будут отображаться на странице, указанной при вызове сниппета.С использованием Ajax – результаты будут отображаться на странице вызова без ее перезагрузки.
Основные параметры сниппета можно посмотреть на сайте:
http://efimov.ws/main/develop/modx/snippet-ajaxsearch-modx-poisk.html
Стандартный вызов сниппета:
– на странице пишем вызов сниппета (т.е. располагаем строку поиска), результаты поиска будут выведены на странице с id=103.
[!AjaxSearch? &ajaxSearch=`0` &landingPage=`103` &showResults=`0`!]
– на странице с id=103 пишем:
[!AjaxSearch? &ajaxSearch=`0` &pagingType=`0` &showInputForm=`0`!]
Пример таблицы стилей для оформления строки поиска и результатов поиска:
/* ----------------------------------------------AjaxSearch-------------------------------------*/#ajaxSearch_form{ padding:0px; margin:0px;} /*убираем отступы в форме поиска*/#ajaxSearch_form fieldset{border:0px solid; padding-top:20px}#ajaxSearch_submit{color:#999; font-weight:normal; padding:2px; width:60px; background:#e9e9e9; border:1px solid #dbdbdb; height:24px}/*фон кнопки, стили для текста написанного на кнопке*/#ajaxSearch_submit:hover{color:orange;}/*цвет текста на кнопке при наведении мыши*/#ajaxSearch_input{color:#666; border:1px solid #dbdbdb; padding:3px; /*width:330px;*/ font-weight:normal} /*стиль для поля ввода.*/#ajaxSearch_input:focus{border: 1px solid orange;}.ajaxSearch_result { border:1px dotted #eee; padding:5px 10px; margin:0px;}/*стиль для вывода результата*/.ajaxSearch_highlight {background-color:#FAEBD7; color:#555} /*выделение искомого слова фоном*/.ajaxSearch_grpResultName{ font-weight:bold; }#content a.ajaxSearch_resultLink{font-size:1.1em; font-weight:normal; text-decoration:none;} /*стиль для ссылки с результатом*/ #content a.ajaxSearch_resultLink:hover{text-decoration:underline;}.ajaxSearch_paging { display:block; padding:10px 0;}/*стиль для блока с постраничной навигацией на странице с результатами*/.ajaxSearch_paging .ajaxSearch_currentPage{color:#999; background-color:#FAEBD7; padding: 1px 3px; font-weight:normal; margin:2px;} /*стиль для номера текущей страницы с результатами поиска*/#ajaxSearch_intro{} /*cтиль для строчки "Введите ваш запрос для начала поиска". Пока пусто, можете прописать ваши стили*/*:focus {outline: none;} /* ----------------------------------------------AjaxSearch-------------------------------------*/
Как в сниппете поиска исправить фразу «Запрос для поиска...» в поле поиска (MODx)?
Для исправления фразы "Запрос для поиска..." править в файле
/assets/snippets/ajaxSearch/lang/russian-UTF8.inc.php
web-grafika.pro
Полноценный поиск на Modx Evolution
На протяжении многих лет для поиска по сайтам с установленной Modx пользовался доработанной под себя версией сниппета HyperFlexSearchForm. Шло время, поиск исправно работал, и всех все устраивало, пока на одном из посещаемых проектов не был установлен и настроен счетчик Google Analytics. Практически сразу аналитика показала, что поиск является явным узким местом сайта. Через месяц, после накопления статистики, стало видно, что порядка 80% пользователей уходят с поиска не получив нужной им информации. И тогда возник вопрос, как сделать полноценный поиск по сайту на Modx?
Так как проект работал на Modx Evolution, то особого выбора сниппетов для организации поиска на сайте не было. Альтернатив сниппету AjaxSearch в Evolution практически нет, но для того, чтобы получить от него максимум, я решил разобраться с настройками, как оказалось не зря. Мною были поставлены следующие требования к сниппету: мне нужен был простой поиск без ajax наворотов, мне нужно было повысить релевантность поиска, чтобы он выдавал более адекватные результаты, которые бы нравились, плюс мне было бы интересно видеть, что именно ищут пользователи, не лазить же каждый раз в Analytics.
Как оказалось AjaxSearch легко отвечает всем моим требованиям, и дает даже чуть больше того, что от него требовалось. Для вызова сниппета на странице поиска использовалась следующая конструкция:
[!AjaxSearch? &landingPage=`1179` &showMoreResults=`1` &moreResultsPage=`1179` &ajaxSearch=`0` &advSearch=`allwords` &asLog=`1:0:500`!]На двух последних свойствах вызова хотел бы остановиться поподробнее.
Свойство &advSearch задает внутренний алгоритм поиска и может принимать четыре значения, от которых будут зависеть результаты поиска. Как показали эксперименты, результаты могут отличаться координально. Возможные параметры поиска:
exactphrase – в результатах поиска будут отражены документы содержащие точное вхождение поискового запросаallwords – в результатах поиска будут отражены документы содержащие любое из слов из поискового запросаnowords – в результатах поиска будут отражены документы не содержащие поискового запросаoneword – в результатах поиска будут отражены документы содержащие хотя бы одно из слов из поискового запроса
Проведя ряд экспериментов мною был выбран второй вариант, который давал наиболее релевантные результаты. Единственный момент, который следует отметить - вариант allwords, как и вариант oneword, достаточно ресурсозатратные, поэтому следует внимательно следить за нагрузкой на хостинг.
Свойство &asLog указывает на то, что поисковые запросы и статистика по полученным результатам должны логироваться. Логирование осуществляется в отдельную таблицу в базе данных, которая создается в момент установки модуля AjaxSearch Logs Manager, который необходимо установить, чтобы можно было смотреть результаты логирования (сам модуль входит в стандартный пакет AjaxSearch, искать его отдельно не надо). Описывать процесс установки модуля не буду, все просто и стандартно. После установки модуля AjaxSearch Logs Manager в разделе Modules (Модули) появится вкладка AjaxSearch, в которой можно будет получить подробную информацию о том, что именно и как люди искали на вашем сайте.
На последок хотел бы отметить, что несмотря на наличие модуля логирования рекомендуется настроить счетчик Google Analytics на сбор информации о поиске по сайту. Этот шаг даст возможность увидеть, если что-то пойдет не так, а так же позволит оценить уровень удовлетворенности посетителей поиском и попробовать его улучшить, при необходимости.
Просмотров: 823
Комментариев:
« Элемент при прокруткеУчет 404 страниц »www.devmarks.ru
Создаём поиск по сайту на MODX Revo при помощи компонента mSearch
03 июл 2014 г. в 14:15
Почти любой сайт должен иметь такой функционал как поиск. Во всех CMS есть для этого дополнения или компоненты, не стал исключением и MODX Revo. Самым популярным пакетом в MODX для этих целей является «SimpleSearch». Несмотря на это мы воспользуеся другим компонентом — «mSearch». Его преимущество заключается в учитывании при поиске морфологии русского языка, а так же в повышенной скорости работы.
К сожалению, у этого пакета есть и недостатки:
- Во-первых, его нет в официальном репозитории MODX. Тем не менее, его можно без проблем найти через поисковые системы, либо скачать по этой ссылке.
- Во-вторых, автор прекратил его поддержку, переписал компонент заново, назвал его «mSearch3» и теперь он платный. Тем не менее, я настроил старую версию и она прекрасно работает.
- В-третьих, у него есть проблемы с выводом TV параметров при выдаче результатов, но мы обойдём это хитрым способом.
Создание страницы для вывода результатов поиска в MODX
Устанавливаем дополнения «mSearch» и «pdoTools». Второе дополнение есть в официальном репозитории MODX. Из него нам потребуется сниппет «pdoResources», хотя вполне можно вместо него использовать и «getResources». Это на ваше усмотрение.
Затем создадим страницу (ресурс), которая будет отвечать за вывод результатов поиска. Шаблон для этого ресурса в большинстве случаев подходит стандартный, требование одно — основное место в нём должно выделяться под содержимое ресурса. В содержимом страницы вызываем сниппет «pdoResources», в параметре к которому передаём id найденных ресурсов сниппетом «mSearch»:
Результаты поиска по запросу: [[+mse.query]] ([[+total]]) [[!pdoResources? &parents=`0` &resources=`[[!mSearch? &templates=`4` &returnIds=`1`]]` &limit=`15` &includeTVs=`img-news,tags,HitsPage` &tpl=`articleTpl` ]] [[+mse.error]]В этом примере мы немного извратились. По идее, сам сниппет поиска может выводить результаты, но на деле он некорректно отображает связанные с ресурсом TV параметры. Точнее он их отображает только для первого найденного ресурса. Чтобы обойти это мы настроили «mSearch» так, чтобы он выдал только id найденных ресурсов, а их вывод и оформление мы осуществляем через «pdoResources».
Используемые плейсхолдеры и параметры:
- [[+mse.query]] — плейсхолдер выводит строку запроса.
- [[+total]] — выводит количество найденых ресурсов.
- [[+mse.error]] — выводит ошибки, например при отсутствии найденных ресурсов выведет об этом сообщение.
- &templates=`4` — параметр задаёт поиск только среди ресурсов с этими номерами шаблонов, через запятую. Если требуется искать по всему сайту, указываем все шаблоны. Так же вместо этого параметра можно использовать &parents, в котором потребуется указать список ресурсов-родителей, в которых будет производиться поиск.
- &returnIds=`1` — указывает на то, что требуется вернуть id найденных страниц.
- &tpl=`articleTpl` — параметр сниппета «pdoResources» — указывает чанк для оформления результата вывода одной страницы. В нём можно вывести название ресурса, TV параметры и.т.п. Например:
Создание формы поиска
Осталось передать созданной странице параметр, через который сниппет «mSearch» узнает, что именно надо искать. Для этого в любом месте сайта располагаем следующий код:
<form action="[[++site_url]][[~20]]" method="GET"> <input type="text" name="query" maxlength="40" value="" placeholder="Найти" /> <input type="submit" value="Найти" /> </form>Как вы наверно догадались, [[~20]] это id страницы, которую мы создали на предыдущем шаге. Вся задача этой формы — отправить ей методом «GET» или «POST» параметр «query». Можно приступать к тестированию, так как основная часть поиска на MODX закончена.
Вывод результатов с постраничной пагинацией
Если в выдаче очень много ресурсов, то целесообразно использовать постраничный вывод. Для этого можно использовать сниппет «getPage» или «pdoPage». Последний входит в состав дополнения «pdoTools», поэтому пример именно с ним:
Форма поиска должна обязательно передавать параметр «query» методом «GET».
realadmin.ru
Поиск на сайте MODx - SimpleSearch. Создание поиска по сайту: параметры, настройки.
Пакет для поиска на сайте — SimpleSearch настраиваем его.
Форма поиска, где в landing вставляем ID страницы вывода результатов поиска:
[ [!SimpleSearchForm? &landing=`123`]]
На страницу результатов поиска вставляем:
[ [!SimpleSearch]]
Можно использовать более сложную конструкцию:
[ [!SimpleSearchForm? &landing=`1` &tpl=`form_tpl`]]
В чанк form_tpl вставляем содержимое файла core/components/simplesearch/elements/chunks/searchform.chunk.tpl и дорабатываем шаблон так, как нам необходимо.
Вот код этого чанка на всякий случай:
<form action="[ [~[ [+landing]]]]" method="[ [+method]]"><fieldset><label for="[ [+searchIndex]]">[ [%sisea.search? &namespace=`sisea` &topic=`default`]]</label><input type="text" name="[ [+searchIndex]]" value="[ [+searchValue]]" /><input type="hidden" name="id" value="[ [+landing]]" /><input type="submit" value="[ [%sisea.search? &namespace=`sisea` &topic=`default`]]" /></fieldset></form>
Основные параметры и чанки SimpleSearch
чанки:
- tpl - вывод каждого отдельного пункта результата поиска
- containerTpl - отвечает за обертку всех результатов поиска
- pageTpl - отвечает за вывод отдельной кнопки страницы пагинации
- currentPageTpl - для управления кнопкой в пагинации активной страницы
- noResultsTpl - когда нет результатов поиска
Параметры:
- depth - глубина поиска (стандартно - 10)
- hideMenu - скрыть или показать ресурсы, с галочкой- не показывать в меню (0 -только видимые ресурсы, 1 - только скрытые, 2 - все показывает)
- docFields - области для поиска документов (pagetitle,longtitle,alias,description,introtext,content)
- perPage - количество результатов поиска на странице (стандартно 10)
- extractLength - кол-во символов для извлечения каждого результата поиска, обычно 200
- includeTVs - включить в поиск TV (если много тв, то замедляет поиск)
- pagingSeparator - какой сепаратор сипользовать для разделения плагинации, обычно - палочка
- ids - разделенный запятыми список идентификаторов документов, что бы искать только в них
- idType - оганичение для верхнего параметра - родители или дети (parents, documents)
- exclude - список id документов, через запятую, которые надо исключить для поиска
- contexts - контексты для поиска
- sortBy - разделенный запятыми список полей ресурсов для сортировки
- sortDir - разделенный запятыми список направлений (кол-во должно совпадать с кол-вом в верхнем параметре)
Комментарии (5)
about-cms.com
Топики с тегом поиск по сайту
Сегодня выложил обновленную сборку магазина ShopModxBox с новым shopModx на борту. Серьезно проработал код, пофиксил баги и улучшил функциональность. В основном изменения коснулись самого компонента shopModx, то есть простое его обновление уже добавит функциональности магазину, но все же и про шаблоны не стоит забывать.
Сразу дам ссылку на демо-сайт, где можно во фронте потестировать новый функционал: demo.shopmodx.ruНемного распишу основные новшества.
— Скидки. Да, теперь довольно хитрый скидки можно рулить на уровне плагина. Создаете плагин на событие OnShopModxOrderBeforeSave и пишите там, к примеру, вот такое:
switch($modx->event->name){ case 'OnShopModxOrderBeforeSave': $discount = 0; if($OrderProducts = $object->OrderProducts){ $total = 0; foreach($OrderProducts as $OrderProduct){ $price = $OrderProduct->Product->ProductData->price; if($OrderProduct->quantity >= 3){ $price = $price * 0.9; } $OrderProduct->price = $price; $total += $OrderProduct->quantity; } if($total >= 10){ $discount = 10; } } $object->discount = $discount; break; }
Уточню, что здесь происходит: $object — это объект текущего заказа. $object->OrderProducts — это объекты-связки Заказ-Товар. $OrderProduct->Product->ProductData — это данные самого товара.
В данном случае учитывается сразу два типа скидок: 1. Если одного товара более или равно 3 штуки в корзине, то на этот товар идет скидка 10% (*0.9). 2. Если в корзине всего более и равно 10 товаров, то еще и на весь заказ идет 10% скидка.
При этом не надо выполнять никаких сохранений. Если объект заказа по какой-то причине не будет сохранен (какие-то правила сработают), то и скидки эти не будут применены. Так же очень радует то, что скидки видно сразу при добавлении/удалении товаров, в том числе и просмотре корзины при изменении количества товаров.
— Поправил оплату Robokassa. Я был удивлен, что робокасса поменяла процесс тестирования и убрала старый тестовый сервер. Оказывается давно уже нельзя старым способом потестировать платежи. Но зато новый способ юолее прокаченный у нее теперь. Под новшества и обновился пакет. Так же в консоль закинул пару скриптов для отладки платежей.
— Вечные ЧПУ-ссылки на картинки товаров. Вот это главная и самая сложная фишка недавнего релиза пакета modxSite, про которую давно уже хотел написать, но руки еще не доходили. Главная и сложная после object-процессора, который используется новым shopModx-ом, и о котором я тоже пока ничего не написал, но это уже слишком сложно все и об этом будет отдельная статья.
Итак, давным-давно я писал вот эту заметку modxclub.ru/topics/absolyutnyie-ssyilki-bez-primesej-resajznutyix-kartinok-1268.html Там рассматривался способ формирования постоянных ссылок на изображения, чтобы не было всяких примесей в УРЛах и чтобы ссылки не бились при изменении параметров ресайзинга. Но был и есть в том методе один существенный минус: на каждый запрос к серверу дергался MODX. То есть каждый запрос картинки, если она не из кеша, отправлялся запрос на коннектор, там выполнялась инициализация всего MODX-а, который уже и обрабатывал запрос на эту картинку. Это решало вопросы с УРЛами, но в принципе не могло работать быстро. Вот чтобы это все решить был разработан довольно сложный инструмен, для качественной работы которого еще и требуется хитрая настройка сервера (чтобы сервер кешировал картинки от MODX-а и при повторных запросах отдавал из кеша, а не обращался опять к MODX-у). Все эти картинки уходят на процессор modxSite. Здесь тоже надо детальней рассмотреть: — type — тип изображения. Задается в настройках в формате JSON joxi.ru/LmGVQx0uR5JBnr Для каждого типа задаются стандартные параметры phpThumb, так что вы спокойно можете своих типов добавить. — resource_id — ID документа, от которого картинка должна быть получена. Имейте ввиду, что используется TV-поле с названием image. — alias — это алиас самого документа. Такой хак был использован для того, чтобы у картинки сразу был ЧПУ-адрес по адресу документа. Плюс к этому еще и проверка уникальности адреса идет по этому алиасу. Если запрошенный алиас не будет совпадать, то будет 404. Важный момент: в случае каких-либо ошибок процессор не просто 404 отдает, но еще и сообщение, так что отладка рулит. joxi.ru/L21Leyds6ZgOZmИ еще момент: при установке modxSite по умолчанию настройка modxsite.thumb_snippet пустая. Вот если она пустая, то используется родной phpThumb самого MODX-а. Настоятельно советую указывать именно какой-нибудь сниппет установленный, так как там есть траблы с заголовками кеширования, да и гибкость у тех получше.
Как работают подобные ссылки, мы разбирали еще в приведенной выше статье. Но как сделать так, чтобы сервер не обращался каждый раз к MODX-у за картинкой? Вот это уже новшество наших хостинг-технологий, о которых я уже не раз писал. В общем теперь для сайта можно указывать специальный параметр, который параллельно поднимает специальный кеш-хост на уровне нгинкса, и начинает работать следующая схема: 1. Идет обращение браузера к серверу за подобной картинкой. 2. Нгинкс перенаправляет этот запрос на кеш-хост. 3. Кеш-хост проверяет, есть ли у него в кеше такая картинка. Если есть, то сразу отдает ее из кеша. Если нет, то отправляет уже запрос MODX-у, тот возвращает картинку или ошибку. Если картинка была получена, она кешируется и в дальнейшем уже, пока есть кеш, не выполняется повторных запросов к MODX-у. Что интересно в этой схеме, кеш-сервер ловит заголовки срока кеширования от сайта и для картинки указывает именно этот срок, то есть если на стороне сайта будет указан один день жизни кеша, то и картинка будет храниться только день, после чего будет выполняться повторный запрос.
Вот, собственно, небольшая часть нововведений. Да, это не все, так как про все писать очень долго. Но так или иначе, сборка становится более стабильная и гибкая, соответствующая реальным потребностям. Так же в ближайших релизах мы планируем реализовать группы товаров и вариации, так, чтобы совсем по фэншую было. Так что не стесняйтесь, приобретайте подписку.
А чтобы было еще интересней приобретать подписку, объявляю акцию: до 7-го апреля при оплате подписки пэй-бэк составит не 50%, а 100%, то есть 5000 монеток упадет вам на баланс. 5000 монеток — это три часа моего времени на ваш проект. Три часа — это не только обновление более ранней версии движка до последней, но и плюшек еще можно всяких добавить.
modxclub.ru