Установка своего компонента
В этой статье я расскажу как с помощью модуля устанавливать свои компоненты.
Для этого нам понадобятся:
-
Шаблон модуля
О его создании написано в прошлой статье. Подойдёт и ваш готовый.
-
Компонент
Его создание не входит в рамки данного раздела, если у вас нет своего, то возьмите любой компонент из папки /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, но зачастую решения не ограничиваются лишь компонентами. Поэтому в следующей статье мы создадим страницу настроек модуля, чтобы добавить функционала.
Написать комментарий