Как-то так случилось, что стала задача в разработке чего-то большего чем
компонент или шаблон с использованием API и функций php.
Если быть проще, то конечно можно собрать функции, классы и подрекуирить их в .../phpinterface/init.php , но красивее даже звучит - это разработка своего модуля. Это звучит гордо, круто и конечно же я взялся за это дело. Первое что, как всегда - Hello, но даже это хелло сделать не так уж и просто, для опытного пыхаря по сути это самый главный этап при решении этой задачи. Кроме этого я себе уяснил ещё из прочтения форумов и немного из документации (не люблю формальное обучение подсознательно, чтение сухой документации вызывает сонливость), что модуль - это набор классов и функций для работы в компонентах допустим или на страницах там.
Значит план такофф:
1. Открываем офф. документацию
2. И открываем редакцию (не демо) /bitrix/modules/
# пока элементарно, ну едем далее...
3. Делаем папку - spares (это папку в которой будэ лежать модул)
4. Заканчиваем с шуточками и начинаем работать.
Понеслась:Ещё раз. Наша задача закл. в том что бы набрать минимальный набор файлов и папок для заготовки под модуль.
1. Делаю такую структуру:
/spares/
/spares/prolog.php
/spares/include.php
/spares/options.php
/spares/admin/
/spares/admin/spares.php
/spares/admin/spares_index.php
/spares/admin/spares_edit.php
/spares/admin/menu.php
/spares/classes/general/test.php
/spares/classes/mysql/test.php
/spares/install/
/spares/install/index.php
/spares/install/step1.php
/spares/install/step2.php
/spares/install/unstep1.php
/spares/install/unstep2.php
/spares/install/version.php
/spares/install/admin/
/spares/install/admin/spares.php
/spares/install/admin/spares_index.php
/spares/install/admin/spares_edit.php
Это как бы минимум папку для развёртывания и удаления таблиц в базе данных пока упустил, там по ходу не так уж сложно, можно будет потом доставить.
/spares/prolog.php - пролог, должен быть подключён во всех административных скриптах.
Его код - это 2 константы:
<?
define("ADMIN_MODULE_NAME", "spares");
define("ADMIN_MODULE_ICON", "<img src=\"/bitrix/images/spares/spares.gif\" width=\"48\" height=\"48\" border=\"0\" >");
?> |
/spares/include.php - вот что я подсмотрел в одном из модулей, тот код что закоментированн, ну и по аналогии сделал под наш модулёк
<?
/*
global $DB;
$db_type = strtolower($DB->type);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/classes/".$db_type."/keeper.php");
*/
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/spares/classes/mysql/test.php");
?> |
/spares/options.php - то что получаем на странице настроек модулей, пока оставил пустым
/spares/admin/ помним что тут во всех файлах должен быть подключенн пролог
/spares/admin/menu.php - из документации можно состряпать массив в этом файле, подходящий для меню. Вот что у меня вышло:
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/spares/prolog.php");
$aMenu = array(
"parent_menu" => "global_menu_services",
"section" => "spares",
"sort" => 550,
"text" => "spares text",
"title"=> "spares title",
"url" => "spares_index.php",
"icon" => "",
"page_icon" => "",
"items_id" => "menu_spares",
"items" => array(
array(
"text" => "test 1",
"url" => "spares.php",
"more_url" => array("spares_edit.php"),
"title" => "spares items title"
)
)
);
return $aMenu;
?> |
/spares/admin/spares.php
/spares/admin/spares_index.php
/spares/admin/spares_edit.php
Эти файлы как бы и будут теми админскими файлами
Такой примерно код после очистки:
<?
define("ADMIN_MODULE_NAME", "spares");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/spares/prolog.php");
IncludeModuleLangFile(__FILE__);
/*
$RIGHT = $APPLICATION->GetGroupRight("perfmon");
if($RIGHT=="D")
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
*/
$APPLICATION->SetTitle("test tytle");
?> |
Потом как заработает - где-то ниже напишем hello world.
/spares/classes/general/test.php
/spares/classes/mysql/test.php
Там находяться классы, наследуються. Можно пока опустить, оставить пустыми. Хотя я там объявил класс в general а в mysql его пронаследовал.
Ну вот и добрались до /spares/install/. По ходу самая сложная работа будет с его реализацией. Папка служит для установки и удаления нашего модуля.
/spares/install/admin/spares.php
/spares/install/admin/spares_index.php
/spares/install/admin/spares_edit.php
Тут идёт такой код соответственно для каждого:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/spares/admin/spares.php");?> |
/spares/install/step1.php
/spares/install/step2.php
/spares/install/unstep1.php
/spares/install/unstep2.php
/spares/install/version.php
Это простые файлы, я их скопировал из действующего модуля и подправил немного. Это формы с данными, разобраться не составит труда.
/spares/install/index.php - тут находиться класс, расширяющий CModule
Я тоже взял его с действующего модуля. Убрал лишние методы. На глаз подправил что видел. Фактически вот тут и нужно нам будет писать в этих методах. Пока я его оставляю, копирую папку в /bitrix/modules/
И в админке - /bitrix/admin/module_admin.php уже его наблюдаю в таком виде:

Кнопка установить - ведёт на наши шаги, но не устанавливает. Осталось по-моему корректно описать методы в /spares/install/index.php, возможно чего-то тогда и получиться.