Модуль точного поиска

artefakt777

Постоялец
Регистрация
15 Июл 2012
Сообщения
537
Реакции
141
Ищу модуль поиска по материалам joomla, который можно настроить на поиск только по заголовку и по точному его совпадению.

Т.е. если заголовок 85559933, то по запросу 85559 или 8555993388888 результатов быть не должно.
 
Переделай в стандартном модуле условие для поиска. Он ищет contain в нужных колонках, а ты напиши "==" (грубо говоря)
Указывай версии!

------------
Если быть точнее, то это плагин search
plugins\search\content\content.php
В нем есть блок switch ($phrase)
и везде он ищет с условием "LIKE" - т.е. содержит искомую фразу в title introtext fulltext metakey metadesc
Убери ненужные, если хочешь искать только по тайтлу, и замени LIKE на =
 
Последнее редактирование:
Ну вобщем получилось вот так:
Код:
switch ($phrase)
        {
            case 'exact':
                $text = $db->quote('%' . $db->escape($text, true) . '%', false);
                $wheres2 = array();
                $wheres2[] = 'a.title = ' . $text;
            /*    $wheres2[] = 'a.introtext LIKE ' . $text;
                $wheres2[] = 'a.fulltext LIKE ' . $text;
                $wheres2[] = 'a.metakey LIKE ' . $text;
                $wheres2[] = 'a.metadesc LIKE ' . $text; */
                $where = '(' . implode(') OR (', $wheres2) . ')';
                break;

            case 'all':
            case 'any':
            default:
                $words = explode(' ', $text);
                $wheres = array();

                foreach ($words as $word)
                {
                    $word = $db->quote('%' . $db->escape($word, true) . '%', false);
                    $wheres2 = array();
                    $wheres2[] = 'LOWER(a.title) LIKE LOWER(' . $word . ')';
                    $wheres2[] = 'LOWER(a.introtext) LIKE LOWER(' . $word . ')';
                    $wheres2[] = 'LOWER(a.fulltext) LIKE LOWER(' . $word . ')';
                    $wheres2[] = 'LOWER(a.metakey) LIKE LOWER(' . $word . ')';
                    $wheres2[] = 'LOWER(a.metadesc) LIKE LOWER(' . $word . ')';
                    $wheres[] = implode(' OR ', $wheres2);
                }

                $where = '(' . implode(($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')';
                break;
        }

Но всетки продолжает искать по началу слова

(т.е. если заголовок 85559933, то по запросу 85559 выдает результат)
 
а че ты эту строку оставил? тоже LIKE замени на равно
Код:
 $wheres2[] = 'LOWER(a.title) LIKE LOWER(' . $word . ')';
 
Ага точно, только пришлось word на текст заменить, иначе не искал.
Код:
$wheres2[] = 'LOWER(a.title) =LOWER(' . $text. ')';

Остался такой момент, что при выводе результатов поиска обрезается весь html, в том числе перенос строк. как поправить можно?
 
Если не ошибаюсь - там же внизу есть result
SearchHelper::checkNoHtml, или нет.
Вобщем бери пиво и пиши в скайп
 
Назад
Сверху