Блоговый шаблон. Root — русский шаблон от российских разработчиков
Сегодня урок о том как в Modx Revolution реализовать поиск по сайту при помощи компонента SimpleSearch .
Основные параметрами сниппета :
имя | Описание | По умолчанию |
---|---|---|
tpl | Часть, которая используется для отображения содержимого каждого результата поиска. | SearchResult |
containerTpl | Блок, который используется для обертывания результатов поиска, разбивки на страницы и сообщения. | SearchResult |
useAllWords | Если true, будут найдены только результаты со всеми указанными словами поиска. | 0 |
maxWords | Максимальное количество слов для включения в поиск. Только применимо, если useAllWords выключен. | 7 |
minChars | Минимальное количество символов для запуска поиска. | 3 |
searchStyle | Чтобы выполнить поиск с помощью «частичного» поиска LIKE или поиска соответствия «соответствие», основанного на релевантности. | partial |
andTerms | Нужно ли добавлять логическое И между словами. | 1 |
matchWildcard | Включить поиск подстановочных знаков. Установите значение false, чтобы выполнить точный поиск по поисковому запросу. | 1 |
docFields | Список отдельных полей документов для поиска. | pagetitle, longtitle, description, introtext, alias, ,content |
fieldPotency | Оценка и сортировка результатов | |
perPage | Кол-во результатов поиска для одной страницы. | 10 |
showExtract | Показывать ли вырез содержимого каждого результата поиска. | 1 |
extractSource | Позволяет пользователю определять, откуда происходит извлечение. Если значением этого параметра является имя поля ресурса (включая ТВ, если установлено & includeTVs), то это поле ресурса используется для выписки. В противном случае параметр берется как имя выполняемого фрагмента. Фрагмент передается массивом ресурсов в качестве параметров. Если у этого имени нет фрагмента, то экстракт будет пустым. | content |
extractLength | Количество символов для извлечения из содержимого для каждого результата. | 200 |
extractEllipsis | Строка, используемая для переноса результатов извлечения. По умолчанию используется многоточие. | … |
includeTVs | Указывает, должны ли значения TemplateVar быть включены в свойства, доступные для каждого шаблона ресурса. По умолчанию 0. Включение этого параметра может замедлить работу, если у вас много телевизоров. | 0 |
processTVs | Указывает, должны ли значения TemplateVar быть отображены так, как они были бы на суммированном ресурсе.
По умолчанию 0. Некоторые примечания: к
ТВ можно получить доступ по имени своего ТВ [[+ myTV]] По умолчанию SimpleSearch не использует префикс, например [[+ tv.myTV]] НЕ будет отображаться. ТВ обрабатываются во время индексирования для поиска Solr, поэтому здесь нет необходимости делать это. | 0 |
highlightResults | Укажите или не выделите поисковый запрос в результатах. | 1 |
highlightClass | Имя класса CSS для добавления к выделенным условиям в результатах. | sisea-highlight |
highlightTag | Тег html для обертывания выделенного термина в результатах поиска. | span |
pageTpl | Часть, используемая для ссылки на страницы. | PageLink |
currentPageTpl | Блок, используемый для текущей ссылки на странице. | CurrentPageLink |
pagingSeparator | Сепаратор (разделитель) для использования между ссылками на страницы. | | |
ids | Список ID документов, через запятую, для ограничения поиска | |
idType | Тип ограничения для параметра ids. Если родители, то все элементы идентификаторов будут добавлены в параметр ids для поиска. Если документы, будут использоваться только указанные идентификаторы в поиске. | parents |
exclude | Список идентификаторов ресурсов, через запятую, для исключения из поиска, например. «10,15,19». Это исключает ресурсы с идентификаторами «10», «15» или «19». | |
depth | Если для idtype задано значение для родителей, глубина вниз по дереву ресурсов, которая будет искать с указанными идентификаторами. | 10 |
hideMenu | Нужно ли возвращать Ресурсы, на которых есть hidemenu. 0 показывает только видимые ресурсы, 1 показывает только скрытые ресурсы, 2 показывает оба. | 2 |
contexts | Контексты поиска. По умолчанию используется текущий контекст, если ни один из них не указан явно. | |
searchIndex | Имя параметра REQUEST, который будет использоваться поиском. | search |
offsetIndex | Имя параметра REQUEST, используемого для смещения страницы. | sisea_offset |
placeholderPrefix | Префикс для глобальных заполнителей, заданный снипетом. | sisea. |
toPlaceholder | Нужно ли устанавливать вывод для прямого возврата или установить в заполнитель с именем этого свойства. | |
urlScheme | Необходимая схема URL: http, https, full, abs, relative и т.д. См. документацию $modx->makeUrl(). Это используется, когда генерируются ссылки для разбивки на страницы. | |
customPackages | Установите для поиска пользовательских таблиц, загрузив их пакет. Подробности смотрите ниже. | |
postHooks | Перечисленный запятыми список хуков для запуска, которые могут добавлять граненные множества к конечным результатам. | |
activeFacet | Текущая активная грань. Оставьте это самостоятельно, если вы не хотите, чтобы результат показывался с нестандартного аспекта, полученного через postHook. | default |
facetLimit | Количество результатов non-active-facet для отображения на главной странице результатов. | 5 |
sortBy | Список полей ресурсов, через запятую, для сортировки результатов. Оставьте поле пустым для сортировки по релевантности и оценке. | |
sortDir | Список инструкций для сортировки результатов, разделенных запятыми. Должно соответствовать количеству элементов в параметре sortBy. | DESC |
noResultsTpl | Чанк для использования, если результаты поиска не найдены. |
Реализация поиска на сайте MODX
1. SimpleSearch
2. Решаем различные проблемы с кодировками и т.д.
Идем в core/components/simplesearch/model/simplesearch/simplesearch.class.php в нем заменяем следующие строки:
строку 297:
$text = preg_replace("/(\[\[\+.*?\]\])/i", "", $text);
заменяем на
$text = preg_replace("/(\[\[\+.*?\]\])/iu", "", $text);
строку 311:
$text = trim(preg_replace("/\s+/", " ", $this->sanitize($text)));
заменяем на
$text = trim(preg_replace("/\s+/u", " ", $this->sanitize($text)));
строку 413:
$string = preg_replace("/" . $quoteValue . "/i", "<".$tag." class="".$cls."">$0".$tag.">", $string);
заменяем на
$string = preg_replace("/" . $quoteValue . "/iu", "<".$tag." class="".$cls."">$0".$tag.">", $string);
закоментируем строку 179:
If (!empty($str)) $this->searchString = strip_tags($this->modx->sanitizeString($str));
т.е. должно получиться вот так
/*if (!empty($str)) $this->searchString = strip_tags($this->modx->sanitizeString($str)); */
3. Делаем копии всех стандартных чанков которые лежат в директории core/components/simplesearch/elements/chunks/
Создаем новые чанки с теми же именами и префиксом -new, и тем же содержимым (только они уже не на основе файлов, а обычные), для чего все это поймете дальше.
Например, берем первый чанк currentpagelink.chunk.tpl и создаем новый чанк currentpagelink-new (элементы — создать новый чанк) ну и переносим в него код.
[[+text]]
Отвечает за управления кнопкой в пагинации для активной страницы.
И таким же образом создаем остальные чанки:
— pagelink-new — отвечает за вывод отдельной кнопки пагинации.
- [[+link]] - ссылка надокумент
- [[+text]] - номер документа
— searchform-new — форма поиска
— searchnoresults можно не переносить — там нет не какого оформления;
— searchresult-new — вывод каждого пункта результата.
[[+idx]]. [[+pagetitle]]
[[+extract]]
- [[+idx]] - номер результата поиска в списке
- [[+link:is=``:then=`[[~[[+id]]]]`:else=`[[+link]]`]]
- [[+longtitle]] - расширенный заголовок
- [[+pagetitle]] - заголовок
- [[+extract]] - текст, по которому был найден этот документ
— searchresultli — по сути тоже можно не переносить.
— searchresults-new — обертка всех результатов
[[+resultInfo]]
- [[+resultInfo]] - инф-я о кол-ве найденных документов и по какому словосочетанию.
- [[+sisea.result_pages? &namespace=`sisea` &topic=`default`]]
Вывод фразы «Страницы с результатами поиска:»
- [[+paging]] - пагинация
- [[+results]] - результаты поиска
После всего проделанного у вас должно получиться 5 новых чанков.
4. Создаем новый документ на который будут выводиться результаты поиска
Заголовок: Результаты поиска, ставим галку «Не показывать в меню». В «Настройки» и убираем галки с «Доступен для поиска», «Использовать HTML-редактор». Сохраняем. Обновляем страницу и прописываем в содержимое
[[!SimpleSearch? &tpl=`searchresult-new` &containerTpl=`searchresults-new` &pageTpl=`pagelink-new` ¤tPageTpl=`currentpagelink-new`]]
чанки оформлении которые создали на 3 шаге (внешний вид).
Если хотите чтобы в результах поиска были картинки, то дописываем в конце этого вывода
&includeTVs=`1` &processTVs=`1`
В чанке searchresult картинку можно вызывать так: [[+img]].
5. Выводим форму поиска
На месте где нужно вывести форму поиска, пишем
[[!SimpleSearchForm? &landing=`11` &tpl=`searchform-new`]]
Здесь landing — id страницы с результатами поиска, в tpl — чанки оформления формы, который создали на 3 шаге.
Делали 4 и 5 шаг мы для того, чтобы можно было редактировать на свое усмотрение внешнее оформление: самой формы, результатов поиска и т.д. не влезая в исходники. А стандартное оформление достаточно печальное, вот так к примеру выглядит стандартная форма поиска.
6. Меняем оформление.
Описывать как оформить все чанки не вижу смысла, для примера приведу новое оформление для чанка searchform-new
Это обычная стандартная разметка формы от бутстрап 3, на сайте выглядит так:
Официальная документация здесь: docs.modx.com/extras/revo/simplesearch
Если есть вопросы, пишите задавайте их в комментариях.