Мы в твиттере Мы в телеграме!

Провеббер » DataLife Engine » DLE хаки » Понятный быстрый поиск

Понятный быстрый поиск

Данный материал предоставлен сайтом ProWebber.cc исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Скачать бесплатно Понятный быстрый поиск.

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


и так начнём...

открываем /engine/ajax/search.php

///////находим строчку
    set_vars( "category", $cat_info );
    $db->free();
}


///////ниже дописываем
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);

}


далее.......

///////находим строчку
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1"
указана начальная часть строки

///////ниже дописываем
if (!$db->get_row()) {
    $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 '%{$queryT}%' OR full_story LIKE '%{$queryT}%' OR xfields LIKE '%{$queryT}%' OR title LIKE '%{$queryT}%') ORDER by date DESC LIMIT 5");
}


готово ...
Увеличивается (если по русскому язику не даёт результата) +1 запрос в БД .. так как будет происходить проверка по транслиту

пример работы на http://kinomax.by

Missing update?
Checkout our NULLED Web Community


Дополнительные ссылки на скачивание ТОЛЬКО для зарегистрированных


+15
Просмотры: 9 234 :: Комментарии (26) :: :: Нужна помощь? Задайте вопрос на форуме ::
Теги: Хак, дле, dle
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1Feniks000

  • 22 декабря 2013 10:58
  • Регистрация: 21.09.2013
  • Был(а) онлайн: 11.04.2018
  • Комментариев: 14
  • -5
Зачем делать аналог кинопоиска? Все равно никогда не опередишь dash

Я про шаблон.

#2serik52

  • 22 декабря 2013 12:25
  • Регистрация: 27.12.2010
  • Был(а) онлайн: 20.10.2014
  • Комментариев: 22
  • +1
Ага, и пример на сайт, на котором "Гости не могут использовать поиск по сайту."...

#3Eugeny Venegrad

  • 22 декабря 2013 14:08
  • Регистрация: 23.11.2013
  • Был(а) онлайн: 7.03.2014
  • Комментариев: 5
  • 0
Отличный хак, только вот не понимаю за что минус...

#4D0Gmatist

  • 22 декабря 2013 14:59
  • Регистрация: 28.07.2012
  • Был(а) онлайн: 24.06.2021
  • Комментариев: 291
  • -2
serik52, сори забыл включить обратно .. после того как переделывал быстрый поиск

--------------------

#5G-3p

  • 22 декабря 2013 16:44
  • Регистрация: 11.12.2013
  • Был(а) онлайн: 25.06.2016
  • Комментариев: 83
  • 0
D0Gmatist,
Не работает(

#6kazinak

  • 22 декабря 2013 17:10
  • Регистрация: 12.04.2013
  • Был(а) онлайн: 22.09.2015
  • Комментариев: 16
  • 0
Благодарю, отличное решение этой не большой проблемы. На DLE 10.1 работает!

#7G-3p

  • 22 декабря 2013 17:14
  • Регистрация: 11.12.2013
  • Был(а) онлайн: 25.06.2016
  • Комментариев: 83
  • 0
kazinak,
Хм.... Ещё раз попробую....

#8vitnet

  • 22 декабря 2013 17:53
  • Регистрация: 18.09.2010
  • Был(а) онлайн: 21.11.2023
  • Комментариев: 304
  • 0
Спасибо все отлично работает, правда я себе немного подправил теперь работает в обе стороны

#9D0Gmatist

  • 22 декабря 2013 17:56
  • Регистрация: 28.07.2012
  • Был(а) онлайн: 24.06.2021
  • Комментариев: 291
  • -2
Поделись примером ))) ...

--------------------

#10vitnet

  • 22 декабря 2013 17:57
  • Регистрация: 18.09.2010
  • Был(а) онлайн: 21.11.2023
  • Комментариев: 304
  • 0
http://quantum-soft.ru/dle/xacks/58281-uchim-bystryy-poisk-raspoznavat-vse-vvede
nnye-simvoly.html

Кто автор?

#11D0Gmatist

  • 22 декабря 2013 18:14
  • Регистрация: 28.07.2012
  • Был(а) онлайн: 24.06.2021
  • Комментариев: 291
  • -3
Там в принципе всё тоже самое, толь ка как по мне лишняя
function {
array
}
которая заменяет русские символы на англ.

--------------------

#12ПафНутиЙ

  • 23 декабря 2013 02:54
  • Регистрация: 8.03.2010
  • Был(а) онлайн: 27.01.2021
  • Комментариев: 400
  • 0
