И последнее, надо закомментировать строчку
Сегодня урок о том как в 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 | Чанк для использования, если результаты поиска не найдены. |
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]].