• Сайты
  • Мобильные приложения
  • О нас
  • Порядок
    работы
  • Блог
  • Кейсы
  • Контакты
Сделать Заказ
Невский проспект, 22 191186 Россия, Санкт-Петербург +7 (812) 385-39-04

1С:Битрикс пример создания модуля D7

В интернете есть много информации по тому, насколько хороша архитектура D7, но мало практической информации как, например, организовать код, какие новые возможности мы можем использовать на практике и для чего. В данной статье я опишу о том как создать модуль D7, какие основные моменты нужно учесть.

Для нетерпиливых исходный код модуля можно скачать здесь.

Всю теоретическую информацию о D7, вы можете найти в документации для разработчиков на сайте 1С:Битрикс. А на практике я опишу как использовать: namespace, ORM, автозагрузку классов.

Структура модуля

Для начала создадим основную структуру модуля, состоящую из следующих папок, файлов, структура модуля D7 аналогична обычному модулю:

  • admin
    • menu.php - меню в админке битрикс
  • install
    • db
      • install.sql - запросы, которые выполняются при установке модуля
      • uninstall.sql - запросы, которые выполняются при удалении модуля
    • index.php - основной файл установки
  • lang
    • ru
      • lib
        • data.php - языковой файл
  • lib
    • test.php - основной класс модуля
    • data.php - здесь будут настройки ORM
  • include.php - файл, который используется для подключения файлов модуля

далее по порядку разберём файлы модуля.

Файл /admin/menu.php

Данный файл создаёт пункты меню в административном интерфейсе 1С:Битрикс.

В нём небходимо создать массив $aMenu, в котором указываются параметры меню:

  • parent_menu - родительская группа меню
  • url - ссылка на страницу модуля

так как модуль без отдельной страницы, то ссылку укажем на таблицу модуля

defined('B_PROLOG_INCLUDED') and (B_PROLOG_INCLUDED === true) or die();
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
$aMenu = array(
    array(
        'parent_menu' => 'global_menu_content',
        'sort' => 400,
        'text' => "Тестовый модуль",
        'title' => "",
        'url' => 'perfmon_table.php?lang=ru&table_name=brainkit_test',
        'items_id' => 'menu_references'
    )
);
return $aMenu;
    

Файл /install/db/install.sql

В данном файле напишем запрос на создание таблицы 'brainkit_test' помимо основных полей ID и TITLE, добавим поля SORT и CREATED, для сортировки и сохранения даты изменения записи в таблице соответственно:

CREATE TABLE `brainkit_test` (
        `ID` INT(11) NOT NULL AUTO_INCREMENT,
        `TITLE` VARCHAR(65536) NOT NULL,
        `SORT` INT(11) DEFAULT 500,
        `CREATED` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        PRIMARY KEY(ID)
    );

Файл /install/db/uninstall.sql

А здесь sql запрос на удаление созданной базы:

DROP TABLE IF EXISTS `brainkit_test`;

Файл /install/index.php

Данный файл является классом, который наследуется от класса Cmodule, выполняется при установке или удалении модуля через административный интерфейс.

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

В методах класса должны обязатально присутствовать методы: DoInstall и DoUninstall, которые отрабатывают при установке и удалении модуля, а внутри них должны вызываться функции RegisterModule и UnRegisterModule для регистрации и удаления регистрации модуля в базе соответственно.

Внутри методов DoInstall/DoUninstall реализуем методы для: создания/удаления таблицы в базе, установки/удаления событий и дополнительных файлов модуля. Так как для нашего модуля не нужны события и дополнительные файлы, то эти методы просто оставим для будущего расширения возможностей модуля.

Исходный код файла:

<?

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";https://dev.sokolov.ru/jewelry-shops/RU/Sankt-Peterburg/?country=RU&city=Sankt-Peterburg
        $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;
    }
}

Файл /lang/ru/lib/data.php

Данный файл служит для реализации переводов для файла /lib/data.php, в нём простой массив $MESS, в котором хранитяся пары ключ=>значение перевода. А часть ru в пути к файлу является указанимем на язык перевода.

