Как отключить регистрозависимость для поиска на русском в textpattern?
Написано Июл 14, 00:03
1. Открываем файл \textpattern\publish\taghandlers.php и ищем функцию search_result_excerpt – примерно 2288 строка кода
2. Заменяем содержимое функции полностью следующим кодом:
function search_result_excerpt($atts)
{
global $thisarticle, $q;
extract(lAtts(array(
'hilight' => 'strong',
),$atts));
if (empty($thisarticle)) return;
extract($thisarticle);
$result = strip_tags(preg_replace("/>\s*</","> <","$excerpt ... $body"));
$up = explode(" ", "А Б В Г Д Е Ё ё Ж З И Й й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я A B C D E F G H I J K L M N O P Q R S T U V W X Y Z");
$dw = explode(" ", "а б в г д е е е ж з и и и к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я a b c d e f g h i j k l m n o p q r s t u v w x y z");
$res_up = str_replace($up, $dw, $result); // to lowercase
$q_up = str_replace($up, $dw, $q); // to lowercase
$res_len = strlen($res_up);
$q_len = strlen($q_up);
$pos = array();
for ($i=0; $i < strlen($res_up); $i++) if (substr($res_up,$i,$q_len) == $q_up) $pos[] = $i;
$pos = array_chunk($pos,1);
for ($i=0; $i < sizeof($pos); $i++)
{
$rt = $pos[$i][0] + 80 + $q_len;
$lt = $pos[$i][0] - 80;
if ($lt < 0) $lt = 0;
if ($rt > $res_len) $rt = $res_len;
while ($res_up{$lt}!=" " and $lt>0) $lt--;
while ($res_up{$rt}!=" " and $rt<$res_len) $rt++;
$pos[$i][1] = $lt;
$pos[$i][2] = $rt;
}
for ($i=1; $i < sizeof($pos); $i++)
if ($pos[$i][1] <= $pos[$i-1][2])
{
$pos[$i][1] = $pos[$i][0];
$pos[$i-1][2] = $pos[$i][0];
}
foreach($pos as $val)
{
if ($val[0] != $val[1]) $ret .= " ... ";
$ret .= substr($result, $val[1], $val[0]-$val[1]);
$ret .= "<$hilight>" . substr($result, $val[0], $q_len) . "</$hilight>";
$ret .= substr($result, $val[0]+$q_len, $val[2]-$val[0]-$q_len);
}
return $ret .= $ret ? " ..." : '';
}
Должно заработать :)
Мое мнение...
ещЁ надо в файле publish.php в функции
doArticles
заменить строку (примерно 590):
$search = “ and (Title rlike ‘$q’ or Body rlike ‘$q’) $s_filter”;
на:
$q = str_replace(explode(” “, “ё й Ё Й”), explode(” “, “е и Е И”), $q);
$search = “and (replace(replace(upper(Title),‘Ё’,‘Е’),‘Й’,‘й’) rlike upper(’$q’) or replace(replace(upper(Body),‘Ё’,‘Е’),‘Й’,‘й’) rlike upper(’$q’) or replace(replace(upper(Excerpt),‘Ё’,‘Е’),‘Й’,‘й’) rlike upper(’$q’)) $s_filter”;
