25.12.13, 13:46
0 комментарий
  DLE Хаки

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

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

При поиске будет происходить 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 .= "<span class="notfound">{$lang['related_not_found']}</span>";


Заменить на:

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("<br />", "&nbsp;"), " ", $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('&amp;', '&', $description);

		$description = preg_replace( "'[attachment=(.*?)]'si", "", $description );

		$buffer .= "<a href="" . $full_link . ""><span class="searchheading">" . stripslashes( $title ) . "</span>";

		$buffer .= "<span>".$description."</span></a>";

	}
	
	if ( !$buffer ) $buffer .= "<span class="notfound">{$lang['related_not_found']}</span>";

}


Готово!

Версия DLE: 10.х
Автор: D0Gmatist

Реклама

Напишите своё мнение

  • acuteaggressiveair_kissangel
    badbbbeachbeee
    biggrinbig_bossblumblush
    boastbombboredombye
    clappingcraycrazycurtsey
    dancedashdeclarediablo
    diroldon-t_mentiondownloaddrinks
    first_moveflirtfocusfool
    friendsgive_heartgive_rosegood
    hangheartheathelp
    hihunterhystericireful
    kingkisslaughlazy
    lolmail1mambaman_in_love
    mdamega_shokmoilmosking
    musicneanegativenew_russian
    okon_the_quietpardonparting
    partypilotpioneerpleasantry
    popcormpranksterprevedpunish
    roflrtfmrussiansad
    sarcasticscarescratchsearch
    secretsensoredshokshout
    slowsmilesmokesoldier
    soldier_girlsorryspitefulspruce_up
    stinkersuicidesunsuperstition
    swoonteasetenderthanks
    thisto_pick_ones_noseto_take_umbragetreaten
    umnikunknwvampirevava
    victorywackowhistlewink
    wizardyahooyesyu
    e101e102e103e104
    e105e106e107e108
    e109e110e111e112
    e113e114e115e116
    e117e118e119e120
    e121e122e123e124
    e125e126e127e128
    e129e130e131e132
    e133e134e135e136
    e137e138e139e140
    e141e142e143e144
    e145e146e147e148
    e149e150e151e152
    e153e154e155e156
    e157e158e159e160
    e161e162e163e164
    e165e166e167e168
    e169e170e171e172
    e173e174e175e176
    e177e178e179e180
    e181e182e183e184
    e185e186e187e188
    e189e190e191e192
    e193e194e195e196
    e197e198e199e200
    e201e202e203e204