Битрикс: какого х*я ты ищешь в неактивных разделах

Столкнулся с проблемой что если родительский раздел не активен а элементы активны битрикс все равно индексирует их.

Чтоб исправить этот казус вешаем обработчик и запускаем переиндексацию. После в результатах поиска элементы неактивного раздела исчезнут.




<?
AddEventHandler('search', 'BeforeIndex', "onBeforeIndexHandler");

function onBeforeIndexHandler($arFields) {
    if ($arFields["MODULE_ID"] == "iblock") {
        $check = substr($arFields["ITEM_ID"], 0, 1);
        if ($check == "S") {
            $res = CIBlockSection::GetList(
                Array('SORT' => 'ASC')
                , Array("IBLOCK_ID" => $arFields["PARAM2"], "ACTIVE" => "Y", "ID" => substr($arFields["ITEM_ID"], 1), "GLOBAL_ACTIVE" => "Y")
                , false
                , Array("ID")
            );
        } else {
            $res = CIBlockElement::GetList(
                Array("SORT" => "ASC")
                , Array("IBLOCK_ID" => $arFields["PARAM2"], "ACTIVE" => "Y", "ID" => $arFields["ITEM_ID"], "SECTION_GLOBAL_ACTIVE" => "Y")
                , false
                , false
                , Array("ID")
            );
        }
        if (!$res->Fetch()) {
            unset($arFields["BODY"]);
            unset($arFields["TITLE"]);
        }
    }

    return $arFields;
}

Комментарии

  1. У меня не сработало решение сначала. НО, я заменил
    unset($arFields["BODY"])';
    unset($arFields["TITLE"]);
    на
    $arFields["BODY"]='';
    $arFields["TITLE"]='';
    и заработало. Очень благодарю :)
    Правда, это не решает такую проблему: товар привязан к двум категориям, одна из них деактивируется, но она была для него основной. В таком случае, при поиске товар будет находится (он же привязан в т.ч. активной категории), но с адресом в неактивной категории. На этот случай нужно дорабатывать этот обработчик чтобы заменялось $arFields['URL']

    ОтветитьУдалить
  2. После данной процедуры поиск вообще не работает - ничего не находит

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Bitrix: кнопка добавить в корзину

Битрикс: highloadblock значения в свойстве список