Исправление плагина поиска товаров в MijoShop

Тема в разделе "MijoShop (AceShop)", создана пользователем OlegM, 14.02.2014.

  1. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 311
    Симпатии:
    375
    Пол:
    Мужской
    Исправление необходимо, если используется стандартный модуль поиска Joomla и плагин поиска MijoShop.

    Суть проблемы: по умолчанию товары находятся, если в поиск ввести слова, идущие подряд в тексте названия товара, в описании или где-либо еще. Если товар называется например "Marburg Patent Decor 3D 1800", а мы будем искать "Marburg Decor", то ничего не будет найдено. Так же в компоненте поиска не работают параметры поиска: "Все слова", "Любое из слов", "Точное совпадение".

    Причина проста - разработчики не стали заморачиваться с этими опциями и в плагине работает лишь одно условие - поиск точного совпадения фразы.

    Решение:
    В файле plugins/search/mijoshop/mijoshop.php
    найти в 75-76 строке
    Код (PHP):
    1. break;
    2.         }

    и добавить после этого
    Код (PHP):
    1. $wheres = array();
    2.         switch ($phrase) {
    3.             case 'exact':
    4.                 $text       = $db->Quote('%'.$db->escape($text, true).'%', false);
    5.                 $wheres2    = array();
    6.                 $wheres2[]  = 'LOWER(pd.name) LIKE '.$text;
    7.                 $wheres2[]  = 'LOWER(pd.description) LIKE '.$text;
    8.                 $wheres2[]  = 'LOWER(pt.tag) LIKE '.$text;
    9.                 $where      = '(' . implode(') OR (', $wheres2) . ')';
    10.                 break;
    11.  
    12.             case 'all':
    13.             case 'any':
    14.             default:
    15.                 $words = explode(' ', $text);
    16.                 $wheres = array();
    17.                 foreach ($words as $word) {
    18.                     $word       = $db->Quote('%'.$db->escape($word, true).'%', false);
    19.                     $wheres2    = array();
    20.                     $wheres2[] = 'LOWER(pd.name) LIKE '.$word;
    21.                     $wheres2[] = 'LOWER(pd.description) LIKE '.$word;
    22.                     $wheres2[] = 'LOWER(pt.tag) LIKE '.$word;
    23.                     $wheres[]   = implode(' OR ', $wheres2);
    24.                 }
    25.                 $where = '(' . implode(($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')';
    26.                 break;
    27.         }


    В 94-96 строке находим
    Код (PHP):
    1. ."WHERE (LOWER(pd.name) LIKE '%" . $db->getEscaped($text) . "%' OR
    2.                         LOWER(pd.description) LIKE '%" . $db->getEscaped($text). "%' OR
    3.                         LOWER(pt.tag) LIKE '%" . $db->getEscaped($text). "%') "

    и заменяем на
    Код (PHP):
    1. ."WHERE (".$where.")"

    После этого поиск должен заработать нормально.

    Код взят из плагина поиска контента и подправлен под MijoShop.
     
  2.  

Поделиться этой страницей

Загрузка...