Почему не работает LOGIC =>OR в CIBlockSection::GetList?

Ссылка скопирована
1 ответ

Не работает, выводить все разделы:

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();

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

Проблема с 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',
    ),
);

$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 все еще остается, то возможно стоит обратиться за помощью к разработчикам или сообществу, чтобы получить дополнительную информацию и решение проблемы.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно