1С-Битрикс. Правильное исключение записи из индекса поиска
Код обработчика
/** * Created by olegpro.ru * User: Oleg Maksimenko <ya@olegpro.ru> * Date: 30.03.2015. Time: 18:06 */ namespace OlegPro\Classes\Handlers; use Bitrix\Main\Loader; use Bitrix\Sale\ProductTable; use OlegPro\Classes\Helpers; class Search { /** * @param array $arFields * @return mixed */ public static function beforeIndex($arFields) { if ($arFields['MODULE_ID'] == 'iblock' && $arFields['PARAM2'] == CATALOG_IBLOCK_ID && strlen($arFields['ITEM_ID']) > 0) { if (substr($arFields['ITEM_ID'], 0, 1) != 'S') { Helpers\ModuleManager::includeModule('iblock'); $element = Helpers\ElementCacheRuntime::getElementById($arFields['ITEM_ID']); if (isset($element) && is_array($element)) { Helpers\ModuleManager::includeModule('sale'); $catalogFields = ProductTable::getRowById($element['ID']); if (!isset($element['IBLOCK_SECTION_ID']) || !isset($catalogFields) || (isset($catalogFields, $catalogFields['QUANTITY']) && $catalogFields['QUANTITY'] <= 0) ) { $arFields['BODY'] = ''; $arFields['TITLE'] = ''; $arFields['TAGS'] = ''; } } } } return $arFields; } }
В принципе, самое главное — это
$arFields['BODY'] = ''; $arFields['TITLE'] = ''; $arFields['TAGS'] = '';
Обработчик выдран из рабочего проекта. Из индекса исключаются товары, у которых нет привязки к разделам и которых нет в наличии.
Его нужно сохранить в файл и положить по пути local/php_interface/classes/handlers/search.php
Добавить в init.php
Добавляем класс обработчика в автозагрузку и навешиваем его на событие BeforeIndex модуля поиск.
\Bitrix\Main\Loader::registerAutoLoadClasses(null, array( '\OlegPro\Classes\Handlers\Search' => '/local/php_interface/classes/handlers/search.php', )); $eventManager = \Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler('search', 'BeforeIndex', array('\OlegPro\Classes\Handlers\Search', 'beforeIndex'));
Пользуйтесь на здоровье.
1 комментарий
Выдает ошибку Fatal error: require_once(): Failed opening required '/var/www/u0717721/data/www/opt-tut.ru/local/php_interface/classes/handlers/search.php' (include_path='.:') in /var/www/u0717721/data/www/opt-tut.ru/bitrix/modules/main/lib/loader.php on line 321 Пробовал менять разрешения файла search.php, ничего не меняется( Подскажите, куда копать?