MODx/Встроенные сниппеты/AjaxSearch

Информация

править

Назначение: позволяет пользователям производить поиск по сайту, не покидая страницы, на которой они находятся. Результаты возвращаются посредством запроса ajax и выводятся в окно результата ниже формы поискового запроса. (Если у пользователя отключен JavaScript, результаты выводятся в отдельном окне)

Пример вызова в шаблоне

править

[!AjaxSearch? &AS_showResults=`0` &AS_landing=`17` &showMoreResults=`1` &moreResultsPage=`17`!]

Параметры:

править
  • &ajaxSearch [ 0 | 1 ] (по умолчанию — 1) — включен ли AJAX.
  • &ajaxSearchType [ 0 | 1 ] (по умолчанию — 0) — ‘1’ включает «живой» поиск.
  • &ajaxMax [целое] (по умолчанию — 5) — число результатов, выводимых при использовании ajax.
  • &grabMax [целое] (по умолчанию — 6) — число результатов, выводимых без использовании ajax.
  • &showMoreResults [ 0 | 1 ] (по умолчанию — 1) — показывать ссылку «все результаты» при использовании AJAX.
  • &moreResultsPage [целое] (по умолчанию — 1) — ID страницы «все результаты». Эта страница должна также содержать вызов сниппета.
  • &addJscript [ 0 | 1 ] (по умолчанию — 1) — автоматическое подключение к странице библиотеки MooTools.
  • &AS_showForm [ 0 | 1 ] (по умолчанию — 1) — показывать форму запроса вместе с результатами.
  • &AS_landing [ 0 | 1 ] (по умолчанию — 1) — ID документа результатов поиска, когда не используется ajax.
  • &AS_showResults [ 0 | 1 ] (по умолчанию — 1) — показывать результаты вместе со сниппетом, если не используется ajax.
  • &extract [ 0 | 1 ] (по умолчанию — 1) — показывать выдержки из найденных страниц, включая подсветку ключевых слов.

Внимание!Если у вас modx 1.8.4 то

  • AS_showForm => showInputForm
  • AS_landing => landingPage
  • AS_showResults => showResults

Стили, определяющие вид панели поиска:

  • #ajaxSearch_form
  • #ajaxSearch_input
  • #ajaxSearch_submit
  • #ajaxSearch_output
  • .ajaxSearch_paging
  • .AS_ajax_result
  • .AS_ajax_resultLink
  • .AS_ajax_resultDescription
  • .AS_ajax_more

Пример использования

править

В AjaxSearch все достаточно просто. Вызываешь в нужных местах сниппет и, используя два параметра &AS_showResults и &AS_showForm, заставляешь его показывать форму/результаты.

Например, если надо, чтобы на каждой странице была форма для поиска, а результаты открывались на отдельной странице, то надо так: Создать страницу, где будут результаты поиска. На ней вызывать сниппет с параметром &AS_showResults=`1` и, если надо форму поиска, то добавляешь &AS_showForm=`1` и &AS_landing=`[*id*]`. В шаблоне страницы в месте для формы поиска вставляешь вызов сниппета AjaxSearch с параметром &AS_showForm=`1`, &AS_showResults=`0` и &AS_landing=`указываешь ID документа, для результатов поиска`. Выше описан вызов поиска сниппетом AjaxSearch без использования технологии Ajax, поэтому во все вызовы надо добавить параметр &ajaxSearch = `0`.

Проблема с языком

править

Вопрос:Как сделать чтобы на кнопке в форме поиска вместо "Go!" выводилось "Поиск"?

Ответ: Для начала просто настроить используемый язык:

&language=`russian-UTF8`, или: &language=`russian`

Если это не помогает то можно воспользоваться либо готовым переводом, либо перевести самостоятельно (Взять стандартный english.inc.php , перевести и положить в папку с языками (желательно с другим именем)). Языковые файлы находятся тут: assets/snippets/AjaxSearch/lang . (Соответственно попытка использовать &language=`russian-uft8` целесообразна только в том случае если в папке /lang есть файл вида "russian.inc.php" или "russian-utf8.inc.php" )

В самом скрипте есть 2 строчки.

Первая:

#include default language file include($snipPath."AjaxSearch/lang/english.inc.php");

Здесь написано, что языком по умолчанию будет английский. Точнее язык по умолчанию берётся из файла "english.inc.php". По желанию можно заменить на родной, заменив текущее имя на нужный файл. (Для начала убедитесь, что такой файл существует в языковой папке.)

Вторая:

#include other language file if set. $as_language = isset($language) ? $language : $modx->config['manager_language'];

if($as_language!="english" && $as_language != ) {

if(file_exists($snipPath ."AjaxSearch/lang/".$as_language.".inc.php"))

include $snipPath ."AjaxSearch/lang/".$as_language.".inc.php";

Здесь написано что скрипт примет к сведению все языковые файлы, находящиеся по указанному выше пути.

Можно использовать этот перевод:

<?php

/* english.inc.php - for AjaxSearch 1.5

Created by: KyleJ (kjaebker@muddydogpaws.com)

Created on: 01/22/07

Description: Language strings for AjaxSearch \*/

$_lang['as_resultsIntroFailure'] = 'Нет результатов. Попробуйте изменить запрос.';

$_lang['as_searchButtonText'] = 'Поиск!';

$_lang['as_boxText'] = 'Поискать здесь...';

$_lang['as_introMessage'] = 'Введите ключевое слово(а) для поиска.';

$_lang['as_resultsFoundTextSingle'] = '%d результатов найдено для "%s".';

$_lang['as_resultsFoundTextMultiple'] = '%d результатов найдено для "%s".';

$_lang['as_paginationTextSinglePage'] = ;

$_lang['as_paginationTextMultiplePages'] = 'Страница результатов: ';

$_lang['as_moreResultsText'] = 'Нажмите чтобы увидеть все результаты.';

$_lang['as_moreResultsTitle'] = 'Больше';


?>

Для этого скопируйте всё что выделено зелёным, откройте не редактирование english.inc.php и (предварительно сделав резервную копию, замените тело документа. Затем сохраните в необходимой кодировке. Вышеописанное можно (как правило) сделать через встроенный редактор в панель управления хостингом.

Примечание

править

Для работы кода этого сниппета в шаблон необходимо включить вызов javascript-библиотеки MooTools. Это будет сделано автоматически, если параметр &addJscript не установлен в 0.

Отдельный момент про кодировку в веб сервере apache. В файл .htaccess лучше явным образом указать кодировку: AddDefaultCharset utf-8.

Ссылки

править

Modx wiki - ajax search на английском