Новости Joomla

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

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Поиск по фразе целиком
« : 02.02.2013, 10:57:41 »
Подскажите как можно следующий код привести к тому, чтобы поиск осуществлялся по фразе целиком.
Например, есть запрос "Петров Иван". Нужно чтобы искал именно "Петров Иван", а не выдавал результаты "Петров", "Иван". Просто со словом "Иван", выводятся такие люди, как "Сидоров Иван".
Цитировать
$sql .= " AGAINST ({$text} IN BOOLEAN MODE)";
Вообще то вопрос относится к компоненту k2, но в данном разделе ответа не дождешься.
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

SmiP

  • Захожу иногда
  • 264
  • 35 / 0
Re: Поиск по фразе целиком
« Ответ #1 : 02.02.2013, 15:07:54 »
Чтобы не ждать тык
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #2 : 02.02.2013, 18:16:11 »
Я уже перелазил куча сайтов, где описывается подобная тема. Однако не получается.
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #3 : 03.02.2013, 10:07:01 »
Разве никто в этом не разбирается?
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #4 : 05.02.2013, 14:14:21 »
Может за денежку кто сделает?
Вот часть кода из файла ...\components\com_k2\models\itemlist.php, который, как я думаю, отвечает за этот поиск
Цитировать
function prepareSearch($search)
    {

        jimport('joomla.filesystem.file');
        $db = JFactory::getDBO();
        $language = JFactory::getLanguage();
        $defaultLang = $language->getDefault();
        $currentLang = $language->getTag();
        $length = JString::strlen($search);
        $sql = '';

        if (JRequest::getVar('categories'))
        {
            $categories = @explode(',', JRequest::getVar('categories'));
            JArrayHelper::toInteger($categories);
            $sql .= " AND i.catid IN (".@implode(',', $categories).") ";
        }

        if (empty($search))
        {
            return $sql;
        }

        if (JString::substr($search, 0, 1) == '"' && JString::substr($search, $length - 1, 1) == '"')
        {
            $type = 'exact';
        }
        else
        {
            $type = 'any';
        }

        if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $currentLang != $defaultLang)
        {

            $conditions = array();
            $search_ignore = array();

            $ignoreFile = $language->getLanguagePath().DS.$currentLang.DS.$currentLang.'.ignore.php';

            if (JFile::exists($ignoreFile))
            {
                include $ignoreFile;
            }

            if ($type == 'exact')
            {

                $word = JString::substr($search, 1, $length - 2);

                if (JString::strlen($word) > 3 && !in_array($word, $search_ignore))
                {
                    $escaped = K2_JVERSION == '15' ? $db->getEscaped($word, true) : $db->escape($word, true);
                    $word = $db->Quote('%'.$escaped.'%', false);

                    $jfQuery = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
                    $jfQuery .= " WHERE jfc.reference_table = 'k2_items'";
                    $jfQuery .= " AND jfl.code=".$db->Quote($currentLang);
                    $jfQuery .= " AND jfc.published=1";
                    $jfQuery .= " AND jfc.value LIKE ".$word;
                    $jfQuery .= " AND (jfc.reference_field = 'extra_fields_search'
               )";
                    $db->setQuery($jfQuery);
                    $result = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
                    $result = @array_unique($result);
                    JArrayHelper::toInteger($result);
                    if (count($result))
                    {
                        $conditions[] = "i.id IN(".implode(',', $result).")";
                    }

                }

            }
            else
            {
                $search = explode(' ', JString::strtolower($search));
                foreach ($search as $searchword)
                {

                    if (JString::strlen($searchword) > 3 && !in_array($searchword, $search_ignore))
                    {

                        $escaped = K2_JVERSION == '15' ? $db->getEscaped($searchword, true) : $db->escape($searchword, true);
                        $word = $db->Quote('%'.$escaped.'%', false);

                        $jfQuery = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
                        $jfQuery .= " WHERE jfc.reference_table = 'k2_items'";
                        $jfQuery .= " AND jfl.code=".$db->Quote($currentLang);
                        $jfQuery .= " AND jfc.published=1";
                        $jfQuery .= " AND jfc.value LIKE ".$word;
                        $jfQuery .= " AND (jfc.reference_field = 'extra_fields_search'                           
                  )";
                        $db->setQuery($jfQuery);
                        $result = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
                        $result = @array_unique($result);
                        foreach ($result as $id)
                        {
                            $allIDs[] = $id;
                        }

                        if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $currentLang != $defaultLang)
                        {

                            if (isset($allIDs) && count($allIDs))
                            {
                                JArrayHelper::toInteger($allIDs);
                                $conditions[] = "i.id IN(".implode(',', $allIDs).")";
                            }

                        }

                    }

                }

            }

            if (count($conditions))
            {
                $sql .= " AND (".implode(" OR ", $conditions).")";
            }

        }
        else
        {

            $sql .= " AND MATCH(i.extra_fields_search) ";
            if ($type == 'exact')
            {
                $text = JString::trim($search, '"');
                $escaped = K2_JVERSION == '15' ? $db->getEscaped($text, true) : $db->escape($text, true);
                $text = $db->Quote('"'.$db->getEscaped($text, true).'"', false);
            }
            else
            {
                $search = JString::str_ireplace('*', '', $search);
                $words = explode(' ', $search);
                for ($i = 0; $i < count($words); $i++)
                {
                    $words[$i] .= '*';
                }
                $search = implode(' ', $words);
                $escaped = K2_JVERSION == '15' ? $db->getEscaped($search, true) : $db->escape($search, true);
                $text = $db->Quote($escaped, false);
            }
            $sql .= " AGAINST ({$text} IN BOOLEAN MODE)";

        }

        return $sql;
    }
« Последнее редактирование: 05.02.2013, 14:17:34 от kisBoss »
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #5 : 06.02.2013, 11:39:47 »
Вопрос решен при помощи уважаемого Dron79 в разделе коммерчиских вопросов.
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Поиск по выборке

Автор Axelkz

Ответов: 3
Просмотров: 1499
Последний ответ 11.12.2019, 12:43:40
от beliyadm
Стандартный поиск если 0 результатов

Автор vladsklyar

Ответов: 1
Просмотров: 1108
Последний ответ 23.11.2016, 21:35:05
от vladsklyar
поиск как его включить?

Автор hels

Ответов: 2
Просмотров: 1082
Последний ответ 28.12.2015, 12:02:38
от hels
Поиск по отдельно-взятой категории

Автор Igoritaly

Ответов: 0
Просмотров: 923
Последний ответ 02.11.2015, 08:28:09
от Igoritaly
Опять про поиск на сайте

Автор Stasweb

Ответов: 2
Просмотров: 1325
Последний ответ 03.10.2015, 17:46:08
от voland