Дата публикации
3 Июня 2019
Дата изменения
30 Апреля 2021
Уникальных просмотров
2.275

Оглавление

Сниппет для вывода формы поиска с автодополнениями.

Из-за специфики работы через Ajax должен вызываться некэшированным.

Параметры

Название По умолчанию Описание
&pageId Id страницы, на которую будет отправлен поисковый запрос. По умолчанию — текущая страница.
&tplForm tpl.mSearch2.form Чанк с HTML формой для вывода, обязательно должен содержать «class="msearch2»» в теге «\».
&tpl tpl.mSearch2.ac Чанк оформления для каждого результата
&element mSearch2 Сниппет, который будет вызываться для вывода результатов работы. По умолчанию — mSearch2.
&limit 5 Лимит выборки результатов
&autocomplete results Настройка автодополнения. Возможные варианты: «results» — поиск по сайту (для вывода результатов будет вызван сниппет, указанный в &element), «queries» — поиск по таблице запросов, «0» — выключить автодополнение.
&queryVar query Имя переменной для получения поискового запроса из «$_REQUEST». По умолчанию — «query».
&minQuery 3 Минимальная длина поискового запроса.
&fields Список проиндексированных полей ресурса, через запятую, в которых нужно искать. Вы можете также указать вес для каждого поля, через запятую: &fields=`pagetitle: 5,content: 3,comment: 1`. По умолчанию используется системная настройка mse2_index_fields.
&onlyIndex false Включить режим поиска только по индексу слов, и отключить дополнительные результаты, найденные простым поиском через LIKE.

Автодополнение

Основная функция сниппета — реализация автодополнений к набираемым запросам. Есть 2 режима:

results

Поиск производится стандартным алгоритмом: по словарному индексу с уточнениями. Затем id найденных страниц передаются в сниппет, указанный в параметре & element и уже он выводит результаты.

Вы можете указать любые параметры этому сниппету, чтобы он выводил только подходящие вам результаты. Например, документы из определенного контейнера, категории товаров и т. д.

То есть, поиск выдаёт все подходящие страницы и вы указываете, что именно выводить сниппетом. Получается, что этот режим не «дополняет» ваш запрос, а уже выводит готовые результаты. Поэтому при выборе пункта из списка вы сразу на него перейдёте.

queries

А вот этот режим уже настоящее дополнение запросов. Он проводит простенький поиск по истории запросов, которая отображается у вас системе управления.

То есть, он выводит подходящие запросы, которые уже искали другие пользователи, и нашли. Запросы с нулевым количеством результатов не будут показаны — от них никакого толку.

При выборе запроса из списка, он будет вставлен в форму и она сразу отправится.

Скрипты и стили

В работе сниппет использует скрипты и стили указанные с системных настройках:

Для нормальной работы скриптам нужно знать, какие параметры были указаны при вызове сниппета, поэтому дополнительно на страницу регистрируются важные настройки, типа &minQuery, &queryVar и &autocomplete.

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

Для реализации функционала автодополнений используется jQueryUI.autocomplete. Если он еще не подключен у вас на сайте, mSearchForm загрузит его самостоятельно. Autocomplete автоматически применяется ко всем формам на странице, у которых указан «class="msearch2"».

Примеры

Обычный вызов сниппета:

/* modParser */
[[!mSearchForm]]

/* pdoParser */
{$_modx->runSnippet('!mSearchForm')}

mSearchForm передаёт все полученные параметры в сниппет, указанный в &element, а значит, вы можете указывать такие значения:

/* modParser */
[[!mSearchForm?
    &element=`pdoResources`
    &includeTVs=`image,file`
]]

[[!mSearchForm?
    &element=`msProducts`
    &includeThumbs=`120x90`
    &where=`{"Data.price:>":0}`
]]

/* pdoParser */
{$_modx->runSnippet('!mSearchForm', [
'element' => 'pdoResources',
'includeTVs' => 'image,file'
])}

{$_modx->runSnippet('!mSearchForm', [
'element' => 'msProducts',
'includeThumbs' => '120x90',
'where' => '{"Data.price:>=": 0}',
])}

Благодарность автору

Если по какой-либо причине вы хотите поблагодарить автора данного ресурса, вы можете это сделать одним из удобных для вас способов ниже.

Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.

Время работы: 0,1429 s
Время запросов: 0,1429 s
Количество запросов: 27
Источник: cache