Поиск только по названию товара или по артикулу в Битрикс

Решение, как настроить в Битриксе поиск по каталогу, что бы не искал в описаниях, а только по названию товара и/или по артикулу

Поиск только по названию товара или по артикулу

Решение:
  1. Добавить этот код в init.php
  2. Запустить полную переиндексацию поиска
// Поиск только по названию товара
AddEventHandler("search", "BeforeIndex", array("SearchHandlers", "BeforeIndexHandler"));
class SearchHandlers
{
   function BeforeIndexHandler($arFields)
   {
      if($arFields["MODULE_ID"] == "iblock")
      {
         if(array_key_exists("BODY", $arFields) && substr($arFields["ITEM_ID"], 0, 1) != "S") // Только для элементов
         {
            $arFields["BODY"] = "";
         }

         if (substr($arFields["ITEM_ID"], 0, 1) == "S") // Только для разделов
         {
            $arFields['TITLE'] = "";
            $arFields["BODY"] = "";
            $arFields['TAGS'] = "";
         }
      }

      return $arFields;
   }
}

Поиск только по названию товара и артикулу
// Поиск только по названию товара и артикулу
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
 // создаем обработчик события "BeforeIndex"
function BeforeIndexHandler($arFields)
{
   if(!CModule::IncludeModule("iblock")){
      return $arFields;
   }
   if($arFields["MODULE_ID"] == "iblock" && $arFields["PARAM2"] == 17){ // ID инфоблока
      $db_props = CIBlockElement::GetProperty(                        // Запросим свойства индексируемого элемента
                                    $arFields["PARAM2"],         // BLOCK_ID индексируемого свойства
                                    $arFields["ITEM_ID"],          // ID индексируемого свойства
                                    array("sort" => "asc"),       // Сортировка (можно упустить)
                                    Array("CODE"=>"CML2_ARTICLE")); // CODE свойства (в данном случае артикул)
      if($ar_props = $db_props->Fetch()){
         $arFields["TITLE"] .= " ".$ar_props["VALUE"];   // Добавим свойство в конец заголовка индексируемого элемента
      }
      $arFields["BODY"] = "";
   }
   return $arFields;
}

Поиск по артикулу
// Поиск по артикулу
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
 // создаем обработчик события "BeforeIndex"
function BeforeIndexHandler($arFields)
{
   if(!CModule::IncludeModule("iblock")) // подключаем модуль
      return $arFields;
   if($arFields["MODULE_ID"] == "iblock")
   {
      $db_props = CIBlockElement::GetProperty(                        // Запросим свойства индексируемого элемента
                                    $arFields["PARAM2"],         // BLOCK_ID индексируемого свойства
                                    $arFields["ITEM_ID"],          // ID индексируемого свойства
                                    array("sort" => "asc"),       // Сортировка (можно упустить)
                                    Array("CODE"=>"CML2_ARTICLE")); // CODE свойства (в данном случае артикул)
      if($ar_props = $db_props->Fetch())
         $arFields["TITLE"] .= " ".$ar_props["VALUE"];   // Добавим свойство в конец заголовка индексируемого элемента
   }
   return $arFields; // вернём изменения
}

Комментарии (0)

Похожие решения:
Изменено: 23 06 2021
Просмотров: 7080