D0Gmatist,
Хорошая попытка) я уж думал, что у меня на сайте много лишнего, раз только правила смены раскладок и отлова опечаток на 70кб расписаны.
Оказывается нет, не лишнее: http://prntscr.com/2d87cr

--------------------

#13D0Gmatist

  • 23 декабря 2013 04:40
  • Регистрация: 28.07.2012
  • Был(а) онлайн: 24.06.2021
  • Комментариев: 291
  • -3
ПафНутиЙ,
ну для этого и выложил в паблик .. что бы люди тестировали и показывали на недочёты ... и этим помогут доработать (довести до ума) .. чем и буду заниматься
и развивать тему
а по честному ... давно пора бы разработчикам ДЛЕ внедрить
http://ru.wikipedia.org/wiki/Sphinx_(поисковая_система)

решение было элиментарным
http://prntscr.com/2d8yqc

а вот по поводу опечаток ...
к примеру ввёл
ЛЯГУГКА и БД запрос проходит делая каждый символ как %

и выдаёт как самый близкий ЛЯГУШКА

что в принципе и делает
http://ru.wikipedia.org/wiki/Sphinx_(поисковая_система) ... но при этом скорость и нагрузка на БД минимальная

так что отлов опечаток это очень важная тема )))

--------------------

#14D0Gmatist

  • 23 декабря 2013 05:02
  • Регистрация: 28.07.2012
  • Был(а) онлайн: 24.06.2021
  • Комментариев: 291
  • -1
С учётом обнаруженных косяков .. сделан новый (обновлённый вариант)

скачать можно по адресу
http://kinomax.by/uploads/pablick.txt

--------------------

#15ПафНутиЙ

  • 23 декабря 2013 10:22
  • Регистрация: 8.03.2010
  • Был(а) онлайн: 27.01.2021
  • Комментариев: 400
  • 0
Цитата: D0Gmatist
ну для этого и выложил в паблик .. что бы люди тестировали и показывали на недочёты ...

Всё правильно! Гораздо лучше чем продавать шлак за копейки!
Так в итоге найдётся правильное решение, которое можно продавать, а самым активным и подарить не жалко)

--------------------

#16Sander

  • 23 декабря 2013 16:36
  • Регистрация: 19.02.2010
  • Был(а) онлайн: 20.04.2021
  • Комментариев: 327
  • +3
Ну и я немножко поучаствую :)
1. Функцию лучше вставлять возле строки:
$buffer = "";


2. Нет необходимости дублировать весь код вывода, если можно подправить сам запрос.
После вставленной функции прописать код:
$queryT = translitEnRu($query);


И подправить сам запрос, найти код:
(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}%')


Но я бы конечно рекомендовал ограничить поиск только по заголовку:
(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}%')

--------------------

#17D0Gmatist

  • 23 декабря 2013 16:56
  • Регистрация: 28.07.2012
  • Был(а) онлайн: 24.06.2021
  • Комментариев: 291
  • -2
Я к стати забыл совсем что там поиск идёт по нескольким полям ... что и впрямь можно уменьшить ... чем повыситься скорость

Цитата: Sander
Функцию лучше вставлять возле строки:

а функцию можно вообще вставить в /modules/functions.php ... что будет уж вааааабще правильно )))

--------------------

#18G-3p

  • 23 декабря 2013 17:14
  • Регистрация: 11.12.2013
  • Был(а) онлайн: 25.06.2016
  • Комментариев: 83
  • 0
D0Gmatist,
Так много придумали)
А можно конечный результат ваших размышлений в студию?

#19Sander

  • 23 декабря 2013 20:38
  • Регистрация: 19.02.2010
  • Был(а) онлайн: 20.04.2021
  • Комментариев: 327
  • 0
D0Gmatist,
Это не будет так уж и правильным...
По большому счету тут можно обойтись вообще без функции. Было бы правильным прописывать функцию в functions.php если бы она вызывалась в нескольких местах, хотябы еще в engine/modules/search.php.

--------------------

#20vurdik

  • 27 декабря 2013 03:04
  • Регистрация: 9.10.2011
  • Был(а) онлайн: 28.01.2019
  • Комментариев: 30
  • 0
Спасибо, попробуем

1 2
Предыдущая    Следующая
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Архив новостей
Май 2024 (2)
Апрель 2024 (20)
Март 2024 (18)
Февраль 2024 (27)
Январь 2024 (11)
Декабрь 2023 (12)
Друзья сайта

Последние комментарии: