Разработка кастомных страниц на D7 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка кастомных страниц на D7 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка кастомных страниц на D7 1С-Битрикс

Кастомная страница в административной части Битрикс — это не просто HTML-файл, брошенный в /bitrix/admin/. Это контроллер, который проверяет права, принимает параметры, выполняет бизнес-логику и рендерит результат через шаблон. D7 предоставляет для этого механизм \Bitrix\Main\Engine\Controller с маршрутизацией, проверкой CSRF и сессиями без самописного велосипеда.

Два подхода к кастомным страницам

Классический admin-файл (/bitrix/admin/my_page.php) — простейший вариант, пригодный для вспомогательных инструментов:

<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

Loader::includeModule('my.module');

// Проверка прав
if (!$APPLICATION->IsAdminPage() || !\CMain::GetUserRight("main") >= "S") {
    $APPLICATION->AuthForm("Доступ запрещён");
}

$APPLICATION->SetTitle("Мой инструмент");

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");

// Вывод содержимого страницы
?>
<form method="post" action="<?= $APPLICATION->GetCurPage() ?>">
    <?= bitrix_sessid_post() ?>
    <!-- поля формы -->
    <input type="submit" value="Выполнить">
</form>
<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php");

MVC через Controller — правильный путь для страниц с логикой:

namespace MyProject\Controllers;

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

class ReportController extends Controller
{
    public function configureActions(): array
    {
        return [
            'getReport' => [
                'prefilters' => [
                    new ActionFilter\Authentication(),
                    new ActionFilter\HttpMethod(['GET', 'POST']),
                    new ActionFilter\Csrf(),
                ],
            ],
        ];
    }

    public function getReportAction(int $periodDays = 30): array
    {
        // права проверяются в prefilters
        $data = \MyProject\Services\ReportService::build($periodDays);
        return ['data' => $data, 'total' => count($data)];
    }
}

Маршрутизация в Битрикс

Для контроллеров нужна регистрация маршрутов. В /local/php_interface/init.php или в методе модуля:

\Bitrix\Main\Routing\Router::getInstance()->add(
    '/local/my-tool/report/',
    ['controller' => '\MyProject\Controllers\ReportController', 'action' => 'getReport'],
    'GET'
);

Альтернатива — UrlManager в конфиге модуля или файл /local/routes.php (Битрикс 22+, нужно включить в настройках ядра).

Кастомная страница публичной части

Для публичных страниц — стандартный механизм компонентов. Но иногда нужна страница вне компонентной системы: утилита, колбек от платёжного шлюза, вебхук. Тогда создаётся файл страницы с подключением ядра:

<?php
define('STOP_STATISTICS', true);   // не пишем в статистику
define('NO_AGENT_STATISTIC', true); // не запускаем агенты
define('NOT_CHECK_PERMISSIONS', true); // отключаем проверку прав Битрикс
define('NO_LANG_FILES', false);

require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
// теперь доступны все классы Битрикс

// Вся логика через D7
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
if (!$request->isPost()) {
    http_response_code(405);
    exit;
}

// ... обработка

Постраничная навигация D7

Для страниц со списками данных:

use Bitrix\Main\UI\PageNavigation;

$nav = new PageNavigation('page');
$nav->allowAllRecords(false)
    ->setPageSize(20)
    ->initFromUri();

$result = \MyProject\Storage\OrderLogTable::getList([
    'select'     => ['*'],
    'order'      => ['ID' => 'DESC'],
    'count_total' => true,
    'offset'     => $nav->getOffset(),
    'limit'      => $nav->getLimit(),
]);

$nav->setRecordCount($result->getCount());
// Рендер постранички через $nav->getPageNavString(...)

Права доступа на кастомных страницах

Проверка прав на основе групп пользователей:

global $USER;

if (!$USER->IsAdmin() && !$USER->IsInGroup([MANAGER_GROUP_ID])) {
    LocalRedirect('/access-denied/');
}

Для модульных страниц — через API прав доступа Битрикс:

if (\CModule::IncludeModule('my.module')) {
    $rights = \CMyModule::GetCurrentUserPermissions();
    if ($rights < MY_MODULE_PERMISSION_WRITE) {
        ShowError('Недостаточно прав');
        exit;
    }
}

Интеграция с UI Битрикс: гриды и фильтры

Для административных страниц со списками — готовый UI: CAdminList, CAdminFilter. Это обеспечивает консистентный с ядром вид:

$adminList = new CAdminList('my_list', $by, $order);
$adminList->AddColumn(['id' => 'ID', 'content' => 'ID', 'sort' => 'ID']);
$adminList->AddColumn(['id' => 'NAME', 'content' => 'Название', 'sort' => 'NAME']);

while ($row = $result->fetch()) {
    $adminRow = $adminList->AddRow($row['ID'], $row);
    $adminRow->AddActions([
        ['text' => 'Изменить', 'href' => '/bitrix/admin/my_edit.php?ID=' . $row['ID']],
        ['text' => 'Удалить', 'action' => "if(confirm('Удалить?')) window.location='...';"],
    ]);
}
$adminList->DisplayList();

Сроки

Задача Срок
Простая admin-страница (форма + вывод данных) 2–3 дня
Страница со списком, постраничкой, фильтром и действиями 4–7 дней
Полный CRUD-интерфейс для кастомной сущности с правами и логами 1.5–2.5 недели

Кастомная страница на D7 — это не замена компонентной системе. Это инструмент для задач, которые не укладываются в стандартную модель: инструменты администратора, интерфейсы импорта, дашборды с агрегированными данными. Написанные правильно, они не конфликтуют с ядром при обновлениях.