Здравствуйте дорогие друзья и любители Joomla. Joomla! обладает очень гибким и простым механизмом переопределения шаблонов. Если вы когда-нибудь занимались этим, то знаете, что для переопределения нужно всего лишь скопировать файлы ядра в правильную папку, находящуюся в директории html вашего шаблона.
![Настройка кнопок редактора Kunena BBCode](http://nauca.com.ua/wp-content/uploads/2014/03/nastroika-knopok-kunena.png)
Настройка кнопок редактора Kunena BBCode
Kunena не является исключением, хотя здесь есть небольшое отличие. Например, если вы хотите изменить страницу ответа/редактирования, вам потребуется скопировать файл
/components/com_kunena/template/blue_eagle/html/topic/edit.php
в папку шаблона:
/templates/<ВашШаблон>/html/com_kunena/topic/edit.php
И вносить изменения в новый файл шаблона. За исключением этого момента, всё остальное соответствует стандартной процедуре.
Но предположим, ваш начальник говорит, что вам нужно убрать несколько кнопок с панели инструментов редактора BBCode. Заглянув в исходный код файла edit.php, вы понимаете, что для выполнения этой задачи вам придётся править файлы ядра Kunena. Естественно, я хочу избежать этого любой ценой. Вот как это сделать:
Вот кнопки, которые нас попросили убрать
В порядке, в котором они изображены на картинке, это: «Спойлер», «Скрыть текст от гостей», «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. Теперь директория должна выглядеть следующим образом:
Именно в файле 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» и «Видео» в настройках редактора, я обнаружил, что на панели инструментов остались лишние разделители. Убрать их можно, удалив соответствующие теги
На этом пост Настройка кнопок редактора Kunena BBCode завершен. Всем удачи. Увидимся.
Joomla Блог Nauca – научись работать с Joomla
![]() |