Для начала нужно поставить плагин "SimpleSearch". Сделаем форму поиска, в этом примере мы будем рассматривать выпадающую форму поиска при клике на пункт меню "поиск". Пишем разметку и стили.
HTML
<a class="nav-link" href="" data-toggle="collapse" data-target="#collapse001" aria-expanded="false">ПОИСК</a>
<div id="collapse001" class="search-form collapse" style="">
<form class="simplesearch-search-form" action="" method="get" id="search_form">
<input type="text" class="search-input" name="search" value="">
<input type="submit" class="search-btn button-search" value="Поиск">
</form>
</div>
CSS
.search-form {
position: absolute;
right: 5px;
top: 50px;}
.search-form input.search-input {
outline: none;
font-family: "Roboto-Regular";
width: 350px;
border: 2px solid #ff9900;
border-radius: 5px;
padding: 3px 10px;
box-shadow: 0 0 3px #000;}
.search-form input.search-input:focus {
box-shadow: 1px 1px 13px #ff9900;}
.search-form input.search-btn {
width: 80px;
font-family: "Roboto-Bold";
border: 3px solid #393737;
background-color: #ff9900;
text-transform: uppercase;
transition: 0.5s;}
.search-form input.search-btn:hover {
box-shadow: 1px 1px 13px #ff9900;
transition: 0.5s;}
Далее создаем чанк формы поиска в ModX, рекомендую создать категорию "Формы поиска" и поместить его туда. Чанк называем "SearchFormTpl". И приводим HTML чанка к такому виду (символ "((" заменяем на две квадратные скобки):
HTML SearchFormTpl
<form class="simplesearch-search-form" action="((~((+landing))))" method="((+method))" id="search_form">
<input type="text" class="search-input" name="((+searchIndex))" id="((+searchIndex))" value="((+searchValue))">
<input type="submit" class="search-btn button-search" value="Поиск">
</form>
Создаем шаблон для страницы "Результаты поиска".
Шаблон "Результаты поиска" (символ "((" заменяем на две квадратные скобки)
<!DOCTYPE html>
<html lang="ru">
<base href="((++site_url))" />
(($HEAD))
<body>
(($HEADER))
<div class="container-page-001 overlay-black">
<div class="container-page-001-content">
<h1 class="container-page-001__title">Поиск по сайту на ModX</h1>
<nav aria-label="breadcrumb">
(($BREADCRUMBS))
</nav>
</div>
</div>
<div class="container-page-003">
<div class="container-page-003-content">
((*content))
((!SimpleSearch?))
</div>
</div>
(($FOOTER))
(($SCRIPT))
</body>
</html>
Создаем страницу "Результаты поиска" и прицепляем ее у только что созданному шаблону для этой страницы.
Теперь, там где у нас на сайте должна располагаться форма поиска ставим вот такой вот код:
Код (символ "((" заменяем на две квадратные скобки)
((SimpleSearchForm?
&tpl=`SearchFormTpl`
&landing=`36`
))
В "tpl" указывая чанк формы поиска, в "landing" указывая id страницы поиска. На этом все, форма поиска оп сайту работает. Далее стилизуем результаты поиска и пагинацию на странице поиска. В результатах поиска мы можем выделить искомый текст, для этого добавим небольшой css в свои стили.
CSS
.simplesearch-highlight {
font-weight: 700;
font-style: italic;
color: #393737;}
Те ресурсы, в которых не нужно делать поиск, убираем галочку "Доступен для поиска" в настройках ресурса.
Имя | Описание | По умолчанию |
---|---|---|
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. Некоторые примечания: к ТВ можно получить доступ по имени своего ТВ По умолчанию SimpleSearch не использует префикс, например НЕ будет отображаться. ТВ обрабатываются во время индексирования для поиска 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 | Чанк для использования, если результаты поиска не найдены. |
Имя | Описание | По умолчанию |
---|---|---|
tpl | Чанк, который будет использоваться для отображения формы поиска. | SearchForm |
landing | Ресурс, на котором вызывается сниппет SimpleSearch, который отображает результаты поиска. | |
searchIndex | Имя параметра REQUEST, который будет использовать поиск. | search |
method | Следует ли отправлять поиск через POST или GET. | GET |
toPlaceholder | Укажите, следует ли установить вывод для прямого возврата или установить заполнитель с этим именем свойства. |