
Хак для
DLE Понятный быстрый поиск - это улучшение сделает возможным распознавание любых введенных букв при поиске, даже если вы пишите при неправильной раскладке клавиатуры. Вероятно многие пользователи движка DataLife Engine сталкивался с тем, что в быстром поиске на сайте DLE при неправильной раскладке языка клавиатуры вместо ожидаемого результата вы получали кракозябры в поисковой строке или отсутствие результата.
Этот
хак dle поможет вам и вашим посетителям не испытывать никаких проблем и находить в любом случаи необходимый материал. Основная причина в стандартном скрипте дле нет полезной вещи как транслит, бывает вводишь английскими буквами русское слова, дабы поиск смог понять, но получаешь совершенно другое или результат не найдено совпадений.
Хак для ДЛЕ Понятный быстрый поиск установка в 5 секунд, всего две вставки
открываем /engine/ajax/search.php
____находим строчку
if( $query == "" ) die(); $buffer = "";
}
____ниже нее вставляем
function translitEnRu($string) {
$converter = array(
'`' => 'ё', 'q' => 'й', 'w' => 'ц', 'e' => 'у',
'r' => 'к', 't' => 'е', 'y' => 'н', 'u' => 'г',
'i' => 'ш', 'o' => 'щ', 'p' => 'з', '[' => 'х',
']' => 'ъ', 'a' => 'ф', 's' => 'ы', 'd' => 'в',
'f' => 'а', 'g' => 'п', 'h' => 'р', 'j' => 'о',
'k' => 'л', 'l' => 'д', ';' => 'ж', ''' => 'э',
'z' => 'я', 'x' => 'ч', 'c' => 'с', 'v' => 'м',
'b' => 'и', 'n' => 'т', 'm' => 'ь', ',' => 'б',
'.' => 'ю',
'~' => 'Ё', 'Q' => 'Й', 'W' => 'Ц', 'E' => 'У',
'R' => 'К', 'T' => 'Е', 'Y' => 'Н', 'U' => 'Г',
'I' => 'Ш', 'O' => 'Щ', 'P' => 'З', '{' => 'Х',
'}' => 'Ъ', 'A' => 'Ф', 'S' => 'Ы', 'D' => 'В',
'F' => 'А', 'G' => 'П', 'H' => 'Р', 'J' => 'О',
'K' => 'Л', 'L' => 'Д', ':' => 'Ж', '"' => 'Э',
'Z' => 'Я', 'X' => 'Ч', 'C' => 'С', 'V' => 'М',
'B' => 'И', 'N' => 'Т', 'M' => 'Ь', '<' => 'Б',
'>' => 'Ю',
);
return strtr($string, $converter);
}
____находим строчку
(short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%')
указана начальная часть строки
____заменяем на этот код
(short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%' OR short_story LIKE '%{$queryT}%' OR full_story LIKE '%{$queryT}%' OR xfields LIKE '%{$queryT}%' OR title LIKE '%{$queryT}%')
}
////////найти
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");
////////заменить
$queryT = translitEnRu($query);
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%' OR short_story LIKE '%{$queryT}%' OR full_story LIKE '%{$queryT}%' OR xfields LIKE '%{$queryT}%' OR title LIKE '%{$queryT}%') ORDER by date DESC LIMIT 5");
Все готово ...
Можно сделать по другому, чтобы ограничить поиск только по заголовку:
(title LIKE '%{$query}%' OR title LIKE '%{$queryT}%')
Ну или с short_story:
(short_story LIKE '%{$query}%' OR title LIKE '%{$query}%' OR short_story LIKE '%{$queryT}%' OR title LIKE '%{$queryT}%')
На днях пользователь
reanimator692 для DLE 9.5-10 прислал ещё один рабочий вариант с алфавитом кириллицы и латиницы 08.09.2014
Делаем быстрый поиск, позволяющий распознавать все введенные символыНаверное многие из Вас (вебмастера) сталкивались с тем что при поиске (на своем сайте DLE) чего либо, язык клавиатуры может оказаться в другом раскладе и место ожидаемого результата Вы замечаете кракозябры в поисковой строке, этот хак поможет Вам и Вашим посетителям навсегда избавится от этого.
И так начнем
1.0 Открываем /engine/ajax/search.php
находим строчку
if( $query == "" ) die();
$buffer = "";
ниже нее вставляем
function translit_en($string) {
$letter = array(
'`' => 'ё', 'q' => 'й', 'w' => 'ц', 'e' => 'у', 'r' => 'к', 't' => 'е', 'y' => 'н', 'u' => 'г',
'i' => 'ш', 'o' => 'щ', 'p' => 'з', '[' => 'х', ']' => 'ъ', 'a' => 'ф', 's' => 'ы', 'd' => 'в',
'f' => 'а', 'g' => 'п', 'h' => 'р', 'j' => 'о', 'k' => 'л', 'l' => 'д', ';' => 'ж', ''' => 'э',
'z' => 'я', 'x' => 'ч', 'c' => 'с', 'v' => 'м', 'b' => 'и', 'n' => 'т', 'm' => 'ь', ',' => 'б',
'.' => 'ю',
'~' => 'Ё', 'Q' => 'Й', 'W' => 'Ц', 'E' => 'У', 'R' => 'К', 'T' => 'Е', 'Y' => 'Н', 'U' => 'Г',
'I' => 'Ш', 'O' => 'Щ', 'P' => 'З', '{' => 'Х', '}' => 'Ъ', 'A' => 'Ф', 'S' => 'Ы', 'D' => 'В',
'F' => 'А', 'G' => 'П', 'H' => 'Р', 'J' => 'О', 'K' => 'Л', 'L' => 'Д', ':' => 'Ж', '"' => 'Э',
'Z' => 'Я', 'X' => 'Ч', 'C' => 'С', 'V' => 'М', 'B' => 'И', 'N' => 'Т', 'M' => 'Ь', '<' => 'Б',
'>' => 'Ю'
);
return strtr($string, $letter);
}
function translit_ru($string) {
$letter = array(
'ё' => '`', 'й' => 'q', 'ц' => 'w', 'у' => 'e', 'к' => 'r', 'е' => 't', 'н' => 'y', 'г' => 'u',
'ш' => 'i', 'щ' => 'o', 'з' => 'p', 'х' => '[', 'ъ' => ']', 'ф' => 'a', 'ы' => 's', 'в' => 'd',
'а' => 'f', 'п' => 'g', 'р' => 'h', 'о' => 'j', 'л' => 'k', 'д' => 'l', 'ж' => ';', 'э' => ''',
'я' => 'z', 'ч' => 'x', 'с' => 'c', 'м' => 'v', 'и' => 'b', 'т' => 'n', 'ь' => 'm', 'б' => ',',
'.' => 'ю',
'Ё' => '~', 'Й' => 'Q', 'Ц' => 'W', 'У' => 'E', 'К' => 'R', 'Е' => 'T', 'Н' => 'Y', 'Г' => 'U',
'Ш' => 'I', 'Щ' => 'O', 'З' => 'P', 'Х' => '{', 'Ъ' => '}', 'Ф' => 'A', 'Ы' => 'S', 'В' => 'D',
'А' => 'F', 'П' => 'G', 'Р' => 'H', 'О' => 'J', 'Л' => 'K', 'Д' => 'L', 'Ж' => ':', 'Э' => '"',
'Я' => 'Z', 'Ч' => 'X', 'С' => 'C', 'М' => 'V', 'И' => 'B', 'Т' => 'N', 'Ь' => 'M', 'Б' => '<',
'>' => 'Ю'
);
return strtr($string, $letter);
}
далее находим
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");
меняем на
Варианты поиска
поиск только по заголовку
$en = translit_en($query);
$ru = translit_ru($query);
$db->query( "SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND (title LIKE '%{$query}%' OR title LIKE '%{$en}%' OR title LIKE '%{$ru}%') ORDER by date DESC LIMIT 5" );
поиск по заголовку и краткому описанию
$en = translit_en($query);
$ru = translit_ru($query);
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND (short_story LIKE '%{$query}%' OR title LIKE '%{$query}%' short_story LIKE '%{$en}%' OR title LIKE '%{$en}%' short_story LIKE '%{$ru}%' OR title LIKE '%{$ru}%') ORDER by date DESC LIMIT 5");
поиск по заголовку, краткому & полному описанию
$en = translit_en($query);
$ru = translit_ru($query);
$db->query( "SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1" . $this_date . " AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR title LIKE '%{$query}%' OR short_story LIKE '%{$en}%' OR full_story LIKE '%{$en}%' OR title LIKE '%{$en}%' OR short_story LIKE '%{$ru}%' OR full_story LIKE '%{$ru}%' OR title LIKE '%{$ru}%') ORDER by date DESC LIMIT 5" );
На этом все, установка завершена !
Версия
DataLife Engine: 9.x - 10.x на свежей версии
DLe 10.1Дополнил: vitnet, Sander
Будет добавлять +1 запрос в БД, если по русскому языку не будет найден результат, так как будет происходить проверка по транслиту.
Автор: NaN Дополнил: vitnet, Sander скачать в текстовом файле исходники установки
Hak-dlya-DLE-Ponyatnyy-bystryy-poisk.rar [81,74 Kb] (cкачиваний: 199)