Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Битрикс как сделать фильтр для bitrix:news.list и как использовать API префильтров

Вопрос задан: 31 мая 2026 в 09:00 | Просмотров: 33 Использованные MCP инструменты: searchDocs, liveApiListComponents, liveApiFindFunction, liveApiFindByReflection, liveApiFindByNamespace, liveApiGetClassCode, liveApiGetDocResource

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

Фильтр для компонента bitrix:news.list

У компонента bitrix:news.list есть параметр FILTER_NAME. В него передаётся имя переменной (строкой), которая содержит массив с дополнительными условиями фильтрации элементов.

Как это работает:

  1. Вы задаёте в параметрах компонента FILTER_NAME = 'myFilter'.
  2. Перед вызовом компонента создаёте глобальную переменную $GLOBALS['myFilter'] с массивом фильтра.
  3. Компонент автоматически применяет этот фильтр к выборке элементов через CIBlockElement::GetList.

Пример использования на странице:

<?php
// Задаём дополнительный фильтр: только активные, 
// с кодом раздела "news", сортировка по дате
$GLOBALS['myNewsFilter'] = [
    'ACTIVE'       => 'Y',
    'SECTION_CODE' => 'news',
];
?>
<?$APPLICATION->IncludeComponent(
    "bitrix:news.list",
    "",
    [
        "IBLOCK_ID"   => 2,
        "FILTER_NAME" => "myNewsFilter",
        "NEWS_COUNT"  => 10,
        "SORT_BY1"    => "ACTIVE_FROM",
        "SORT_ORDER1" => "DESC",
        "CACHE_TYPE"  => "A",
        "CACHE_TIME"  => 3600,
    ]
);?>

Доступные ключи фильтра — это поля элемента инфоблока (ACTIVE, NAME, CODE, ID, SECTION_ID, IBLOCK_SECTION_ID, ACTIVE_FROM и др.), а также свойства с префиксом PROPERTY_.

Пример фильтрации по свойству:

$GLOBALS['myNewsFilter'] = [
    '=PROPERTY_AUTHOR_VALUE' => 42,
];

Обратите внимание: для точного соответствия используйте оператор = (без него будет LIKE, что медленнее).

API префильтров (ActionFilter) в D7 Engine

Термин "префильтры" (prefilters) в Битрикс относится к ActionFilter — механизму контроллеров D7 Engine (пространство имён \Bitrix\Main\Engine\ActionFilter).

Префильтры выполняются до запуска действия контроллера и могут отменить его выполнение. Постфильтры (postfilters) выполняются после и могут изменить результат.

Основные встроенные префильтры:

  • \Bitrix\Main\Engine\ActionFilter\Authentication — проверка авторизации.
  • \Bitrix\Main\Engine\ActionFilter\HttpMethod — ограничение по HTTP-методу (GET/POST).
  • \Bitrix\Main\Engine\ActionFilter\Csrf — защита от CSRF.
  • \Bitrix\Main\Engine\ActionFilter\CloseSession — закрытие сессии до выполнения.
  • \Bitrix\Main\Engine\ActionFilter\Scope — ограничение по контексту (AJAX / REST).
  • \Bitrix\Main\Engine\ActionFilter\ContentType — проверка Content-Type.
  • \Bitrix\Main\Engine\ActionFilter\Cors — CORS-заголовки (обычно как постфильтр).

Как задать префильтры в контроллере:

<?php
namespace My\Module\Controller;

use Bitrix\Main\Engine\Controller;
use Bitrix\Main\Engine\ActionFilter;

class User extends Controller
{
    // Префильтры по умолчанию для ВСЕХ действий
    protected function getDefaultPreFilters(): array
    {
        return [
            new ActionFilter\Authentication(),
            new ActionFilter\HttpMethod([
                ActionFilter\HttpMethod::METHOD_POST,
            ]),
            new ActionFilter\Csrf(),
        ];
    }

    // Настройка фильтров для конкретных действий (дополнение/вычитание)
    public function configureActions(): array
    {
        return [
            'publicInfo' => [
                '-prefilters' => [
                    Authentication::class,  // убираем проверку авторизации
                ],
            ],
        ];
    }

    public function likeAction(int $likedUserId): array
    {
        // логика действия
        return ['success' => true];
    }

    public function publicInfoAction(): array
    {
        // доступно без авторизации
        return ['info' => 'public data'];
    }
}

Дополняющие и вычитающие фильтры (работают через ключи +prefilters / -prefilters):

public function configureActions(): array
{
    return [
        'index' => [
            '+prefilters' => [
                new ActionFilter\CloseSession(),   // добавить
            ],
            '-prefilters' => [
                ActionFilter\Authentication::class, // убрать
            ],
        ],
    ];
}

Создание собственного префильтра:

<?php
namespace My\Module\ActionFilter;

use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Main\Engine\ActionFilter\Base;

class MyCustomFilter extends Base
{
    public function onBeforeAction(Event $event): ?EventResult
    {
        if (!someCondition())
        {
            $this->addError(new \Bitrix\Main\Error('Доступ запрещён'));
            return new EventResult(EventResult::ERROR, null, null, $this);
        }
        return null; // пропускаем
    }

    public function onAfterAction(Event $event): ?EventResult
    {
        // можно подменить результат
        return null;
    }
}

Используйте префильтры в контроллерах для валидации, авторизации и проверок — это делает код модульным и переиспользуемым.

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Индивидуальная разработка магазина
от 250 000 руб. от 4-х недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 50 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Сайт компании
от 120 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее
Инфоресурс
от 100 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс