Поиск по сайту на 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`!]

, здесь мы видим, что поиск располагается в документе с id 1179 (&landingPage=`1179`), что сниппет не использует AJAX функционал ( &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

Устанавливаем дополнения «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».

Используемые плейсхолдеры и параметры:

<div > <img src="[[+tv.img-news]]" alt="[[+tv.tags]]"> <a href="[[++site_url]][[~[[+id]]]]">[[+pagetitle]]</a> <p>[[+description]] ...</p> </div>

Создание формы поиска

Осталось передать созданной странице параметр, через который сниппет «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», поэтому пример именно с ним:

[[!pdoPage? &elementClass=`modSnippet` &element=`pdoResources` &parents=`0` &resources=`[[!mSearch? &templates=`4` &returnIds=`1`]]` &limit=`5` &includeTVs=`img-news,tags,HitsPage` &tpl=`articleTpl` ]] <div> [[!+page.nav]] </div>

Форма поиска должна обязательно передавать параметр «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

чанки:

Параметры:

Комментарии (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


Prostoy-Site | Все права защищены © 2018 | Карта сайта