Меню
RSS
Отключить поиск по описаниям товаров в Битрикс
 
Отключить поиск по описаниям товаров в Битрикс

Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разработке сайтов на Битрикс. Сделать это можно, воспользовавшись событием "BeforeIndex" который вызывается перед индексацией элемента методом CSearch::Index.
 
Привет Михаил! Подскажи можно ли в область поиска добавить highloadblock? Куда надо копать в этом случае?
 
Скажите, а на текущей версии битиркса это работает? Просто у нас шаблон не на D7. код прописываем http://prntscr.com/gef8n0 поиск по анонсному описанию не отключается.
 
Цитата
Максим Иванов пишет:
С кажите, а на текущей версии битиркса это работает? Просто у нас шаблон не на D7. код прописываем http://prntscr.com/gef8n0 поиск по анонсному описанию не отключается.
Да, на текущей работает. Попробуйте запустить полную переиндексацию
 
Спасибо огромное! Это как раз то, что надо!
 
не работает
 
Цитата
mt subscribe пишет:
не работает
Что-то делаете не правильно
 
http://prntscr.com/h3gn9x - в init.php добавил код, http://prntscr.com/h3go80 - сделал переиндексацию. Где ошибка? Не работает - выдает найденное в описании.
 
Добрый день! Пытаюсь использовать ваше решение, но положительного результата не добился.
Если вставляю код в файл, который находится в local , то сайт ложится
Если в файл, который находится в bitrix, то после переиндексации поиска нету никаких изменений на странице результатов поиска... могли бы подсказать в чем может быть дело?  
 
У меня заработало... тут ID инфоблока надо прописать
+ я продублировал тот же код в папке  bitrix php_interface init.php
 
К сожалению через пару месяцев данный скрипт перестал работать. Основные изменения на сайте в это время:перенос на VPS настройка агентов на cron ну и так по мелочи.... не знаю из за чего данный скрипт перестал работать....
Полазив по форумам удалось найти вот такой скрипт
Код
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;
   }
}

Установил его в  bitrix php_interface init.php и все заработало
Изменено: Михаил Базаров - 26.08.2024 13:20:05
 
Проверено, работает!
Не совсем только понятно почему
Код
// $arFields["BODY"] = str_replace (CSearch::KillTags($arElement[$value]) , "", CSearch::KillTags($arFields["BODY"]) );
// а не  
$arFields["BODY"] = "";
Боимся покалечить индекс который хотим удалить?
 
Цитата
Николай Сухих пишет:
Проверено, работает!
Не совсем только понятно почему
Код
 // $arFields["BODY"] = str_replace (CSearch::KillTags($arElement[$value]) , "", CSearch::KillTags($arFields["BODY"]) );
// а не  
$arFields["BODY"] = ""; 
Боимся покалечить индекс который хотим удалить?
Сам отвечу: Боимся удалить из индекса свойства :)
p.s. Спасибо за статью.
 
Все работает, нужно сделать полную переиндексацию (cнять галочку "Переиндексировать только измененные"). Ну и если есть свой модуль, то в него запихнуть, а не в init.php
 
Этот скрипт не работает, если в описании встречаются пробелы  .
В таком случае нужно дополнительно вырезать такие символы из описаний.
 
после установки скрипта, почему то сайт падает. Пробовал и в local и в bitrix, не получается. В чем может быть проблема? Установлено решение от INTEC Universe
 
Проблему решил заключив код в короткий тег - <?
Не забудьте добавить в $arrIblock = array(...); вместо точек, свой id блок
Итоговый код выглядит так:
Код
<?
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
function BeforeIndexHandler($arFields)
{
    $arrIblock = array(49);
    $arDelFields = array(
        "DETAIL_TEXT",
        "PREVIEW_TEXT"
    );
    if (
        CModule::IncludeModule('iblock')
        && $arFields["MODULE_ID"] == 'iblock'
        && in_array($arFields["PARAM2"], $arrIblock)
        && intval($arFields["ITEM_ID"]) > 0
    ) {
        $dbElement = CIblockElement::GetByID($arFields["ITEM_ID"]);
        if ($arElement = $dbElement->Fetch()) {
            foreach ($arDelFields as $value) {
                if (isset ($arElement[$value]) && strlen($arElement[$value]) > 0) {
                    $arFields["BODY"] = str_replace(CSearch::KillTags($arElement[$value]), "", CSearch::KillTags($arFields["BODY"]));
                }
            }
        }
        return $arFields;
    }
}

?>
Изменено: Михаил Базаров - 28.08.2024 13:54:49
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Умный фильтр во всплывающей панели на мобильных.

Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень красиво отображается на мобильных...

Дать пользователю возможность быстро отредактировать материал

На одном из разрабатываемых сайтов, пользователи формируют его контент. После регистрации, становится доступен персональ...

Получить множественное пользовательское поле раздела. Значения множественного UF_ поля через API

Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно получить и вывести всю информац...

Следующая/предыдущая новость/статья при просмотре подробной в Битрикс

Странное дело, в Битрикс по умолчанию, отсутсвует функционал для навигации внутри новостей или статей типа: "Следующая/...

Очистить брошенные корзины с помощью API 1С-Битрикс

Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их очистить. Включая и корзины заре...

Показ страницы сайта в боковом слайдере, на примере всплывающей формы обратной связи.

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.In...

Input Type File, множественный с дропзоной и показом превью

Задача: Сделать возможность загрузки файлов в множественный input type="file" c помощью drag&drop и показом превью загру...

Вывести минимальную цену самого дешевого торгового предложения

Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда требуется вывести минимальную ц...

Уникальная СЕО информация для каждого торгового предложения в каталоге 1С-Битрикс

Задача: реализовать уникальную мета-информацию для каждого SKU в каталоге. У каждого ТП должны быть свои: заголовок h1, ...