Почему не работает LOGIC =>OR в CIBlockSection::GetList?
Не работает, выводить все разделы:
CIBlockSection::GetList( Array('NAME'=>'ASC'), Array( 'IBLOCK_TYPE' => 'catalog', 'IBLOCK_ID' => '1', 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y', Array( 'LOGIC' => 'OR', Array('NAME' => '%Test%'), Array('NAME' => '%Test2%'), Array('NAME' => '%Test3%') ) )); |
CIBlockSection::GetList( Array('NAME'=>'ASC'), Array( 'IBLOCK_TYPE' => 'catalog', 'IBLOCK_ID' => '1', 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y', Array( 'LOGIC' => 'OR', Array('NAME' => '%Test%'), Array('NAME' => '%Test2%'), Array('NAME' => '%Test3%') ) ));
Работает, выводить раздел с именем - Test:
CIBlockSection::GetList( Array('NAME'=>'ASC'), Array( 'IBLOCK_TYPE' => 'catalog', 'IBLOCK_ID' => '1', 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y', 'NAME' => '%Test%', )); |
CIBlockSection::GetList( Array('NAME'=>'ASC'), Array( 'IBLOCK_TYPE' => 'catalog', 'IBLOCK_ID' => '1', 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y', 'NAME' => '%Test%', ));
Пытаюсь вывести разделы с именем: Test,Test2 и Test3., но выводить все разделы.
Если укажу без LOGIC, то выводить нужный раздел.
Дополнительно:
К сожалению, LOGIC в методе CIBlockSection::GetList нет. Сложная логика есть только в методе GetList класса CIBlockElement.
Попробуйте SectionTable и query.
- Спасибо за ответ.
Помогло:$sections = BitrixIblockSectionTable::query() ->where('IBLOCK_ID', 1) ->where('ACTIVE', 'Y') ->where('GLOBAL_ACTIVE', 'Y') ->where(BitrixMainEntityQuery::filter() ->logic('or') ->where([ ['NAME','like','%Test%'], ['NAME','like','%Test1%'] ]) ) ->setSelect(['ID','IBLOCK_ID','NAME','PICTURE','DESCRIPTION','DETAIL_PICTURE','SECTION_PAGE_URL' => 'IBLOCK.SECTION_PAGE_URL']) ->exec()->fetchAll();
$sections = BitrixIblockSectionTable::query() ->where('IBLOCK_ID', 1) ->where('ACTIVE', 'Y') ->where('GLOBAL_ACTIVE', 'Y') ->where(BitrixMainEntityQuery::filter() ->logic('or') ->where([ ['NAME','like','%Test%'], ['NAME','like','%Test1%'] ]) ) ->setSelect(['ID','IBLOCK_ID','NAME','PICTURE','DESCRIPTION','DETAIL_PICTURE','SECTION_PAGE_URL' => 'IBLOCK.SECTION_PAGE_URL']) ->exec()->fetchAll();
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с LOGIC => OR в методе CIBlockSection::GetList может возникать по нескольким причинам. Одной из возможных причин может быть неправильное использование синтаксиса или неправильное понимание того, как работает данный параметр.
Параметр LOGIC => OR в методе CIBlockSection::GetList используется для указания, каким образом должны быть связаны условия фильтрации. Когда LOGIC => OR установлен, это означает, что любое из условий фильтрации должно быть выполнено для того, чтобы элемент был включен в результат.
Пример использования LOGIC => OR в методе CIBlockSection::GetList:
$arFilter = array( 'IBLOCK_ID' => $iblockId, 'SECTION_ID' => $sectionId, 'LOGIC' => 'OR', array( '>=LEFT_MARGIN' => $leftMargin, ' $rightMargin, ), array( 'NAME' => 'Test', ), );
Если у вас возникают проблемы с использованием LOGIC => OR, то следует проверить следующие моменты:
1. Правильность синтаксиса: убедитесь, что вы правильно указали значение параметра LOGIC => OR и что все условия фильтрации заданы в нужном формате.
2. Правильность логики фильтрации: убедитесь, что вы правильно понимаете, как работает параметр LOGIC => OR и что ваше условие фильтрации соответствует вашим ожиданиям.
3. Проверьте результаты запроса: если все остальное выглядит правильно, но вы все еще получаете неправильные результаты, попробуйте вывести на экран результаты запроса и проверьте, какие элементы были включены в результат.
Если после выполнения всех этих шагов проблема с LOGIC => OR в методе CIBlockSection::GetList все еще остается, то возможно стоит обратиться за помощью к разработчикам или сообществу, чтобы получить дополнительную информацию и решение проблемы.