MODx-CMS - AjaxSearch в режиме ajax + русский язык (UTF-8)
Вы не вошли (Войти)

Авторизация

Хотите принять участие в обсуждении? Авторизуйтесь или пройдите регистрацию.



Популярные теги

Внимание!

Форум закрыт и работает только в режиме чтения. Более подробную информацию читайте в сообществе.

    • CommentAuthorburik
    • CommentTime18/06/2008 отредактирован
     

    Сделал вывод в файл из php скрипта AjaxSearch.php запроса для поиска, выводит нормально. И результатов поиска выводит ерунду.Т.е. ищу слово "Текст". В файл query.txt выводится слово текст, а в файл results.txt выводится бред, типа должно быть слово "Главная", а там:

    Главная

    А вот если я ищу, например, слово "съешь", то и в файле results.txt все нормально.

    • CommentAuthorburik
    • CommentTime18/06/2008
     

    Ура, товарищи! :)) Нашел виноватого. ) В общем что-то происходит с кодировкой во время обработки вывода. Точнее когда AjaxSearch выделяет искомое выражение. Поставить параметр &extract=`0` то все работает.

    Думаю все из-за использования немультибайтовых функций. Вот отрезок кода, который все портит:

    if ($extract) { $highlightClass = 'ajaxSearch_highlight'; $text=$row['content']; $count=1; $summary=''; $toAdd = PrepareSearchContent( $text, $length=200, $search[0] ); strip_tags( $text ); foreach ($search as $searchTerm) { if (preg_match('/' . preg_quote($searchTerm) . '/i', $text)) { if ($count > 1) { // The first summary was already extracted above $toAdd = SmartSubstr( $text , $length=200, $searchTerm ); } $summary .= preg_replace( '/' . preg_quote( $searchTerm, '/' ) . '/i', '', $toAdd ) . ' '; } $highlightClass .= ' AS_ajax_highlight'.$count; $count++; } $text=$summary; }Сейчас исправлю его и выложу обновленный вариант.
    •  
      CommentAuthorCarw
    • CommentTime18/06/2008 отредактирован
     

    Ну вот - это плюбому функции для работы с регулярными выражениями. Скорее всего они на сервере не замещены мультибайтовыми из mb_string.

    Попробуй добавить в .htaccess:

    php_value mbstring.func_overload 7php_value default_charset UTF-8php_value mbstring.language Russian

    • CommentAuthorburik
    • CommentTime18/06/2008
     

    Не помогает. Там еще есть PrepareSearchContent()

    и  SmartSubstr()

    Может в них дело.

    •  
      CommentAuthorCarw
    • CommentTime19/06/2008
     
    Поищи еще htmlentities. Эта функция без указания кодировки русские тексты в кашу превращает.
    • CommentAuthorburik
    • CommentTime19/06/2008
     

    Ну вот вроде заработал. Я решил не заморачиваться на поиске ошибок и переписал этот участок заново. Вкладываю архив, который нужно распаковать в папку сниппета (assets/snippets/AjaxSearch/), заменив файлы.

    Исправления и нововведения:

    1. Добавил корректную обработку вложенных вызовов сниппетов.
    2. Заместо прямого подключения к базе через mysql_connect (в режиме ajax) подключил класс DocumentParser и сделалподключение через dbapi. 
    3. Сделал несколько незначительных исправлений в JavaScript'e.
    •  
      CommentAuthorCarw
    • CommentTime19/06/2008
     

    Это просто замечательно :-)

    Теперь только документации не хватает русской для полного счастья :-))

    • CommentAuthorburik
    • CommentTime19/06/2008
     

    Параметры снппета AjaxSearch

    • &AS_showForm [1 | 0] (необязательный)
      Определяет, нужно ли отображать форму поиска.
      По-умолчанию: 1 (показывать)

    • &AS_landing [число] (необязательный)
      Идентификатор документа, который служит для отображения результатов поиска (для поиска без технологии ajax)

    • &AS_showResults [1 | 0] (необязательный)
      Определяет, нужно ли отображать результаты поиска. (для поиска без технологии ajax)

    • &extract [1 | 0] (необязательный)
      Выделять искомые слова в результатах.

    • &ajaxSearch [1 | 0] (необязательный)
      Использовать технологию ajax.
      По-умолчанию: 1 (использовать)

    • &ajaxSearchType [1 | 0] (необязательный)
      Определяет однин из двух вариантов формы поиска:
      1. Кнопка формы отображается и поиск не начинается до тех пор, пока она не будет нажата пользователем

      2. Форма без кнопки. Поиск начинается автоматически при изменении выражения для поиска


    • &ajaxMax [число] (необязательный)
      Максимальное количество результатов, которые вернет AjaxSearch.

    • &grabMax [число] (необязательный)
      Количество результатов на странице для поиска без технологии ajax и для дополнительных стрниц результатов.

    • &showMoreResults [1 | 0] (необязательный)
      Показывать ли ссылку на все результаты (при поиске с ajax технологией).

    • &moreResultsPage [число] (необязательный)
      ID страницы, на которой будут отображаться все результаты. Это страница, на которой есть другой вызов этого сниппета.

    • &addJscript [1 | 0] (необязательный)
      Если Вы хотите, чтобы необходимые Java скрипты были подключены автоматически, укажите 1, иначе - 0.

    •  
      CommentAuthorCarw
    • CommentTime19/06/2008
     

    Великолепно :-)

    •  
      CommentAuthorCarw
    • CommentTime19/06/2008 отредактирован
     

    Кстати, там последняя версия-то сейчас AjaxSearch 1.7.1. Ты ее использовал или предустановленную? В поледней версии там еще новые параметры есть:

    &parents [comma-separated list of integers MODx document IDs] (optional)
    A list of parent-documents whose descendants you want searched to &depth
    depth when searching. All parent-documents by default

    &depth [int] (optional)
    Number of levels deep to go.
    Any number greater than or equal to 1. All levels by default

    &documents [comma-separated list of integers MODx document IDs] (optional)
    A list of documents where to search

    &extractLength [int] (optional)
    Length of extract around the search words found
    between 50 and 800 characters. 200 by default

    &opacity [float value between 0. and 1.] (optional)
    Opacity of the ajaxSearch_output div where are returned the ajax results.
    D?fault is 1. Float value between 0. (transparent) and 1. (opaque)

    &useAllWords [ 1 | 0 ] (optional)
    If you want only documents which contain ALL words in the search string, set to true
    Otherwise, the search will return all pages with ONE or more of the search words. Default 0 (False))

    &config [config_name | "default"] (optional)
    Load a custom configuration
    config_name - Other configs installed in the configs folder or in any folder within the MODx base path via @FILE
    Configuration files are named in the form: <config_name>.config.php

    Warning:
    &useAllWords is now deprecated and replaced by &advSearch=`allwords`


    Advanced search:

    &advSearch [ 'exactphrase' | 'allwords' | 'nowords' | 'oneword' ]

    - exactphrase : provides the documents which contain the exact phrase
    - allwords : provides the documents which contain all the words
    - nowords : provides the documents which do not contain the words
    - oneword : provides the document which contain at least one word [default]


    Search in hidden documents from menu

    &hideMenu [ 0 | 1 | 2 ]

    - 0 : search only in documents visible from menu
    - 1 : search only in documents hidden from menu
    - 2 : search in hidden or visible documents from menu [default]