Прибегнуть к такому решению пришлось после внесения изменения в Модуль «Управление структурой»->Визуальный редактор-> скрытие элемента |
ФАЙЛ: \bitrix\php_interface\init.php
AddEventHandler("fileman", "OnBeforeHTMLEditorScriptsGet", "addEditorScriptsHandler"); function addEditorScriptsHandler($editorName,$arEditorParams) { //echo"<pre>";print_r($arEditorParams);echo"</pre>"; return array("JS" => array('my_sctipt.js')); } |
ФАЙЛ: \bitrix\admin\htmleditor2\my_sctipt.js
function print_r(theObj){//Аналог php print_r для script if(theObj.constructor == Array || theObj.constructor == Object){ document.write("<ul style='font-size:9px;'>") for(var p in theObj){ if(theObj.constructor == Array|| theObj.constructor == Object){ document.write("<li>["+p+"] => "+typeof(theObj)+"</li>"); document.write("<ul>") print_r(theObj); document.write("</ul>") } else { document.write("<li>["+p+"] => "+theObj+"</li>"); } } document.write("</ul>") } } /*Переопределяем и создаём кнопки*/ arButtons['HeadingList'] = ['BXEdList', { field_size: 100, width: 210, title: '(' + BX_MESS.Format + ')', disableOnCodeView: true, bAdminConfigure: true, //bSetGlobalStyles: false, values: [ {value: 'p', name: 'Абзац'}, {value: 'h1', name: 'Заголовок 1'}, {value: 'h2', name: 'Заголовок 2'}, {value: 'h3', name: 'Заголовок 3'}, {value: 'h4', name: 'Заголовок 4'}, {value: 'h5', name: 'Заголовок 5'}, {value: 'h6', name: 'Заголовок 6'}, {value: 'pre', name: 'Preformatted'} ], OnSelectionChange: function (){ var sel = 0; var frm = this.pMainObj.queryCommand('FormatBlock'); if(frm) { var re = /[1-6]/; var r = frm.match(re); if(r>0) sel = r; else if(frm == 'pre') sel = 7; } this.Select(sel); }, OnChange: function (selected){this.pMainObj.executeCommand('FormatBlock', (selected['value'].length>0?'<' + selected['value']+'>':'<p>'));}, OnDrawItem: function (item) { if (!styleList_render_style) return item['name']; return (item['value'].length <= 0 ? item['name'] : '<'+item['value']+'>'+item['name']+'</'+item['value']+'>'); } } ]; arButtons['Cite'] = ['BXButton', { id : 'Cite', src : '/bitrix/templates/.default/images/fileman/icon_cite.gif', name : 'Цитата', title : 'Вставить цитату', show_name : true, handler: function(){ this.pMainObj.insertHTML('<cite>Цитата</cite>'); } } ]; /* Добавим свою кнопку за место разделится(separator) после hr(Горизонтальный разделитель). Для этого обновим объект arToolbars['formating'] и arGlobalToolbar объявленные в toolbarbuttons.js Для не административной части (arGlobalToolbar) требуется поиск элемента по id. В административной элемент находится в объекте formating 0 месте в массиве. Разделитель(separator) следует сразу за hr. Заодно изменим выпадающий список формат. */ try{//Публичный режим (Просто проверяем код на истинность, иначе режим административной части) if(window.lightMode) не сработает для инфоблоков в публичной части var j_chet=0; var j_pos_formating=-1; while(arGlobalToolbar[j_chet]){ if(arGlobalToolbar[j_chet][1]['title']=="(Формат)"){ arGlobalToolbar[j_chet]=arButtons['HeadingList'];} if(arGlobalToolbar[j_chet][1]['id']=="InsertHorizontalRule"){j_pos_formating=j_chet+1;} j_chet+=1; } if(j_pos_formating>0)arGlobalToolbar[j_pos_formating]=arButtons['Cite']; }catch(e){//Для режима административной части var j_chet=0; while(arToolbars.style[1][j_chet]){ if(arToolbars.style[1][j_chet][1]['title']=="(Формат)"){ arToolbars.style[1][j_chet]=arButtons['HeadingList'];break;} j_chet+=1; } arToolbars.formating[1][1]=arButtons['Cite']; } //print_r(arGlobalToolbar); |
Результат:
Административная часть, страница:
Административная часть, инфоблок:
Публичная часть, страница:
Публичная часть, редактирование элемента инфоблока:
Особенность:
При редактировании в публичной части.
После редактирования страницы не появляется кнопка в редакторе инфоблока на этой же странице и наоборот.
Замечание:
Возможна ошибка в коде визуального редактора битрикса.
Данная проблема наблюдается после внесения изменения в Модуль «Управление структурой»->Визуальный редактор-> скрытие элемента |
if (!window.lightMode) { oBXEditorUtils.appendButton("page_break", arButtons['page_break'], "standart"); oBXEditorUtils.appendButton("break_tag", arButtons['break_tag'], "standart"); oBXEditorUtils.appendButton("insert_flash", arButtons['insert_flash'], "standart"); } |
К слову
oBXEditorUtils.appendButton |
oBXEditorUtils.appendButton |
Конечно можно модифицировать этот массив(Объект), в файле \bitrix\admin\htmleditor2\my_sctipt.js, но не стоит т.к. этот файл вызывается 1 раз. Т.е. открывая в Административной части, элемент инфоблока, происходят 3 вызова
- ar_SOME_TEXT_config
- ar_PREVIEW_TEXT_config['toolbarConfig']
- ar_DETAIL_TEXT_config['toolbarConfig']
P.s. Надеюсь, моду рассуждения помогут, кому-либо.