Автокомплит поиска товаров в бэкенде Исправлено

3

Рискну всё-таки определить эту тему как баг.

Итак, поиск товаров по общему списку в бэкенде осуществляется в контроллере lib/actions/backend/shopBackendAutocomplete.controller.php в методе productsAutocomplete.

  1. Первым делом проверяется, начинается ли наименование товара с введённой строки:
    $products = $product_model->select($fields)
        ->where("name LIKE '$q%'")
        ->limit($limit)
        ->fetchAll('id');
    
  2. Далее, если найденного количества в результатах не хватает, то происходит поиск по артикулам. Затем, по найденным артикулам берутся товары. Найденные товары плюсуются к найденным в первом пункте. Тут вроде пока всё чётко.
  3. Теперь, если количество найденных товаров не дотягивает до $limit, происходит снова поиск по наименованию товара, но уже не по началу строки, а по её содержанию
  4.         // try find with LIKE %query%
            if (count($products) < $limit) {
                $data = $product_model
                    ->select($fields)
                    ->where("name LIKE '%$q%'")
                    ->limit($limit)
                    ->fetchAll();
    
                // not array_merge, because it makes first reset numeric keys and then make merge
                $products = $products + $data;
            }
    

    Вот именно в последнем из перечисленных пунктов есть недочёты:

    ПЕРВОЕ: поиск %$q% включит в себя результаты поиска $q% из первого пункта, потому что знак процента указывает любое количество символов, включая ноль, то есть их отсутствие. Но тут есть свои нюансы. Например, у меня кириллические наименования не находятся в первом пункте, а находятся почему-то именно в третьем пункте. Допускаю, что у меня кодировки не везде правильно настроены, но проблема повторилась и на одном из серверов виртуального хостинга. Но не это главное.

    ВТОРОЕ: сложение массивов через знак плюса учитывает как значения слагаемых массивов, так и их ключи. Но в третьем пункте в метод fetchAll не передан параметр $key. То есть, в первом пункте ключами массива товаров будут их id товаров, а в третьем - порядковые номера списка результатов поиска (0,1,2,3). В результате, знак плюс отрабатывает не корректно и на выходе имеем задвоенные результаты.

1 комментарий

  • +1
    Евгений Евгений 20 октября 2016 10:58 #

    Подтверждаю. Обновились до 7 версии недавно. Так же в админке в поиске товаров имеем задвоение результатов.

    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите