Как отключить регистрозависимость для поиска на русском в 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 ? " ..." : '';
}

Должно заработать :)

Мое мнение...

не помогает лекарство… :-(

frozzen · 128 дн. назад · #

ещЁ надо в файле 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”;

SmaLL · 23 дн. назад · #