И последнее, надо закомментировать строчку

Сегодня урок о том как в 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", "$0", $string);

заменяем на

$string = preg_replace("/" . $quoteValue . "/iu", "$0", $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 — отвечает за вывод отдельной кнопки пагинации.

[[+text]]

  • [[+link]] - ссылка надокумент
  • [[+text]] - номер документа

— searchform-new — форма поиска

[[%sisea.search? &namespace=`sisea` &topic=`default`]]

— searchnoresults можно не переносить — там нет не какого оформления;

— searchresult-new — вывод каждого пункта результата.

[[+idx]]. [[+pagetitle]]

[[+extract]]

  • [[+idx]] - номер результата поиска в списке
  • [[+link:is=``:then=`[[~[[+id]]]]`:else=`[[+link]]`]]
  • [[+longtitle]] - расширенный заголовок
  • [[+pagetitle]] - заголовок
  • [[+extract]] - текст, по которому был найден этот документ

— searchresultli — по сути тоже можно не переносить.

— searchresults-new — обертка всех результатов

[[+resultInfo]]

[[+paging]] [[+results]] [[%sisea.result_pages? &namespace=`sisea` &topic=`default`]][[+paging]]

  • [[+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

Если есть вопросы, пишите задавайте их в комментариях.

Здравствуйте, дорогие друзья и коллеги! Хочу познакомить вас с отличным пакетом для организации поиска на сайте под системой Modx Revolution - SimpleSearch . Я пошагово объясню вам, как установить этот пакет на сайт и организовать поиск на сайте. Итак, приступим:

1. Для начала заходим в "Система" - "Управление пакетами"

2. Жмем кнопку "Загрузить дополнения"

3. Вбиваем в строку поиска - SimpleSearch, нажимаем "Enter" и нажимаем на кнопку "Загрузить"

4. Пойдет загрузка пакета

5. Нажимаем "Управление пакетами"

6. И жмем кнопку "установить" возле скаченного нами SimpleSearch

Жмем "Продолжить", а потом "ОК"

7. Создаем новый ресурс в корне дерева

Заголовок: Результаты поиска, ставим галочку "Не показывать в меню". Нажимаем на вкладку "Настройки" и убираем галочки с "Доступен для поиска", "Использовать HTML-редактор". Незабываем сохранить ресурс.

8. Далее заходим в новосозданный ресурс и в поле "Содержимое ресурса" вписываем [[!SimpleSearch]] 9. Запоминаем id этого ресурса, это страница вывода результатов поиска

В шаблон где находится сама форма поиска вставляем следующий код:

[[!SimpleSearchForm? &landing=`1` &tpl=`search`]]

где landing - это ID страницы вывода результатов поиска, а чанк search отвечает за саму форму поиска, который мы сейчас создадим

10. Затем копируем следующий код

это содержимое файла core/components/simplesearch/elements/chunks/searchform.chunk.tpl:

[[%sisea.search? &namespace=`sisea` &topic=`default`]]

в новый чанк с названием search и создаем тот шаблон отображения окна поиска, который нам необходим.

11. Далее решаем проблемы с кодировкой

Находим файл core/components/simplesearch/model/simplesearch/simplesearch.class.php в нем заменяем строку

$text = trim(preg_replace("/\s+/", " ", $this->sanitize($text)));

$text = trim(preg_replace("/\s+/u", " ", $this->sanitize($text)));

12. Затем заменяем строку $string = preg_replace("/" . $quoteValue . "/i", "$0", $string);

$string = preg_replace("/" . $quoteValue . "/iu", "$0", $string);

13. А так же заменяем строку $text = preg_replace("/(\[\[\+.*?\]\])/i", "", $text);

$text = preg_replace("/(\[\[\+.*?\]\])/iu", "", $text);

14. И последнее, надо закомментировать строчку if (!empty($str)) $this->searchString = strip_tags($this->modx->sanitizeString($str)); Основные чанки SimpleSearch

Поиск на сайте под управлением Modx Revolution готов. Он работает, можете убедиться в этом сами, но есть еще несколько моментов, которые пригодятся в работе с этим сниппетом. А именно редактирование чанков результатов поиска, его обертки, пагинации и так далее. Для начала Вам нужно понимать, что все чанки в формате.tpl находятся вот по этому пути: core/components/simplesearch/elements/chunks/. Ну а для того, чтобы с ними было легче работать выведем основные чанки в админку Modx. Вот их параметры

  • containerTpl
  • pageTpl
  • currentPageTpl

Ну а называть сами чанки мы уже будем как хотим.

Параметр tpl - чанк SimpleSearchResult

Параметр tpl отвечает за вывод каждого отдельного пункта результата поиска. Давайте создадим чанк и назовем его SimpleSearchResult . Скопируем в него код из файла core/components/simplesearch/elements/chunks/searchresult.chunk.tpl :

[[+idx]].