0 Пользователей и 1 Гость просматривают эту тему.
  • 12 Ответов
  • 692 Просмотров
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Баг в ajax умном поиске
« : 27.11.2020, 23:52:06 »
в версии Joomla 3.9.22 работали AJAX подсказки умного поиска, но после обновления на Joomla 3.9.23 перестало AJAX работать.

проблема в файле /public_html/components/com_finder/models/suggestions.php из обновления Joomla 3.9.23
если заменить версию файла suggestions.php из Joomla 3.9.22 вместо 3.9.23 то все работает!

В файле Joomla 3.9.23 /public_html/components/com_finder/models/suggestions.php
внесли изменения в запрос AJAX умного поиска, и AJAX запрос вида
/component/finder/?task=suggestions.suggest&format=json&tmpl=component&q=авто
возвращает пустое значение { "suggestions": [] }

Создание нового индекса поиска не исправляет проблему, пока заменил файл из версии 3.9.22
*

b2z

  • Глобальный модератор
  • 7107
  • 769 / 0
  • Разраблю понемногу
Re: Баг в ajax умном поиске
« Ответ #1 : 28.11.2020, 00:09:09 »
В 3.9.23 исправляли уязвимость:

Низкий приоритет - Ядро - Компонент com_finder игнорирует уровни доступа в списках автоподстановки

Возможно не хватает прав пользователя на что-то.
*

b2z

  • Глобальный модератор
  • 7107
  • 769 / 0
  • Разраблю понемногу
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #3 : 28.11.2020, 09:21:14 »
В 3.9.23 исправляли уязвимость:
Низкий приоритет - Ядро - Компонент com_finder игнорирует уровни доступа в списках автоподстановки.
Возможно не хватает прав пользователя на что-то.
Если они добавили проверку прав, то надо было им указать: какие права нужны и где!  *ОХ-Х-Х*
Права на что-то... где-то... не устраивает. Работало, после обновления перестало работать.
Пока заменил файлом suggestions.php из версии joomla 3.9.22 всё работает.
Цитировать
игнорирует уровни доступа в списках автоподстановки
Как Guru Joomla! подскажите, где находятся эти "права списков авподстановки" и что в них менять? что игнорирует и где непонятно, создаю и даю все права доступа модулю "умный поиск" не работает!  *POPCORN*
« Последнее редактирование: 28.11.2020, 09:37:09 от Avalon »
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #4 : 28.11.2020, 23:09:29 »
проверил на новой установке Joomla 3.9.23 умный поиск с AJAX работает только английскими словами  *ОХ-Х-Х*
« Последнее редактирование: 29.11.2020, 12:22:08 от Avalon »
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #5 : 29.11.2020, 03:25:18 »
Вот правка файла. Я сильно не вникал, но видно, что в запрос добавили проверку уровней доступа пользователей.

AJAX умного поиска работает только на Английских словах, на русских не работает. Это не связано с правами доступа.
Не смог найти в чём причина бага. На новой установке работает только с английскими словами, на русских не работает.
У Вас нет такого бага, можете у себя проверить?
« Последнее редактирование: 29.11.2020, 13:10:47 от Avalon »
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #6 : 29.11.2020, 12:42:45 »
Итак нашел причину покопавшись дебаггером, почему не работает AJAX умного поиска с Русскими словами, а только с Английскими
Интересно то, что русские слова на букву Е работают, а остальные нет!

В файле Joomla 3.9.23 /public_html/components/com_finder/models/suggestions.php
создаётся суффикс таблицы базы "#__finder_links_terms+СУФФИКС", в таблице базы в которой надо искать нужное Русское слово
Код
// Determine the relevant mapping table suffix by inverting the logic from drivers
$mappingTableSuffix = substr(md5(substr($this->getState('input'), 0, 1)), 0, 1);
...

// Join mapping table for term <-> link relation
$mappingTable = $db->quoteName('#__finder_links_terms' . $mappingTableSuffix);

затем создаётся запрос вида
Код
SELECT DISTINCT(t.term)
FROM j_finder_terms AS t
INNER JOIN j_finder_links_terms8 AS tm ON tm.term_id = t.term_id
INNER JOIN j_finder_links AS l ON (tm.link_id = l.link_id)
WHERE t.term_id IN (7765,8329,8331,8328,8576,8324,8320,8330,8327,8326,8319,8322,8575,8323,8321,8325)
AND l.access IN (1,1,2,3,6)
AND l.state = 1
AND l.published = 1
ORDER BY t.links DESC, t.weight DESC
где:
8 - суффикс таблицы базы, в которой надо искать слово (j_finder_links_terms8)
-------------------------------------
Но в этой таблице нет этих слов! Слова находятся в соседней таблице с суффиксом c (j_finder_links_termsc) поэтому SQL запрос выдаёт пустое значение и AJAX поиск пустой!
Проблема связана с неправильным формированием суффикса таблицы где лежат русские слова! Если перенести нужные значение русских слов в таблицу с суффиксом 8, то AJAX запрос умного поиска начинает работать с русским словами!
Русские слова на букву Е помещаются изначально в нужную таблицу- поэтому корректно работает только с буквой Е
Как правильно сформировать суффикс не знаю. Пока откатил на файл версии Joomla 3.9.22 с ним работает, так как SQL запрос проще.
« Последнее редактирование: 30.11.2020, 13:18:55 от Avalon »
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #7 : 29.11.2020, 12:56:30 »
del
*

sivers

  • Завсегдатай
  • 1730
  • 238 / 0
Re: Баг в ajax умном поиске
« Ответ #8 : 29.11.2020, 16:01:24 »
Как правильно сформировать суффикс не знаю.
А в старой версии он как-то не так формируется? Попробуйте заменить функцию substr на mb_substr в этой строке:
Код
$mappingTableSuffix = substr(md5(substr($this->getState('input'), 0, 1)), 0, 1);
На связи в телеге @sivers
https://sivers.su/
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #9 : 29.11.2020, 21:46:31 »
А в старой версии он как-то не так формируется? Попробуйте заменить функцию substr на mb_substr в этой строке:
Код
$mappingTableSuffix = substr(md5(substr($this->getState('input'), 0, 1)), 0, 1);

Спасибо, Ваш способ решает проблему с заменой substr на mb_substr но нашёл другой способ из другого файла joomla

В старой вообще не формировался, а в соседнем файле components\com_finder\models\search.php формируется через функцию utf8_substr в функции StringHelper::substr

Решение как в файле search.php
В файле components\com_finder\models\suggestions.php меняем на
Код
// подключаем в начале файла класс сразу после defined('_JEXEC') or die;
use Joomla\String\StringHelper;

//заменяем багованый файл на исправный
//$mappingTableSuffix = substr(md5(substr($this->getState('input'), 0, 1)), 0, 1);
$mappingTableSuffix = StringHelper::substr(md5(StringHelper::substr($this->getState('input'), 0, 1)), 0, 1);
После исправления AJAX умного поиска кириллицы работает исправно!
« Последнее редактирование: 03.12.2020, 18:22:17 от Avalon »
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #10 : 29.11.2020, 22:46:03 »
создал pull request на github с исправлением этой ошибки
Ошибка
https://github.com/joomla/joomla-cms/issues/31532

Изменения pull request
https://github.com/joomla/joomla-cms/pull/31533/files
*

Avalon

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Re: Баг в ajax умном поиске
« Ответ #11 : 30.11.2020, 13:00:31 »
Исправление проверили и приняли к версии joomla! 3.9.24
https://github.com/joomla/joomla-cms/pull/31533
« Последнее редактирование: 30.11.2020, 13:13:03 от Avalon »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться