Несколько фокусов с CMS Joomla! Изменение/снятие ограничений на длину строки поиска и его попутная доработка
- Опубликовано: 25.02.2017
- Автогенерация и отображение эскизов фотоальбомов модулем RokBox
- Доработка горизонтального меню-списка для динамического разворачивания подпунктов
- Единая кнопка «Сохранить изменения» для корзины Интернет-магазина VirtueMart
- Изменение/снятие ограничений на длину строки поиска и его попутная доработка
- Исправление ссылки на главную/домашнюю в горизонтальном меню старого стиля
- Модернизация сайтов на Joomla! старых версий 1.5/2.5 до актуальной 3.6
- Отображение заглушки «сайт в разработке» для всех и всего сайта для избранных
- Подсветка пункта меню типа «внешняя ссылка», или Как сделать ссылки на категории VirtueMart
- Преобразование адресов сайта в дружественные (SEF) для внешних нужд
- Реализация двуязычного сайта с постраничным переключением языков
- Удаление значка печати из списка статей при сохранении его на странице статьи
Изменение/снятие ограничений на длину строки поиска и его попутная доработка
Наверное, то, что будет описано ниже, под этим заголовком, менее всего подходит под общий принцип: «…потому как Интернет «безмолвствовал»… я и предполагаю опубликовать ниже…» – ибо в Интернете можно без особого труда найти статьи по этой проблеме. Например, на момент написания этих строк по запросу «ограничение поиска 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"/>