1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

Обсуждение k2 tools модификация поиска

Тема в разделе "Joomla", создана пользователем a777d2, 27 сен 2015.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
Модераторы: arman29, DMS, NightHunter
  1. a777d2

    a777d2 Создатель

    Регистр.:
    17 сен 2012
    Сообщения:
    32
    Симпатии:
    7
    Добрый день, в продолжении темы https://www.nulled.cc/threads/267074/
    Мы добавили 2 новых поля в компонент k2 и нам нужно сделать поиск по этим полям, есть стандарный модуль k2 tools search, его то мы и будем править!

    Начнем...
    К примеру мы создали 2 поля, это artikul и vincode (для автомобильного сайта)

    Нужно править всего 2 файла:
    Первое идем в плагин /plugins/search/k2/k2.php

    Номер строчки 104, и добавляем в запрос наши значения
    Код:
     if ($phrase == 'exact')
                {
                    $text = JString::trim($text, '"');
                    $escaped = K2_JVERSION == '15' ? $db->getEscaped($text, true) : $db->escape($text, true);
                    $quoted = $db->Quote($escaped);
                    $where = " ( LOWER(i.title) = ".$quoted." OR LOWER(i.artikul) = ".$quoted." OR LOWER(i.vincode) = ".$quoted." OR LOWER(i.introtext) = ".$quoted." OR LOWER(i.`fulltext`) = ".$quoted." OR LOWER(i.extra_fields_search) = ".$quoted." OR LOWER(i.image_caption) = ".$quoted." OR LOWER(i.image_credits) = ".$quoted." OR LOWER(i.video_caption) = ".$quoted." OR LOWER(i.video_credits) = ".$quoted." OR LOWER(i.metadesc) = ".$quoted." OR LOWER(i.metakey) = ".$quoted.") ";
                }
                else
                {
                    $escaped = K2_JVERSION == '15' ? $db->getEscaped($text, true) : $db->escape($text, true);
                    $quoted = $db->Quote('%'.$escaped.'%', false);
                    $where = " ( LOWER(i.title) LIKE ".$quoted." OR LOWER(i.artikul) LIKE ".$quoted." OR LOWER(i.vincode) LIKE ".$quoted." OR LOWER(i.introtext) LIKE ".$quoted." OR LOWER(i.`fulltext`) LIKE ".$quoted." OR LOWER(i.extra_fields_search) LIKE ".$quoted." OR LOWER(i.image_caption) LIKE ".$quoted." OR LOWER(i.image_credits) LIKE ".$quoted." OR LOWER(i.video_caption) LIKE ".$quoted." OR LOWER(i.video_credits) LIKE ".$quoted." OR LOWER(i.metadesc) LIKE ".$quoted." OR LOWER(i.metakey) LIKE ".$quoted.") ";
                }
    Номер строчки 123, добавляем в запрос наши значения
    Код:
    $query = "
            SELECT i.title AS title,
            i.metadesc,
            i.metakey,
            c.name as section,
            i.image_caption,
            i.artikul,
            i.vincode,
            i.image_credits,
            i.video_caption,
            i.video_credits,
            i.extra_fields_search,
            i.created,
            CONCAT(i.introtext, i.fulltext) AS text,
            CASE WHEN CHAR_LENGTH(i.alias) THEN CONCAT_WS(':', i.id, i.alias) ELSE i.id END as slug,
            CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(':', c.id, c.alias) ELSE c.id END as catslug
            FROM #__k2_items AS i
            INNER JOIN #__k2_categories AS c ON c.id=i.catid AND c.access {$accessCheck}
            WHERE (".$where.")
            AND i.trash = 0
            AND i.published = 1
            AND i.access {$accessCheck}
            AND c.published = 1
            AND c.access {$accessCheck}
            AND c.trash = 0
            AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )
            AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )";
    Номер строчки 195, добавляем в запрос наши значения
    Код:
    $results = array();
            if (count($rows))
            {
                foreach ($rows as $row)
                {
                    $new_row = array();
                    foreach ($row as $key => $item)
                    {
                        $item->browsernav = '';
                        $item->tag = $searchText;
                        if (searchHelper::checkNoHTML($item, $searchText, array('text', 'title', 'artikul', 'vincode', 'metakey', 'metadesc', 'section', 'image_caption', 'image_credits', 'video_caption', 'video_credits', 'extra_fields_search', 'tag')))
                        {
                            $new_row[] = $item;
                        }
                    }
                    $results = array_merge($results, (array)$new_row);
                }
            }

    Далее идем править файл k2: /components/com_k2/models/itemlist.php

    Номер строчки 1050, добавляем в запрос наши значения
    Код:
    $jfQuery .= " AND (jfc.reference_field = 'title'
                                    OR jfc.reference_field = 'artikul'
                                    OR jfc.reference_field = 'vincode'
                                    OR jfc.reference_field = 'introtext'
                                    OR jfc.reference_field = 'fulltext'
                                    OR jfc.reference_field = 'image_caption'
                                    OR jfc.reference_field = 'image_credits'
                                    OR jfc.reference_field = 'video_caption'
                                    OR jfc.reference_field = 'video_credits'
                                    OR jfc.reference_field = 'extra_fields_search'
                                    OR jfc.reference_field = 'metadesc'
                                    OR jfc.reference_field = 'metakey'
                        )";
    Номер строчки 1093, добавляем в запрос наши значения
    Код:
    $jfQuery .= " AND (jfc.reference_field = 'title'
                                        OR jfc.reference_field = 'artikul'
                                        OR jfc.reference_field = 'vincode'
                                        OR jfc.reference_field = 'introtext'
                                        OR jfc.reference_field = 'fulltext'
                                        OR jfc.reference_field = 'image_caption'
                                        OR jfc.reference_field = 'image_credits'
                                        OR jfc.reference_field = 'video_caption'
                                        OR jfc.reference_field = 'video_credits'
                                        OR jfc.reference_field = 'extra_fields_search'
                                        OR jfc.reference_field = 'metadesc'
                                        OR jfc.reference_field = 'metakey'
                            )";
    Номер строчки 1143, добавляем в запрос наши значения
    Код:
    if ($type == 'exact')
                {
                    $text = JString::trim($search, '"');
                    $escaped = K2_JVERSION == '15' ? $db->getEscaped($text, true) : $db->escape($text, true);
                    $quoted = $db->Quote('%'.$escaped.'%', false);
                    $sql .= " AND ( LOWER(i.title) = ".$quoted." OR LOWER(i.artikul) = ".$quoted." OR LOWER(i.vincode) = ".$quoted." OR LOWER(i.introtext) = ".$quoted." OR LOWER(i.`fulltext`) = ".$quoted." OR LOWER(i.extra_fields_search) = ".$quoted." OR LOWER(i.image_caption) = ".$quoted." OR LOWER(i.image_credits) = ".$quoted." OR LOWER(i.video_caption) = ".$quoted." OR LOWER(i.video_credits) = ".$quoted." OR LOWER(i.metadesc) = ".$quoted." OR LOWER(i.metakey) = ".$quoted.") ";
                }
                else
                {
                    $escaped = K2_JVERSION == '15' ? $db->getEscaped($search, true) : $db->escape($search, true);
                    $text = $db->Quote($escaped);
                    $sql .= " AND ( LOWER(i.title) LIKE ".$quoted." OR LOWER(i.artikul) LIKE ".$quoted." OR LOWER(i.vincode) LIKE ".$quoted." OR LOWER(i.introtext) LIKE ".$quoted." OR LOWER(i.`fulltext`) LIKE ".$quoted." OR LOWER(i.extra_fields_search) LIKE ".$quoted." OR LOWER(i.image_caption) LIKE ".$quoted." OR LOWER(i.image_credits) LIKE ".$quoted." OR LOWER(i.video_caption) LIKE ".$quoted." OR LOWER(i.video_credits) LIKE ".$quoted." OR LOWER(i.metadesc) LIKE ".$quoted." OR LOWER(i.metakey) LIKE ".$quoted.") ";
                }
    Вот и все, всем спасибо) Если возникнут вопросы, с радостью отвечу!
     
  2. Naterius

    Naterius Постоялец

    Регистр.:
    29 июл 2013
    Сообщения:
    60
    Симпатии:
    3
    Вопрос как сделать что бы поиск проходи по ново добавленным полям в двух базах? ( к примеру есть база партнеров и своя база)
     
  3. a777d2

    a777d2 Создатель

    Регистр.:
    17 сен 2012
    Сообщения:
    32
    Симпатии:
    7
    Ты имеешь ввиду, чтобы поиск искал с 2 баз, 2 разных сайтов Joomla?
     
  4. Naterius

    Naterius Постоялец

    Регистр.:
    29 июл 2013
    Сообщения:
    60
    Симпатии:
    3
    1 база сайт джумла, а вторая база приложения. (она на msql, и находится на другом сервере).
    Вопрос таков как сделать поиск по этим двум базам.
    а) при условии что поиск выполняется по двум одинаковым названием полей (тот же артикул и винкод есть в обеих базах)
    б) при условии что название полей в базах разные (артикул и винкод в джумле, и артикул-1 и винкод-1 во второй базе)
     
  5. a777d2

    a777d2 Создатель

    Регистр.:
    17 сен 2012
    Сообщения:
    32
    Симпатии:
    7
    Стандартный модуль врятли получиться переделать под это, так как плагин поиска подключается к базе Joomla, проще написать свой модуль поиска, и уже в нем указать подключение к 2 базам, и запросом выводить данные!
    Первое что приходит, это из первой базы вывести значения и поместить в массив, и после делать вывод значений из второй базы по массиву!

    Запрос по массиву может выглядеть таким образом
    Код:
    $array = array(1, 2, 3, 4, 5);
    $result=mysql_query('SELECT * FROM basejoomla WHERE artikul IN (' . implode(',', array_map('intval', $array)) . ')');
     
    Последнее редактирование модератором: 29 сен 2015