Логотип

Установка своего компонента

В этой статье я расскажу как с помощью модуля устанавливать свои компоненты.

Для этого нам понадобятся:

  • Шаблон модуля

    О его создании написано в прошлой статье. Подойдёт и ваш готовый.

  • Компонент

    Его создание не входит в рамки данного раздела, если у вас нет своего, то возьмите любой компонент из папки /bitrix/components/bitrix/

Шаг 1

В папке модуля в папке /install/ создадим папку components, в ней папку, которая будет определять ваше пространстве имён для компонентов, для облегчения поддержки можно создать папку идентичную названию самой папки модуля, то есть, например, aristov.comments.

Шаг 2

Просто закидываем свои компоненты в созданную папку. Не только шаблоны, а целиком, вместе с component.php, .description.php и прочими файлами.

Шаг 3

Теперь надо написать код, который при установки модуля будет устанавливать и наш компонент. В варианте /install/index.php из первой статьи уже есть нужный код, но я продублирую его здесь.

	// здесь содержится установка компонентов, административных скриптов и прочих файлов
	function InstallFiles($arParams = array()){
		// административные скрипты
		if (is_dir($p = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.self::MODULE_ID.'/admin')){
			if ($dir = opendir($p)){
				while (false !== $item = readdir($dir)){
					if ($item == '..' || $item == '.' || $item == 'menu.php')
						continue;
					file_put_contents($file = $_SERVER['DOCUMENT_ROOT'].'/bitrix/admin/'.self::MODULE_ID.'_'.$item,
					'<'.'? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/'.self::MODULE_ID.'/admin/'.$item.'");?'.'>');
				}
				closedir($dir);
			}
		}
		
		// код отвечающий за установку компонентов
		if (is_dir($p = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.self::MODULE_ID.'/install/components')){
			if ($dir = opendir($p)){
				while (false !== $item = readdir($dir)){
					if ($item == '..' || $item == '.')
						continue;
					CopyDirFiles($p.'/'.$item, $_SERVER['DOCUMENT_ROOT'].'/bitrix/components/'.$item, $ReWrite = True, $Recursive = True);
				}
				closedir($dir);
			}
		}
		return true;
	}

Также код отвечающий за удаление компонентов:

	// здесь все установленные в систему файлы модуля удаляются
	function UnInstallFiles(){
		if (is_dir($p = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.self::MODULE_ID.'/admin')){
			if ($dir = opendir($p)){
				while (false !== $item = readdir($dir)){
					if ($item == '..' || $item == '.')
						continue;
					unlink($_SERVER['DOCUMENT_ROOT'].'/bitrix/admin/'.self::MODULE_ID.'_'.$item);
				}
				closedir($dir);
			}
		}
		
		// код отвечающий за удаление компонентов
		if (is_dir($p = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.self::MODULE_ID.'/install/components')){
			if ($dir = opendir($p)){
				while (false !== $item = readdir($dir)){
					if ($item == '..' || $item == '.' || !is_dir($p0 = $p.'/'.$item))
						continue;

					$dir0 = opendir($p0);
					while (false !== $item0 = readdir($dir0))
					{
						if ($item0 == '..' || $item0 == '.')
							continue;
						DeleteDirFilesEx('/bitrix/components/'.$item.'/'.$item0);
					}
					closedir($dir0);
				}
				closedir($dir);
			}
		}
		return true;
	}

Как видите, мы просто копируем и удаляем папку с компонентами, и это всё, что необходимо. Вызывать функции надо соответственно в DoInstall() и DoUninstall(). Если ваш компонент не появился в визуальном редакторе, то это или кеш, или же вы не проработали файл .description.php, но работа с ним это тема для отдельной статьи.

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

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

Внимание!

Этот сайт использует технологию "cookies" и интернет-сервисы для сбора технических данных!

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

Цель - получение статистической информации и возможность работы множества сервисов на страницах сайта и самого сайта.

Если Вы не согласны на обработку данных на указанных выше условиях, покиньте сайт.