После того как мы создали файл, в любой части кода модуля, для получения перевода, мы можем вызвать функцию Loc::getMessage('KEY'), где KEY - ключ перевода:

<?
$MESS["DATA_ENTITY_ID_FIELD"] = "ID";
$MESS["DATA_ENTITY_TITLE_FIELD"] = "Заголовок";

Файл /lib/test.php

В данном файле пристуствует namespace, который называется в соответвии будет храниться основная логика работы модуля, файл подключается в файле /include.php, для примера реализуем в данном файле получение одной записи из таблицы модуля с помощью ORM класса DataTable:

<?php

namespace Brainkit\D7;

use Brainkit\Data\DataTable;

class Test{

    public static function get($cond) {
        $result = DataTable::getList(
                        array(
                            'select' => array('*')
        ));
        $row = $result->fetch();
        print "<pre>"; print_r($row); print "</pre>";
        return $row;
    }

}
    

Файл /lib/data.php

Данный файл служит для организации доступа к таблице с помощью ORM, в нём создаётся класс DataTable, который наследуется от класса Entity\DataManager, который в свою очередь реализует парадигму ORM. Для того что бы подключить наш класс к ORM, мы должны указать имя таблицы и задать структуру, для этого есть 2 метода getTableName и getMap соответственно. Исходный код:

<?php
namespace Brainkit\D7;

use Bitrix\Main\Entity;
use Bitrix\Main\Localization\Loc;
 

/**
 * Class DataTable
 * 
 * Fields:
 * <ul>
 * <li> ID int mandatory
 * <li> LINK string mandatory
 * <li> PATH string mandatory
 * <li> SORT int optional default 500
 * <li> CREATED datetime mandatory default 'CURRENT_TIMESTAMP'
 * </ul>
 *
 * @package \Brainkit\Data
 **/
 
class DataTable extends Entity\DataManager
{
   /**
    * Returns DB table name for entity.
    *
    * @return string
    */
   public static function getTableName()
   {
      return 'brainkit_test';
   }

   /**
    * Returns entity map definition.
    *
    * @return array
    */
   public static function getMap()
   {
      return array(
         'ID' => array(
            'data_type' => 'integer',
            'primary' => true,
            'autocomplete' => true,
            'title' => Loc::getMessage('DATA_ENTITY_ID_FIELD'),
         ),
         'TITLE' => array(
            'data_type' => 'text',
            'required' => true,
            'title' => Loc::getMessage('DATA_ENTITY_TITLE_FIELD'),
         ),
         'SORT' => array(
            'data_type' => 'integer',
            'title' => Loc::getMessage('DATA_ENTITY_SORT_FIELD'),
         ),
         'CREATED' => array(
            'data_type' => 'datetime',
            'title' => Loc::getMessage('DATA_ENTITY_CREATED_FIELD'),
         ),
      );
   }
}

файл /include.php

Файл необходим для подключения классов или дополнительных файлов модуля. Если соблюдать соответствие namespace и имени модуля, то поддерживается автозагрузка класса. Автозагрузка работает, по инфомации от 1С:Битрикс медленнее, чем поключение файла в include.php. Для примера загрузим класс test.php без автозагрузки:

<?php
Bitrix\Main\Loader::registerAutoloadClasses(
   "brainkit.d7",
   array(
      "Brainkit\\D7\\Test" => "lib/test.php",
   )
);
    

Запуск модуля

Для того что бы протестировать и запустить наш модуль мы должны:

  • установить модуль в административном интерфейсе
  • добавить 1 запись в тестовую таблицу brainkit_test
  • создать тестовую страницу, например, /test/index.php в корне сайта со следующим содержимым:
<?
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/header.php');
$APPLICATION->SetTitle("test");
?><?
if (CModule::IncludeModule("brainkit.d7")){
    Brainkit\D7\Test::get();
}
?><?
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/footer.php');
?>

если необходимо протестировать автозагрузку классов, то в файле include.php нужно закомментировать строку, которая подключает наш класс и запустить тестовую страницу снова

Вывод

Структура файлов модуля D7 не отличается от обычного модуля, отличается подход к разработке, код делается более структурированный, используется namespace, для отдельных таблиц мы не пишем отдельные запросы, а реализуем ORM, и при правильной организации кода, мы можем обойтись без файла include.php.

