Битрикс. Создание своего модуля. Часть 2 из 3
Давайте создадим еще один модуль, который будет устанавливать в систему несколько компонентов — три простых и один комплексный. Больше никаких задач модуль решать не будет, поэтому его код будут очень простым. Сами компоненты предназначены для работы с инфоблоками:
- простой компонент
infoblock:iblock.element
умеет показывать элемент инфоблока; - простой компонент
infoblock:iblock.section
умеет показывать раздел инфоблока; - простой компонент
infoblock:iblock.popular
умееет показывать коневые разделы инфоблока + популярные элементы; - комплексный компонент
infoblock:iblock
объединяет эти простые компоненты.
Файловая структура модуля будет такой:
[infoblock] [install] [assets] [components] [iblock] [iblock.element] [iblock.popular] [iblock.section] index.php step.php unstep.php version.php [lang] [ru] [install] index.php
При установке модуля происходит копирование содержимого директории
local/modules/infoblock/install/assets/componenets
в директорию
local/components/infoblock
<?php /* * Файл local/modules/infoblock/install/version.php */ $arModuleVersion = array( 'VERSION' => '1.0.0', 'VERSION_DATE' => '2018-10-26 14:00:00' );
<?php /* * Файл local/modules/infoblock/install/index.php */ use Bitrix\Main\Localization\Loc; use Bitrix\Main\ModuleManager; use Bitrix\Main\Config\Option; use Bitrix\Main\Application; use Bitrix\Main\IO\Directory; Loc::loadMessages(__FILE__); class infoblock extends CModule { public function __construct() { if (is_file(__DIR__.'/version.php')){ include_once(__DIR__.'/version.php'); $this->MODULE_ID = get_class($this); $this->MODULE_VERSION = $arModuleVersion['VERSION']; $this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE']; $this->MODULE_NAME = Loc::getMessage('INFOBLOCK_NAME'); $this->MODULE_DESCRIPTION = Loc::getMessage('INFOBLOCK_DESCRIPTION'); } else { CAdminMessage::showMessage( Loc::getMessage('INFOBLOCK_FILE_NOT_FOUND').' version.php' ); } } public function doInstall() { global $APPLICATION; // мы используем функционал нового ядра D7 — поддерживает ли его система? if (CheckVersion(ModuleManager::getVersion('main'), '14.00.00')) { // копируем файлы, необходимые для работы модуля $this->installFiles(); // регистрируем модуль в системе ModuleManager::registerModule($this->MODULE_ID); } else { CAdminMessage::showMessage( Loc::getMessage('INFOBLOCK_INSTALL_ERROR') ); return; } $APPLICATION->includeAdminFile( Loc::getMessage('INFOBLOCK_INSTALL_TITLE').' «'.Loc::getMessage('INFOBLOCK_NAME').'»', __DIR__.'/step.php' ); } public function installFiles() { // копируем файлы компонентов, которые устанавливаем вместе с модулем; // пространством имен для компонентов будет имя модуля, т.е. infoblock CopyDirFiles( __DIR__.'/assets/components', Application::getDocumentRoot().'/local/components/'.$this->MODULE_ID.'/', true, true ); } public function doUninstall() { global $APPLICATION; $this->unInstallFiles(); ModuleManager::unRegisterModule($this->MODULE_ID); $APPLICATION->includeAdminFile( Loc::getMessage('INFOBLOCK_UNINSTALL_TITLE').' «'.Loc::getMessage('INFOBLOCK_NAME').'»', __DIR__.'/unstep.php' ); } public function unInstallFiles() { // удаляем файлы компонента, который установили вместе с модулем Directory::deleteDirectory( Application::getDocumentRoot().'/local/components/'.$this->MODULE_ID ); // удаляем настройки нашего модуля Option::delete($this->MODULE_ID); } }
<?php /* * Файл local/modules/infoblock/install/step.php */ use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); if (!check_bitrix_sessid()) { return; } if ($errorException = $APPLICATION->getException()) { // ошибка при установке модуля CAdminMessage::showMessage( Loc::getMessage('INFOBLOCK_INSTALL_FAILED').': '.$errorException->GetString() ); } else { // модуль успешно установлен CAdminMessage::showNote( Loc::getMessage('INFOBLOCK_INSTALL_SUCCESS') ); } ?> <form action="<?= $APPLICATION->getCurPage(); ?>"> <!-- Кнопка возврата к списку модулей --> <input type="hidden" name="lang" value="<?= LANGUAGE_ID; ?>" /> <input type="submit" value="<?= Loc::getMessage('INFOBLOCK_RETURN_MODULES'); ?>"> </form>
<?php /* * Файл local/modules/infoblock/install/unstep.php */ use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); if (!check_bitrix_sessid()){ return; } if ($errorException = $APPLICATION->getException()) { // ошибка при удалении модуля CAdminMessage::showMessage( Loc::getMessage('INFOBLOCK_UNINSTALL_FAILED').': '.$errorException->GetString() ); } else { // модуль успешно удален CAdminMessage::showNote( Loc::getMessage('INFOBLOCK_UNINSTALL_SUCCESS') ); } ?> <form action="<?= $APPLICATION->getCurPage(); ?>"> <!-- Кнопка возврата к списку модулей --> <input type="hidden" name="lang" value="<?= LANGUAGE_ID; ?>" /> <input type="submit" value="<?= Loc::getMessage('INFOBLOCK_RETURN_MODULES'); ?>"> </form>
<?php /* * Файл local/modules/infoblock/lang/ru/install/index.php */ $MESS['INFOBLOCK_NAME'] = 'Компонент «Инфоблок»'; $MESS['INFOBLOCK_DESCRIPTION'] = 'Устанавливает универсальный компонент для работы с инфоблоками'; $MESS['INFOBLOCK_FILE_NOT_FOUND'] = 'Не найден файл'; $MESS['INFOBLOCK_INSTALL_TITLE'] = 'Установка модуля'; $MESS['INFOBLOCK_INSTALL_ERROR'] = 'Версия главного модуля ниже 14, обновите систему.'; $MESS['INFOBLOCK_INSTALL_SUCCESS'] = 'Модуль успешно установлен'; $MESS['INFOBLOCK_INSTALL_FAILED'] = 'Ошибка при установке модуля'; $MESS['INFOBLOCK_UNINSTALL_TITLE'] = 'Удаление модуля'; $MESS['INFOBLOCK_UNINSTALL_SUCCESS'] = 'Модуль успешно удален'; $MESS['INFOBLOCK_UNINSTALL_FAILED'] = 'Ошибка при удалении модуля'; $MESS['INFOBLOCK_RETURN_MODULES'] = 'Вернуться в список модулей';
После установки модуля мы можем использовать эти компоненты в работе:
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Статьи о домашних животных"); ?> <?php $APPLICATION->IncludeComponent( "infoblock:iblock", "", Array( "ADD_SECTIONS_CHAIN" => "Y", "CACHE_GROUPS" => "Y", "CACHE_TIME" => "3600", "CACHE_TYPE" => "A", "DISPLAY_BOTTOM_PAGER" => "Y", "DISPLAY_TOP_PAGER" => "N", "ELEMENT_SET_BROWSER_TITLE" => "Y", "ELEMENT_SET_META_DESCRIPTION" => "Y", "ELEMENT_SET_META_KEYWORDS" => "Y", "ELEMENT_SET_PAGE_TITLE" => "Y", "IBLOCK_ID" => "5", "IBLOCK_TYPE" => "content", "MESSAGE_404" => "", "PAGER_BASE_LINK_ENABLE" => "N", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", "PAGER_SHOW_ALL" => "N", "PAGER_SHOW_ALWAYS" => "N", "PAGER_TEMPLATE" => ".default", "PAGER_TITLE" => "Элементы", "POPULAR_ELEMENT_COUNT" => "4", "POPULAR_ROOT_SECTIONS" => "Y", "POPULAR_SECTIONS" => array(), "POPULAR_SET_BROWSER_TITLE" => "Y", "POPULAR_SET_PAGE_TITLE" => "Y", "SECTION_ELEMENT_COUNT" => "3", "SECTION_SET_BROWSER_TITLE" => "Y", "SECTION_SET_META_DESCRIPTION" => "Y", "SECTION_SET_META_KEYWORDS" => "Y", "SECTION_SET_PAGE_TITLE" => "Y", "SEF_MODE" => "N", "SET_STATUS_404" => "N", "SHOW_404" => "N", "USE_CODE_INSTEAD_ID" => "N", "VARIABLE_ALIASES" => Array( "ELEMENT_CODE"=>"ELEMENT_CODE", "ELEMENT_ID"=>"ELEMENT_ID", "SECTION_CODE"=>"SECTION_CODE", "SECTION_ID"=>"SECTION_ID" ) ) ); ?> <?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Дополнительно
- Битрикс. Создание комплексного компонента. Часть 4 из 4
- Битрикс. Создание комплексного компонента. Часть 3 из 4
- Битрикс. Создание комплексного компонента. Часть 2 из 4
- Битрикс. Создание комплексного компонента. Часть 1 из 4
- Битрикс. Создание простого компонента. Часть 2 из 2
- Битрикс. Настройки для торговых предложений
- Битрикс. Меню из разделов инфоблока
Поиск: CMS • Web-разработка • doInstall • doUninstall • step.php • unstep.php • version.php • Битрикс • Инфоблок • Компонент • Модуль • Установка • registerAutoloadClasses • registerModule • unRegisterModule • CopyDirFiles • deleteDirectory