Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Запрет на поиск в подразделе

00 голосов
6
Есть ли возможность, стандартными средствами запретить поиск в одном из подразделов каталога?
спросил 29 Апр, 13 от OPEX (720 баллов)

6 Ответы

00 голосов
пишем обработчик события BeforeIndex (http://www.1c-bitrix.ru/api_help/search/events/beforeindex.php) вида:
Код
if(
    $arFields["MODULE_ID"] == "iblock"
    && $arFields["PARAM1"] == <my iblock type id>
    && $arFields["PARAM2"] == <my iblock id>
)
{
   if(substr($arFields["ITEM_ID"], 0, 1) === "S") //проверяем принадлежность группы к "запрещенной"
   {
     $SECTION_ID = substr($arFields["ITEM_ID"], 1);
     например методом http://www.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getnavchain.php
   }
   else //проверяем принадлежность элемента к "запрещенному разделу"
   {
     $ELEMENT_ID = $arFields["ITEM_ID"];
     например методом http://www.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getelementgroups.php
     и http://www.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getnavchain.php
   }
   if($bIgnore)
   {
     unset($arFields["BODY"]);
     unset($arFields["TITLE"]);
   }
}
return $arFields;
ответил 29 Апр, 13 от Miso (740 баллов)
00 голосов
Нет.
ответил 29 Апр, 13 от Pomnep (13,960 баллов)
00 голосов
Чуть не забыл!
Провести переиндексацию.
ответил 27 Июнь, 13 от Miso (740 баллов)
00 голосов
Предлагаю завести хранение SECTION_ID в PARAM3 и зарезервировать PARAM4 под нужны разработчиков.
ответил 01 Окт, 13 от Siemka (1,020 баллов)
00 голосов
Цитата
Maxim Smirnov пишет:
пишем обработчик события BeforeIndex (http://www.1c-bitrix.ru/api_help/sear...index.php) вида:

Код

unset($arFields["BODY"]);
unset($arFields["TITLE"]);



Именно этот момент не освещен в документации. По аналогии с событиями инфоблоков попытался вернуть false в функции обработчике - индекс добавился.
Ни единой концепции, ни освещения в документации - что-то уж надо поправить =) Даже пожалуй не поленюсь в комментах к документации написать.
ответил 01 Янв, 14 от HacteHa (100 баллов)
00 голосов
даа... не делайти так - у вас ничего не получится... Надо делать так:
Код
$arFields["BODY"] = "";
$arFields["TITLE"] = ""; 


Кстати, к разработчикам - когда мы поступаем подобным образом, число переиндексированных элементов на форме переиндексации показывается неправильно. Не учиытваются удаленные записи.
ответил 18 Апр, 14 от HacteHa (100 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
3 ответов
0 голосов
3 ответов
0 голосов
1 ответ
спросил 23 Авг, 13 от Exet (380 баллов)