Вам так же может быть интересно
Как принимать работу по вёрсткеПроверка вёрстки, валидности, адаптивности сайта25.05.16
Как принимать работу по дизайнуПроверка соответствия целевой аудитории, удобства, оформления сайта30.06.16
Как принимать работу по программированиюТест функционала пользователя системы, администратора системы, скорости работы сайта05.04.16

Мы на карте yandex

Позвоните нам, что бы договориться о встрече.

Встреча
Россия, Санкт-Петербург, Невский проспект, 22-24
с 10:00 до 18:00
Звонок
+7 (812) 385-39-04
с 10:00 до 20:00
Письмо
hi@brainkit.ru
В свободной форме.
Дежурный Skype
hi@brainkit.ru
с 10:00 до 20:00
Отправьте нам заявку, и мы свяжемся с вами в ближайшее время.
Кратко Подробно
Необходимые услуги

Если у вас уже определен бюджет, назовите его, и мы сделаем вам предложение в указаных рамках.

×

Оставить отзыв

Дополнительно

Проект который мы для вас разрабатывали:

Максимальный размер файла: 24 МБ.
Разрешённые типы файлов: gif jpg jpeg png bmp txt rtf html pdf doc docx odt ppt pptx odp xls xlsx ods xml avi mov mp3 ogg wav bz2 dmg gz jar rar sit tar zip psd.
Закажите обратный звонок
в удобное для Вас время
Удобное время звонка
c
:
до
:
Давайте мы сэкономим
Ваше время и всё вам расскажем
Удобное время звонка
c
:
до
:
Sokolov
sokolov.ru
Описание

Ювелирный дом SOKOLOV — это бренд заслуживший любовь своих клиентов в десятках стран мира, на трех континентах, с офисами в России и Европе, тысячами магазинов ритейлеров, и огромным каталогом ювелирных украшений.

Задача

Поддержка сайта и разработка модулей, таких как: агрегатор постов по хэштегу из социальных сетей и интерактивная карта с магазинами SOKOLOV.

Понравилась работа? Если Вы хотите похожий сайт свяжитесь с нами.

Заказать обратный звонок

+7 (812) 385-39-04

Универсал Спецтехника (UniRent)
u-rent.ru
Описание

«Универсал Спецтехника» — это компания предоставляющая своим клиентам полный спектр услуг по продаже и аренде спецтехники от ведущих мировых производителей.

Задача

Разработка функционала нового сайта: умные фильтры, интеграция с 1С, поисковая оптимизация, модуль "Универсальная аналитика", "Композитный сайт", расширенная статистика сайта, интеграция с Google и Yandex сервисами.

Отзыв

Ольга Бабонина

Юнирент

Всё было сделано на уровне

Несколько лет назад нанимали этих ребят для доработки сайта — надо было написать фильтры, создать систему менеджмента, универсальную аналитику, доработать и настроить сам каталог, плюс другие задачи. Всё было сделано на уровне. Рекомендую!

Понравилась работа? Если Вы хотите похожий сайт свяжитесь с нами.

Заказать обратный звонок

+7 (812) 385-39-04

Maximilian
sokolov.ru
Описание

Ювелирный дом Maximilian родом из Лондона, с производством в Швейцарии, Японии и Германии, специализируется на обработке драгоценных камней и создании украшений высочайшего класса.

Задача

Разработка сайта ювелирного дома.

Отзыв

Фёдор Ковалёв

Maximilian

Буду рекомендовать фирму разработчика своим друзьям и знакомым

Работа выполнена качественно и в срок. Хочу отметить четкость и организацию работы на высоком уровне, работать с фирмой было легко, так как в фирме работают специалисты высокой квалификации, знающие своё дело. В результате – удобный для пользователя сайт с необходимой информацией и качественным дизайном. Буду рекомендовать фирму разработчика своим друзьям и знакомым.

Понравилась работа? Если Вы хотите похожий сайт свяжитесь с нами.

Заказать обратный звонок

+7 (812) 385-39-04