Настройка кнопок редактора Kunena BBCode

Полезное для Joomla


Здравствуйте дорогие друзья и любители Joomla. Joomla! обладает очень гибким и простым механизмом переопределения шаблонов. Если вы когда-нибудь занимались этим, то знаете, что для переопределения нужно всего лишь скопировать файлы ядра в правильную папку, находящуюся в директории html вашего шаблона.

Настройка кнопок редактора Kunena BBCode

Настройка кнопок редактора Kunena BBCode

Kunena не является исключением, хотя здесь есть небольшое отличие. Например, если вы хотите изменить страницу ответа/редактирования, вам потребуется скопировать файл

/components/com_kunena/template/blue_eagle/html/topic/edit.php

в папку шаблона:

/templates/<ВашШаблон>/html/com_kunena/topic/edit.php

И вносить изменения в новый файл шаблона. За исключением этого момента, всё остальное соответствует стандартной процедуре.

Но предположим, ваш начальник говорит, что вам нужно убрать несколько кнопок с панели инструментов редактора BBCode. Заглянув в исходный код файла edit.php, вы понимаете, что для выполнения этой задачи вам придётся править файлы ядра Kunena. Естественно, я хочу избежать этого любой ценой. Вот как это сделать:

Вот кнопки, которые нас попросили убрать

remove_buttons

В порядке, в котором они изображены на картинке, это: «Спойлер», «Скрыть текст от гостей», «eBay», «Видео», «Карты» и «Помощь».

С кнопками «Спойлер», «eBay» и «Видео» нам повезло. Их можно отключить в настройках редактора Kunena. Но остальные три вшиты в исходных код.

Эти кнопки определены в файле /libraries/kunena/bbcode/editor.xml. Простейшим выходом было бы удаление ненужных кнопок из этого файла. Но мне очень не нравится правка файлов ядра.

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

1.$editor = KunenaBbcodeEditor::getInstance();
2.$editor->initialize('id');

Это метод инициализации, при котором происходит чтение xml файла и вывод кнопок. Так почему бы нам не создать своё переопределение класса KunenaBbcodeEditor, чтобы мы могли использовать свой xml файл?

Во-первых, скопируйте xml файл в ту же папку, куда мы ранее поместили edit.php:

/libraries/kunena/bbcode/editor.xml => /templates/<ВашШаблон>/html/com_kunena/topic/cuseditor.xml

Затем создайте новый php файл в этой директории и назовите его cuseditor.php. Теперь директория должна выглядеть следующим образом:

media_1393289164229

Именно в файле cuseditor.php мы будет создавать свою версию класса редактора. Вот так:

1.defined('_JEXEC') or die();
2.class CusBbcodeEditor extends KunenaBbcodeEditor {}

Эти два метода нам нужно изменить для достижения нашей цели. Сначала метод ::getInstance(). Скопируйте код из оригинального класса, используя имя нового класса, например:

1.public static function getInstance($config = array()) {
2.static $instance = false;
3.if (!$instance) {
4.$instance = new CusBbcodeEditor($config);
5.}
6.return $instance;
7.}

Обратите внимание, что единственное изменение — это вызов нашего нового объекта класса CusBbcodeEditor.

Метод, который нам действительно нужен — это инициализация, при которой происходит считывание данных о кнопках из xml. Снова, скопируйте код из оригинала и внесите небольшое изменение, чтобы вызывать скопированную версию:

01.public function initialize($identifier='class') { 
02.$js = "window.addEvent('domready', function() { 
03.kbbcode = new kbbcode('kbbcode-message', 'kbbcode-toolbar', { 
04.dispatchChangeEvent: true, 
05.changeEventDelay: 1000, 
06.interceptTab: true 
07.});\n"; 
08.$xml_file = simplexml_load_file(dirname(__FILE__).'/cuseditor.xml'); 
09. 
10.$this->editor_elements = self::parseXML($xml_file); 
11. 
12.//Hook to manipulate the Editor XML like adding buttons 
13.$dispatcher = JDispatcher::getInstance(); 
14.JPluginHelper::importPlugin('kunena'); 
15.$dispatcher->trigger( 'onKunenaBbcodeEditorInit', array ( $this ) ); 
16. 
17.foreach ($this->editor_elements as $item) { 
18.$js .= $item->generateJs($identifier); 
19.} 
20. 
21.$js .= "});\n"; 
22.$template = KunenaTemplate::getInstance(); 
23.$template->addScript('js/editor.js'); 
24.JFactory::getDocument()->addScriptDeclaration( "// <![CDATA[\n{$js}\n// ]]>"); 
25.}

Опять обратите внимание, что единственным изменением стал вызов переименованного файла xml из той же директории, где находится новый cuseditor.php.
В предпоследнем шаге руководства нам нужно заставить переопределённый шаблон использовать наш новый класс. В файле edit.php замените такую строку:

1.$editor = KunenaBbcodeEditor::getInstance();

Этими двумя строками:

1.require_once __DIR__ . '/cuseditor.php';
2.$editor = CusBbcodeEditor::getInstance();

Теперь вы пользуетесь вашей собственной изменённой версией редактора BBCode от Kunena, с минимальными изменениями и без необходимости править файлы ядра!
Не забываем, что целью нашего упражнения было удаление трёх кнопок. Чтобы убрать кнопки «Скрыть текст от гостей», «Карты» и «Помощь» с панели инструментов, удалите соответствующие им строки из вашего файла cuseditor.xml:

1.<button tag="hide" name="hide" title="COM_KUNENA_EDITOR_HIDE" alt="COM_KUNENA_EDITOR_HELPLINE_HIDE">
2.<wrap-selection />
3.</button>
И чуть ниже в файле:
1.<button tag="map" name="map" title="COM_KUNENA_EDITOR_MAP" alt="COM_KUNENA_EDITOR_HELPLINE_MAP">
2.<wrap-selection />
3.</button>
4.<separator name="misc" />
5.<button name="help" title="COM_KUNENA_EDITOR_HELP" alt="COM_KUNENA_EDITOR_HELPLINE_HELP">
6.<link url="http://docs.kunena.org/index.php/bbcode" />
7.</button>

Последнее замечание. Отключив кнопки «eBay» и «Видео» в настройках редактора, я обнаружил, что на панели инструментов остались лишние разделители. Убрать их можно, удалив соответствующие теги из xml файла.
На этом пост Настройка кнопок редактора Kunena BBCode завершен. Всем удачи. Увидимся.

Joomla Блог Nauca – научись работать с Joomla

Хочешь получать на e-mail свежие статьи о компонентах, модулях, плагинах и других полезных вещах связанных с Joomla? Не пропусти ничего полезного, подпишись на новости блога Nauca: