Логотип StingRay

Социальные сети
FacebookInstagramRSSTwitterYouTubeВ контактеОдноклассники
FacebookInstagramRSSTwitterYouTubeВ контактеОдноклассники
Силуэт человека

Несколько фокусов с CMS Joomla! Изменение/снятие ограничений на длину строки поиска и его попутная доработка


Изменение/снятие ограничений на длину строки поиска и его попутная доработка

Наверное, то, что будет описано ниже, под этим заголовком, менее всего подходит под общий принцип: «…потому как Интернет «безмолвствовал»… я и предполагаю опубликовать ниже…» – ибо в Интернете можно без особого труда найти статьи по этой проблеме. Например, на момент написания этих строк по запросу «ограничение поиска Joomla» в «Яндексе» первыми идут ссылки на 4 статьи по теме. Однако с момента возникновения у меня этой задачи и по сей день во всех этих статьях не было её полного решения: либо не снималось ограничение длины строки поиска снизу, либо охватывались не все места (например, длинная строка поиска принималась, но при этом отображалась обрезанной на странице результатов поиска). Ниже я предлагаю именно полное решение.

Итак, вкратце суть самой проблемы: штатный поиск Joomla! (mod_search + com_search) обладает странными ограничениями на строку поиска: она должна быть не меньше 3 и не больше 20 символов. Почему так, причём жёстко вшито в код системы, а не сделано настраиваемыми параметрами – совершенно непонятно. Предлагаемое ниже решение снимает ограничение на длину строки снизу (то есть искать можно будет и 1 символ) и увеличивает ограничение сверху до «классических» 255 символов, а также отключает вырезание каких-то особых ключевых слов из строки поиска и делает текст в неактивном поле поиска серым.

/administrator/components/com_search/helpers/search.php

function limitSearchWord(&$searchword)
 {
  $restriction = false;
  // limit searchword to 255 characters
  if (JString::strlen ($searchword) > 255)
   {
    $searchword = JString::substr ($searchword, 0, 254);
    $restriction = true;
   };
  // searchword must contain a minimum of 1 character
  if ($searchword && JString::strlen ($searchword) < 1)
   {
    $searchword = '';
    $restriction = true;
   };
  return $restriction;
 };

/components/com_search/views/search/tmpl/default_form.php

<input type="text" name="searchword" id="search_searchword" size="30" maxlength="255" value="<?php echo $this->escape($this->searchword);?>" class="inputbox"/>

/components/com_search/views/search/view.html.php (отключение вырезания каких-то особых ключевых слов из строки поиска)

// sanatise searchword
// if (SearchHelper::santiseSearchWord ($searchword, $state->get('match')))
//  {
//   $error = JText::_('IGNOREKEYWORD');
//  };

/modules/mod_search/tmpl/default.php (окрашивание текста в неактивном поле поиска в серый цвет)

$output = '<input name="searchword" id="mod_search_searchword" maxlength="'.$maxlength.'" alt="'.$button_text.'" class="inputbox'.$moduleclass_sfx.'" style="color: gray;" type="text" size="'.$width.'" value="'.$text.'" onblur="if(this.value==\'\') this.value=\''.$text.'\';" onfocus="this.style.color=\'black\';if(this.value==\''.$text.'\') this.value=\'\';"/>';

/modules/mod_search/mod_search.php

$width = intval ($params->get ('width', 255));
$maxlength = $width > 255 ? $width : 255;

/modules/mod_search/mod_search.xml

<param name="width" type="text" default="255" label="Box Width" description="Size of the search text box in characters"/>
Добавьте свой комментарий или войдите, чтобы подписаться/отписаться.
OpenId
Предпросмотр
Улыбка Подмигивание Дразнит Оскал Смех Огорчение Сильное огорчение Шок Сумасшествие Равнодушие Молчание Крутизна Злость Бешенство Смущение Сожаление Влюблённость Ангел Демон Задумчивость Рука-лицо Не могу смотреть Жирный Курсив Подчёркивание Зачёркивание Размер шрифта Гиперссылка Цитата
Загрузка…