3
13.11.201117:3713.11.2011 17:37:31
| Прибегнуть к такому решению пришлось после внесения изменения в Модуль «Управление структурой»->Визуальный редактор-> скрытие элемента |
ФАЙЛ: \bitrix\php_interface\init.phpAddEventHandler("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.jsfunction 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); |
Результат:Административная часть, страница:

Административная часть, инфоблок:

Публичная часть, страница:

Публичная часть, редактирование элемента инфоблока:
Особенность:При редактировании в публичной части.
После редактирования страницы не появляется кнопка в редакторе инфоблока на этой же странице и наоборот.
Замечание:Возможна ошибка в коде визуального редактора битрикса.
| Данная проблема наблюдается после внесения изменения в Модуль «Управление структурой»->Визуальный редактор-> скрытие элемента |
Страничка: \bitrix\admin\htmleditor2\toolbarbuttons.js
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 |
вообще не работает. Точнее работает, но результат не видим. По причине, передаётся массив
ar_filesrc_config['toolbarConfig'] (красная часть изменяемая, вообще массив формируется в bitrix\modules\fileman\fileman.php H1363 строчка) элементов на страницу, которые будут доступны в визуальном редакторе. Массив имеет вид 10='-10' т.е. 10 элемент не виден.
oBXEditorUtils.appendButton |
Добавляет элемент, но не изменяет массив
ar_filesrc_config['toolbarConfig']. а элементы не указанные в массиве не отображаются.
Конечно можно модифицировать этот массив(Объект), в файле \bitrix\admin\htmleditor2\my_sctipt.js, но не стоит т.к. этот файл вызывается 1 раз. Т.е. открывая в Административной части, элемент инфоблока, происходят 3 вызова
- ar_SOME_TEXT_config
- ar_PREVIEW_TEXT_config['toolbarConfig']
- ar_DETAIL_TEXT_config['toolbarConfig']
Причем
ar_SOME_TEXT_config не содержит
['toolbarConfig'], но именно после этого вызова вызывается \bitrix\admin\htmleditor2\my_sctipt.js и не разу больше. Следовательно
ar_DETAIL_TEXT_config['toolbarConfig'] мы уже не можем изменить.
P.s. Надеюсь, моду рассуждения помогут, кому-либо.