Понятный быстрый поиск » Techno-Co — Всё для вебмастера, для создание сайтов с нуля. {title}

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

Установка:

Открыть файл /engine/ajax/search.php и после:

     $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);

}

Найти далее:

if ( !$buffer ) $buffer .= "{$lang['related_not_found']}";

Заменить на:

if ( !$buffer ) {

$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");

while($row = $db->get_row()){

                $row['date'] = strtotime( $row['date'] );
                $row['category'] = intval( $row['category'] );

                if( $config['allow_alt_url'] == "yes" ) {
                        
                        if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
                                
                                if( $row['category'] and $config['seo_type'] == 2 ) {
                                        
                                        $full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
                                
                                } else {
                                        
                                        $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
                                
                                }
                        
                        } else {
                                
                                $full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
                        }
                
                } else {
                        
                        $full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
                
                }

                $row['title'] = stripslashes($row['title']);

                if( dle_strlen( $row['title'], $config['charset'] ) > 43 ) $title = dle_substr( $row['title'], 0, 43, $config['charset'] ) . " ...";
                else $title = $row['title'];

                $row['short_story'] = trim (htmlspecialchars( strip_tags( stripslashes( str_replace( array("
", " "), " ", $row['short_story'] ) ) ), ENT_QUOTES, $config['charset'] ) ); if( $user_group[$member_id['user_group']]['allow_hide'] ) $row['short_story'] = str_ireplace( "[hide]", "", str_ireplace( "[/hide]", "", $row['short_story']) ); else $row['short_story'] = preg_replace ( "#[hide](.+?)[/hide]#is", "", $row['short_story'] ); if( dle_strlen( $row['short_story'], $config['charset'] ) > 150 ) $description = dle_substr( $row['short_story'], 0, 150, $config['charset'] ) . " ..."; else $description = $row['short_story']; $description = str_replace('&', '&', $description); $description = preg_replace( "'[attachment=(.*?)]'si", "", $description ); $buffer .= ""; } if ( !$buffer ) $buffer .= "{$lang['related_not_found']}"; }

Готово!

Версия DLE: 10.х

Автор: D0Gmatist

Комментарии 0