-
- 2,113 Posts
Quote from: SpaceW at Jan 10, 2011, 02:49 PM
А возможно ли обойти как-то это?
Есть три варианта:
1. Не обращать внимания на ошибки (самый распространенный).
2. Сменить хостера (самый правильный).
3. Переписать AjaxSearch (самый геморройный).
Проблема в том, что поиск идет на уровне SQL-запросов к базе, а если кодировка базы некорректная, запросы будут обрабатываться неверно. Теоретически может как-то и можно это побороть, но это вопрос к специалистам по MySQL.
-
- 630 Posts
Quote from: SpaceW at Jan 10, 2011, 02:49 PM
А возможно ли обойти как-то это? Хостер сказал, что он не может поменять character_set_database cp1251
А можно строчку SQL-запроса из кода AS? Могу ошибаться, но регулярки - регистрозависимые, а like %searchtext% - нет. Выше в топике обсуждалось.. Если "не то" - извиняйте
-
- 91 Posts
Ну, судя по всему, за поиск отвечает ajaxSearchRequest.class.inc.php.
При этом сам запрос формируется хитро:
Есть функция поиска doSearch, при этом $where формируется функцией _getWhere, та, в свою очередь функцией _getFilter, а там еще и _getSubFilter.. вообщем, я пока запутался, пытаюсь сейчас выделить все-таки запрос
----------------------------
in ModX we trust
-
- 2,113 Posts
Quote from: esche at Jan 11, 2011, 06:35 AM
Выше в топике обсуждалось..
Помню, что обсуждалось, но найти не могу - где нужное обсуждение?
Quote from: SpaceW at Jan 11, 2011, 12:57 PM
вообщем, я пока запутался, пытаюсь сейчас выделить все-таки запрос
Вроде бы надо исправлять в строке:
$whereForm = array(’like’ => " LIKE ’%word%’", ’notlike’ => " NOT LIKE ’%word%’", ’regexp’ => " REGEXP ’[[:<:]]word[[:>:]]’");
-
- 630 Posts
$whereForm = array('like' => " LIKE '%word%'", 'notlike' => " NOT LIKE '%word%'", 'regexp' => " REGEXP '[[:<:]]word[[:>:]]'");
Вообще character_set_database можно установить из скрипта. Если добавить блок сразу после соединения
(искать mysql_connect в файле manager/includes/document.parser.class.inc.php)
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
И посмотреть, что получилось?
-
- 91 Posts
Так, целиком значит запрос выглядит вот так вот:
SELECT sc.id, sc.pagetitle, sc.longtitle, sc.description, sc.alias, sc.introtext, sc.template, sc.menutitle, sc.content, sc.publishedon, GROUP_CONCAT( DISTINCT CAST(ntv.id AS CHAR) SEPARATOR "," ) AS tv_id, GROUP_CONCAT( DISTINCT ntv.value SEPARATOR "," ) AS tv_value FROM `modx_site_content` sc LEFT JOIN( SELECT DISTINCT tv.id, tv.value, tv.contentid FROM `modx_site_tmplvar_contentvalues` tv ) AS ntv ON sc.id = ntv.contentid WHERE ((sc.published=1) AND (sc.searchable=1) AND (sc.deleted=0) AND (sc.privateweb=0)) GROUP BY sc.id HAVING (((sc.pagetitle LIKE ’%слово%’) OR (sc.longtitle LIKE ’%слово%’) OR (sc.description LIKE ’%слово%’) OR (sc.alias LIKE ’%слово%’) OR (sc.introtext LIKE ’%слово%’) OR (sc.menutitle LIKE ’%слово%’) OR (sc.content LIKE ’%слово%’) OR (tv_value LIKE ’%слово%’))) ORDER BY publishedon,pagetitle
Вообще character_set_database можно установить из скрипта. Если добавить блок сразу после соединения
(искать mysql_connect в файле manager/includes/document.parser.class.inc.php)
Code:
mysql_query(’SET character_set_database = utf8’);
mysql_query(’SET NAMES utf8’);
И посмотреть, что получилось?
К сожалению ничего не произошло...
вообще не понятно, почему же like, с учетом того, что в базе сравнение utf8_unicode_ci ищет по регистру, хоть character_set_database у меня и в cp1251..
С дитто тоже были проблемы из-за � вконце строк при использовании summory, но это-то легко решалось прописывапнием в .htaccess
PHP_VALUE mbstring.internal_encoding UTF-8
PHP_VALUE default_charset UTF-8
PHP_VALUE mbstring.http_output UTF-8
PHP_VALUE mbstring.encoding_translation On
PHP_VALUE mbstring.detect_order UTF-8
PHP_VALUE mbstring.func_overload 7
----------------------------
in ModX we trust
-
- 29 Posts
Здравствуйте, есть вопрос. Возможно баг, но если установить меньше 3 символов (&minChars=`2`)поиск не совершается, выдается сообщение о том, что требуется минимум 3 символа... Можно ли исправить?(Поиск без аякса).
-
- 2,113 Posts
Quote from: Miracle at Jan 18, 2011, 08:32 AM
Можно ли исправить?
В ajaxSearch.class.inc.php исправьте
define(’MIN_CHARS’, 3); // minimum number of characters
-
- 131 Posts
кто-нибудь знает как убрать долбанный крестик живого поиска?
он у меня выскакивает на странице результатов поиска, но не рядом с результатами, а в шапке сайта, где маленькая формочка
прибивание liveSearch не помогает
маленькая форма
[!AjaxSearch? &showResults=`0` &landingPage=`29` &tplInput=`TopSearch` &showIntro=`0` &clearDefault=`1` &ajaxSearch=`0` asId=`topsearch` &liveSearch=`0` !]
большая форма просто
скрин