Страница 1 из 1

Модуль "Поиск"

СообщениеДобавлено: 25 июл 2011, 17:03
fallingfalling
Проблема такая. Использую данный модуль как поисковик по тегам. Но когда нажимаю на какой-либо тег выскакивает след. бред:
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

На сколько я понимаю это идет описание, но оно корявое. Как убрать или исправить этот бред?

Re: Модуль "Поиск"

СообщениеДобавлено: 25 июл 2011, 17:54
cmsservice
Там, в контроллере модуля, неправильно написаны регулярные выражения, они не учитывают работу с русскими буквами. Кроме того, по данной же причине, поиск неправильно работает. Где там что нужно подправить я уже и не вспомню, но в нашем дистрибутиве эта проблема решена.

Re: Модуль "Поиск"

СообщениеДобавлено: 26 июл 2011, 12:49
fallingfalling
вот нужно что-то исправлять, а то в таком виде вообще никуда не годится

Re: Модуль "Поиск"

СообщениеДобавлено: 26 июл 2011, 18:56
cmsservice
Ловите корректный контроллер.

Re: Модуль "Поиск"

СообщениеДобавлено: 27 июл 2011, 15:27
fallingfalling
Не получилось... Всё точно также как и было
controller я кидал в /website/concrete/blocks/search

Re: Модуль "Поиск"

СообщениеДобавлено: 28 июл 2011, 11:21
cmsservice
Короче, качните наш дистрибутив и выньте из него директорию с блоком search, так будет правильнее.

Как работает можно посмотреть на нашем сайте.


UPD: Кстати, вспомнил, там в базе в оригинальной установке, в таблице, по которой осуществляется поиск, поле с текстовыми значениями в кодировке latin1, а нужно UTF-8, может еще в этом дело

Re: Модуль "Поиск"

СообщениеДобавлено: 06 фев 2012, 19:05
Count_Raven
Короче, все равно будут кракозябры.

Проблема в функции:
Код: Выделить всё
public function highlightedMarkup($fulltext, $highlight) {
      $this->hText = $fulltext;
      $this->hHighlight  = str_replace(array('"',"'","""),'',$highlight); // strip the quotes as they mess the regex
      if(!empty($this->hHighlight)) $this->hText = @preg_replace( "#$this->hHighlight#i", '<span class="highlight">$0</span>', $this->hText );
      return $this->hText;
   }


preg_replace возвращает бред, мучался долго, модификатор "u" не помогает.
В итоге единственное, хоть и дурацкое решение, это конвертировать из UTF-8 в cp1251, дать preg_replace на вход и потом конвертировать из cp1251 обратно в UTF-8

Код: Выделить всё
if(!empty($this->hHighlight)) {
$this->hText = @preg_replace( "#$this->hHighlight#i", '<span class="highlight">$0</span>', iconv('UTF-8', 'cp1251', $this->hText) );
$this->hText = iconv('cp1251','UTF-8', $this->hText);
}
return $this->hText;


Тогда нормальный текст, а не кракозябры, вопросы или точки.