On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Всем доброго дня

    нужен практический совет на тему поиска AjaxSearch

    проблема сниппета и некоторых кодировок уже поднималась
    даже были попытки найти решение

    вот есть описаный способ
    http://modxcms.com/forums/index.php/topic,6778.0.html
    не помог (или не туда прикручивал)

    по этому TIP’у - я строку:
    mb_internal_encoding("UTF-8"); 

    поставил в начало сниппета AjaxSearch

    сразу после
    <?php
    
    mb_internal_encoding("UTF-8");


    не помогло
    -------
    о сайте - ModX 0.9.6 - кодировка UTF-8 - +AjaxSearch

    поиск на кириллице выдает отсутствие результата - попытка нащупать хоть как то работоспособность поиска набрал цифры "1974" которые есть в текстах

    вот что получил


    на что это похоже?? где искать правду? wink

    пс. менять общую кодировку сайта не предлагать %) .. помогите плз побороть неспособность AjaxSearch’a понимать UTF-8

    ---------------------------

    ппс. не разобрался со строковыми функциями - и префиксом mb_
    ПОМОГИТЕ ПЛЗ
    • Очень срочно нужно ПЛЗ!
      • чет это на utf8 не похоже smiley

        посмотрите в бд, в каком виде там лежат данные
          "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

          Не используйте Revo для "просто сайтов". Используйте Evo

          Who can defeat the Russian bear?
        • Присоединюсь к вопросу - как сделать, чтобы работал именно AjaxSeach. У меня, если установлен параметр &ajaxSearch=`0`, все работает нормально, ищутся и русские и английские слова (использую 0.9.6, UTF-8, PHP5). Если же &ajaxSearch=`1`, русские слова вообще не находит, а при поиске английских выдает
          ?????? ?? ???????????? 03 
          ??? ???????? DHTML

          Проблема не в "mb_internal_encoding("UTF-8"); " (я не добавлял эту команду), так как я добавил команду $result .= mb_internal_encoding(); в конец файла AjaxSearch.php и вывелось UTF-8. Пока в принципе удовлетворяет поиск и без Ajax, но хотелось бы разобраться в том, почему так все работает. Если кто-то уже знает, может поделитесь...
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
          • еще когда заводил БД - указал uft-8
            • Вроде бы заработал у меня AjaxSeach. Я в файле AjaxSearch.inc.php в функции connectForAjax() перед строкой return $table_prefix; добавил строку:
              $lang = mysql_query("SET CHARACTER SET 'utf8'", $db) or die("Ошибка в запросе установки языка : " . mysql_error());

              и все заработало.
              Правда я пока пробую на локальном компьютере, может вылезут еще глюки. В принципе правильнее не ’utf8’ писать, а кодировку, установленную в MODx, но и так сойдет.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
              • Правильнее добавить в функцию строку global $database_connection_charset; и вместо описанной выше использовать команду $lang = mysql_query("SET CHARACTER SET ’".$database_connection_charset."’", $db) or die("Charset error : " . mysql_error());.
                  Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                  Статьи о MODx, регулярно новые публикации
                • Обнаружил еще одну проблему – иногда поисковые запросы не подсвечиваются и не выводится фрагмент, в котором найдено слово (если не совпадает регистр). Решается она так (для utf8): в сниппете AjaxSearch ищется строка
                  if (preg_match('/' . preg_quote($searchTerm) . '/i', $text)) {

                  и после /I добавляется u, то есть в итоге должно получиться
                  if (preg_match('/' . preg_quote($searchTerm) . '/iu', $text)) {

                  Немного ниже ищется строка,начинающаяся на
                  $summary .= preg_replace( '/' . preg_quote( $searchTerm, '/' ) . '/i'

                  и в ней выполняется такая же операция, то есть добавляется u после i.
                  Далее точно такие же две строки следует отредактировать в файле AjaxSearch.php. После этого подсветка работает и все выводится как надо. То есть вроде бы AjaxSearch правильно работает с русскими буквами после некоторых доделок и при правильно установленной кодировке.

                  Однако есть все же еще одна проблема. Если из результатов поиска перейти на страницу при включенной подсветке, подсвечены будут все найденные слова на этой странице. Но если регистр слов не совпадает с тем, что был в поисковом запросе, подсветка не работает. Я поискал, но не обнаружил источник проблемы. Может кто-то попробует найти его?

                  Пример работающего поиска можно посмотреть на сайте e-kao.ru, введя, например, слово «СтИль». Правда сейчас некоторые проблемы с хостингом, сайт периодически недоступен.
                  Перейдя по ссылке «Щелкните здесь, чтобы увидеть все результаты поиска.» можно увидеть подсвеченные фрагменты, но если перейти по ссылке на один из найденных документов, подсветка исчезнет. Если же искать «стиль», подсветка не исчезает.
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации