Опишу как решалась данная задача в части добавления кнопки и открытия модального окна для загрузки изображений в модуле
1. Вначале необходимо подключить наш js скрипт при загрузке визуального редактора. Регистрируем наш обработчик в файле модуля install.php
function InstallDB($arParams = array()) { RegisterModuleDependences('fileman', 'OnBeforeHTMLEditorScriptRuns', '.self::MODULE_ID.', 'CSotbitHtmlEditorAddition', 'OnIncludeHTMLEditorScriptRuns'); return true; } |
2. В подключаемом методе реализуем регистрацию своего расширения для добавления кнопки в визуальный редактор и инициализируем его
Class sotbit_htmleditoraddition extends CModule { public function OnIncludeHTMLEditorScriptRuns() { /*Регистрируем расширение, с подключением основного скрипта и подключением языкового файла*/ CJSCore::RegisterExt('sotbit_htmleditor_additional', array( /*Путь до скрипта расширения*/ 'js' => '/bitrix/tools/'.self::MODULE_ID.'/js/script.js', /*Путь до языкового файла*/ 'lang' => '/bitrix/modules/'.self::MODULE_ID.'/lang/'.LANGUAGE_ID.'/install/tools/'.self::MODULE_ID.'/js/script.php', )); //Инициализируем наше расширение CJSCore::Init(array('sotbit_htmleditor_additional')); } } |
3. В файле подключаемого скрипта script.js реализуем вывод кнопки с вызовом модального окна и его описанием.
BX.addCustomEvent('OnEditorInitedBefore', function(editor) { /*Объект визуального редатора*/ var _this=this; var _class = 'sotbit_htmleditor'; /*Описание кнопки добавляемой в визуальный редактор*/ this.AddButton({ iconClassName: 'bxhtmled-button-sotbit-add-img', /*Путь до иконки кнопки*/ src: '/bitrix/tools/sotbit.htmleditoraddition/images/sotbit_add_img_icon.png', id: 'sotbit-add-img', /*Названия кнопки из языкового файла*/ name: BX.message('SOTBIT_HTML_EDITOR_MODAL_IMAGES_TITLE'), /*Событие по нажатию на кнопку*/ handler:function(e){ /*Описание модального окна */ var SotbitDialogAddImg = new BX.CDialog({ /*Заголовок модального окна из языкового файла*/ title: BX.message('SOTBIT_HTML_EDITOR_MODAL_IMAGES_TITLE'), /*Путь до файла контента отображаемого в модальном окне*/ content_url: '/bitrix/tools/sotbit.htmleditoraddition/include/ajax/loadImg.php', /*Запрос к файлу с контентом модального окна*/ content_post: 'ajax=yes&action=openWindow, min_width:400, min_height:400, /*Описание кнопок модального окна*/ buttons: [ /*Описание кнопки загрузку изображений в визуальный редактор*/ { /*Заголовок кнопки из языкового файла*/ title: BX.message('SOTBIT_HTML_EDITOR_MODAL_IMAGES_BTN_LOADIMG'), name: 'loadImg', id: 'loadImg', /*Действие по нажатию на кнопку*/ action: function () { /*Действие выполняемое по нажатию данной кнопки в части обработки изображений можно найти в данном файле script.js модуля */ /*Получение контента визуального редактора*/ var content = _this.GetContent(); /*После обработки content и получения нового контента (content_new), устанавливаем новый контент в визуальный редактор*/ _this.SetContent(content_new, true); _this.ReInitIframe(); /*Закрытие модального окна*/ _thisBtn.parentWindow.Close(); }, /*Вывод кнопки отмены в модальном окне*/ BX.CDialog.prototype.btnCancel, ] }); /*Вызов модального окна описанного выше*/ SotbitDialogAddImg.Show(); } }); }); |
В итоге в визуальном редакторе выводится кнопка:

по нажатию на которую выводится модальное окно:
