Хак [ Хак ] Буква е и ё при поиске для cp1251 для DLE 9.x - 11.x

Тема в разделе "Модули / Хаки", создана пользователем PunPun, 14 мар 2017.

Метки:
  1. TopicStarter Overlay
    PunPun

    PunPun Команда форума Приватовец
    Отправить ЛС

    Регистрация:
    23 фев 2017
    Сообщения:
    646
    Симпатии:
    398
    Баллы:
    63
    Может кто-то не знает, а кому-то это известно что в кодировке cp1251 базы данных, такие символы как е и ё считаются разными в то время как в utf-8 они считаются за одинаковые. Этот хак позволит сделать что бы символы е и ё считались как одинаковые для поиска новостей.

    Установка хака Буква е и ё при поиске для cp1251 для DLE:
    1. Открыть /engine/ajax/search.php найти:
    PHP:
    $query $db->safesqlhtmlspecialchars trim(  strip_tags (convert_unicode$_POST['query'], $config['charset'] ) ) ), ENT_QUOTES$config['charset']) );
    Заменить на:
    PHP:
    $query $db->safesqlhtmlspecialchars trim(  strip_tags $_POST['query']) ), ENT_QUOTES$config['charset']) );
    Далее найти:
    PHP:
    $db->query("SELECT id, short_story, title, date, alt_name, category FROM " PREFIX "_post WHERE " PREFIX "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");
    Заменить на:
    PHP:
    $db->query("SELECT id, short_story, title, date, alt_name, category FROM " PREFIX "_post WHERE " PREFIX "_post.approve=1".$this_date." AND (short_story LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci OR full_story LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci OR xfields LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci OR title LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci) ORDER by date DESC LIMIT 5");
    2. Открыть /engine/modules/search.php найти:
    PHP:
    // Поиск по ключевым словам
    Ниже вставить:
    PHP:
    $story mb_convert_encoding($story'utf-8'"cp1251");
    Далее найти:
    PHP:
    $titleonly_where = array ('0' => "MATCH(title,short_story,full_story,xfields) AGAINST ('{story}' IN BOOLEAN MODE)"// Искать только в статьях
    Заменить на:
    PHP:
    $titleonly_where = array ('0' => "MATCH(title,short_story,full_story,xfields) AGAINST (_utf8 '{story}' COLLATE utf8_general_ci IN BOOLEAN MODE)"// Искать только в статьях
    Далее найти (2 РАЗА):
    PHP:
    '3' => "title LIKE '%{story}%'" ); // Искать только в заголовках статей
    Заменить на (2 РАЗА):
    PHP:
    '3' => "title LIKE _utf8 '%{story}%' COLLATE utf8_general_ci" ); // Искать только в заголовках статей
    Далее найти:
    PHP:
    $titleonly_where = array ('0' => "short_story LIKE '%{story}%' OR full_story LIKE '%{story}%' OR xfields LIKE '%{story}%' OR title LIKE '%{story}%'"// Искать только в статьях
    Заменить на:
    PHP:
    $titleonly_where = array ('0' => "short_story LIKE _utf8 '%{story}%' COLLATE utf8_general_ci OR full_story LIKE _utf8 '%{story}%' COLLATE utf8_general_ci OR xfields LIKE _utf8 '%{story}%' COLLATE utf8_general_ci OR title LIKE _utf8 '%{story}%' COLLATE utf8_general_ci"// Искать только в статьях
    Автор: https://punpun.name/
     
    Последнее редактирование: 24 июн 2017
  2. Cartmont

    Cartmont
    Отправить ЛС

    Регистрация:
    12 мар 2017
    Сообщения:
    146
    Симпатии:
    19
    Баллы:
    18
    Проще отказаться от 1251, для этой кодировки не все модули даже делают