От слов к делу – начнём потихоньку заполнять пробелы в необходимых знаниях по Битрикс программированию …
На последнем моём собеседовании с веб студией Слон один из вопросов технического директора компании ко мне был – есть ли у Вас опыт по разработке модулей в Битриксе?
К сожалению тут я немного присел в лужу, т.к оного у меня не было.
Для освоения ядра D7 знакомство с модулями я начну стразу, собственно используя стиль программирования нового ядра.
Подход к всему новому у меня всегда один – от простого к сложному. Для начала я решил найти самый простой шаблон модуля, просто чтобы запустить своими руками без какой либо конкретной задачи – обозначить пространство для вставки полезного кода в шаблоне, так же освежил знания из курса Разработчик Bitrix Framework и вооружился официальной документацией по D7
За основу я взял статейку с сайта веб студии BRAINKIT 1С:Битрикс пример создания модуля D7
Всё бы ничего, но видимо никто из компании не удосужился проверить работоспособность выложенного на гите модуля (и хорошо – хоть поковырялся, так сказать минизадача по правке работоспособности модуля).
Итак, прочитав статью, я сразу пошел по ссылке в гит, клонировал проект bitrix-d7-module и закинул его в ./local/modules/ файловой структуры сайта.
Далее интересней – идём в Доступные решения для установки модуля – там пусто!
Пора и заглянуть в код 🙂
В include.php
1 2 3 4 5 6 7 |
<?php Bitrix\Main\Loader::registerAutoloadClasses( “brainkit.d7”, array( “Brainkit\\D7\\Test” => “lib/test.php”, ) ); |
в параметрах registerAutoLoadClasses видим “Brainkit\\D7\\Test”
в файлах /lib/php.* пространство имён задано namespace Brainkit\D7;
да и в проверочном файле модуль подключается CModule::IncludeModule(“brainkit.d7”)
Переименовываем bitrix-d7-module в brainkit.d7 – появился модуль “Пример модуля D7 (brainkit.d7)” – то что нужно!
Устанавливаем и вызываем проверочный скрипт.
1 2 3 4 5 6 7 8 9 |
[Bitrix\Main\DB\SqlQueryException] Mysql query error: (1146) Table ‘db.brainkit_test’ doesn‘t exist (400) SELECT `brainkit_d7_data`.`ID` AS `ID`, `brainkit_d7_data`.`TITLE` AS `TITLE`, `brainkit_d7_data`.`SORT` AS `SORT`, `brainkit_d7_data`.`CREATED` AS `CREATED` FROM `brainkit_test` `brainkit_d7_data` ... |
Табличка не существует!
Посмотрел базу в PHPMyAdmin – реально такой таблицы нет!
Изучаем папочку install, а точнее индексный файл этой папки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<? IncludeModuleLangFile(__FILE__); use \Bitrix\Main\ModuleManager; Class Brainkit_D7 extends CModule { var $MODULE_ID = “brainkit.d7”; var $MODULE_VERSION; var $MODULE_VERSION_DATE; var $MODULE_NAME; var $MODULE_DESCRIPTION; var $errors; function __construct() { //$arModuleVersion = array(); $this->MODULE_VERSION = “1.0.0”; $this->MODULE_VERSION_DATE = “20.03.2016”; $this->MODULE_NAME = “Пример модуля D7”; $this->MODULE_DESCRIPTION = “Тестовый модуль для разработчиков, можно использовать как основу для разработки новых модулей для 1С:Битрикс”; } function DoInstall() { $this->InstallDB(); $this->InstallEvents(); $this->InstallFiles(); RegisterModule(“brainkit.d7”); return true; } function DoUninstall() { $this->UnInstallDB(); $this->UnInstallEvents(); $this->UnInstallFiles(); UnRegisterModule(“brainkit.d7”); return true; } function InstallDB() { global $DB; $this->errors = false; $this->errors = $DB->RunSQLBatch($_SERVER[‘DOCUMENT_ROOT’] . “/bitrix/modules/brainkit.d7/install/db/install.sql”); if (!$this->errors) { return true; } else return $this->errors; } function UnInstallDB() { global $DB; $this->errors = false; $this->errors = $DB->RunSQLBatch($_SERVER[‘DOCUMENT_ROOT’] . “/local/modules/Brainkit.D7/install/db/uninstall.sql”); if (!$this->errors) { return true; } else return $this->errors; } function InstallEvents() { return true; } function UnInstallEvents() { return true; } function InstallFiles() { return true; } function UnInstallFiles() { return true; } } |
в методе InstallDB класса Brainkit_D7 запускается скрипт создания таблички, с абсолютным указанием места его расположения /bitrix/modules/brainkit.d7/install/db/install.sql
у нас то модуль лежит в /local/ !
Забавно, что в UNnstallDB в том же скрипте расположение MYSQL скрипта уже в local! /local/modules/brainkit.d7/install/db/install.sql
То есть даже если мы бы закинули модуль в /bitrix/modules/ – он бы установился, но удалить бы мы его не смогли (таблица всё равно осталась бы в базе).
добавим свойство класса
var $MODULE_PATH;
и в конструкторе определим его
$this->MODULE_PATH = dirname(__DIR__);
после чего правим в двух местах код заменяя $_SERVER[‘DOCUMENT_ROOT’] . “/local/modules/Brainkit.D7” на $this->MODULE_PATH
устанавливаем модуль заново, запускаем тестовый скрипт – ошибок нет, но и ничего не выдал!
Тут всё в рамках логики – в статьи и было написано, что в табличку нужно внести хоть одну строчку.
Вносим руками с помощью PHPMyAdmin или запросом с админки
1 |
INSERT INTO `brainkit_test` (`ID`, `TITLE`, `SORT`, `CREATED`) VALUES (NULL, ‘TITLE’, ‘500’, CURRENT_TIMESTAMP); |
Запускаем, и вуаля – результат на лицо, а точнее на экран!
Итак, первичное знакомство с созданием своих модулей закончено – шаблон рабочий, далее погружаемся в логику и идём от простого к сложному.
Ещё один шаг, который мне необходимо “пощупать” для удалённой работы в веб студиях – это система контроля версий.
Собственно, на этом простеньком примере можно и потренироваться – результаты отпишу.
PS
Brainkit особое спасибо за хорошую статью и возможность отладить кривой модуль 🙂
Для отладки модуля я использовал
Bitrix\Main\Diag\Debug::dumpToFile();
Дебаг в файл, по умолчанию пишет в /__bx_log.log
лучше с псевдонимом, чтобы покороче 🙂
use Bitrix\Main\Diag\Debug;
Debug::dumpToFile();
Ещё неплохой мануал по созданию своего модуля на примере кнопки “Наверх” (тут поглубже – уже используется страничка с настройками модуля, и функционал соответственно уже рабочий).
Но и тут не без “косяков” – модуль в мануале назвывается scrollup (без точки!) соответственно, он распознаётся как системный – поэтому я его в админке в установленных решениях сразу не нашел, т.к. он лежит в “модули” (как системный).
PPS
Пока разбирался с модулями (искал какой-нибудь маленький на МаркетПлейсе для анализа), нашел хороший бесплатный модуль “прокрутка вверх” с неплохим функционалом, который сразу и воткнул на сайт по фотообоям (можно затестить в онлайн режиме).
PPPS
Уфф, если я на каждое подобное изыскание буду пост писать, чувствую до вершин программирования я очень долго буду добираться – писанина время жрёт, ужас 🙁
Вот ещё, нашел отличный курс по созданию собственных модулей от Битрикс!