Как добавить страницу в админку Bitrix?

Как добавить страницу в админку Bitrix??

Я это делаю так.

Допустим, мне нужно сделать хитрую вгружалку новых студентов из файла Excell в инфоблок. При том, делать это планируется со страницы в админке. Чтобы этим могли заниматься только авторизованные, ну и вообще чтобы не отсвечивало нигде.

Выгружалку назовём ИмпортСтудентс. Знаю, звучит глупо, но для примера сойдёт.

Кстати, код самой вгружалки я не привожу, ибо пост не про это.

Поехали! Ну или поползли.

1. Сначала идем в папку /bitrix/admin и откладываем там файл lex_import_students.php

Вот содержимое этого файла:

<?php 
require_once($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/lex_import_students.php"); 
?>

По сути здесь происходит подгрузка содержимого файла с тем же имененм, но лежащего в другом месте. Мне удобнее когда все мои доделки лежат в одной папке — local.

Сразу откладываем пустой файл lex_import_students.php в /local/php_interface/include/. Чуть позже мы к нему вернёмся. А пока…

2. Теперь добавляем пункт в меню админки. Тут придется поискать.

Формально нам нужно кое-что добавить в init.php в папке /local/php_interface
Но чаще всего, в этом файле не сами директивы, а ссылки на другие файлы.

В моём случае эти ссылки/вложения выглядят так:

require('include/functions.php'); //Функции
require('include/const.php'); //Константы
require('include/events.php'); //События

Поэтому, для добавления нужного кода я иду в events.php и добавляю такой вот код:

/**
 * Добавляю в меню страницу с таблицей
 */

AddEventHandler("main", "OnBuildGlobalMenu", "ModifiAdminMenu");
function ModifiAdminMenu(&$adminMenu, &$moduleMenu){
    /* Тут был код вставки пункта меню в админку, но я его убрал из примера */
    
    /* А вот наш код всавки пункта меню */
    $moduleMenu[] = array(
      "parent_menu" => "global_menu_content", // в раздел "Сервис"
      "section" => "Импорт студентов",
      "sort"        => 11,                    // сортировка пункта меню - поднимем повыше
      "url"         => "/bitrix/admin/lex_import_students.php?lang=".LANG,  // ссылка на пункте меню
      "text"        => 'Импортируем студентов из таблицы Excel в инфоблок',
      "title"       => 'Импортируем студентов в инфоблок',
      "icon"        => "smile_menu_icon", // малая иконка
      "page_icon"   => "smile_menu_icon", // большая иконка
      "items_id"    => "menu_testpagelex",  // идентификатор ветви
      "items"       => array()          // остальные уровни меню
    );
}

3. Отлично. Пунтк меню добавился. Переходим в файл /local/php_interface/include/lex_import_students.php (который добавили ранее) и вставляем в него вот такое содержимое.

<?
/** @global CMain $APPLICATION */
/** @global CDatabase $DB */
/** @global CUser $USER */

use Bitrix\Main\Loader,
  Bitrix\Main,
  Bitrix\Iblock,
  Bitrix\Currency,
  Bitrix\Catalog;

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
Loader::includeModule("iblock");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/prolog.php");
IncludeModuleLangFile(__FILE__);
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/interface/admin_lib.php");
CJSCore::Init(["jquery"]);
$APPLICATION->SetTitle('Импорт студентов');
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>

Ура!

<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); ?>

Вместо «Ура!» добавим свой код.

Готово.

Напишите комментарий