-
Couldn't load subscription status.
- Fork 63
Интеграция WYSIWYG
KodiCMS позволяет интегрировать в себя любой HTML редактор текста, кода и т.д. Процесс интеграции включает в себя неколько этапов:
- Написание JavaScript скрипта отвечающего за подключение и отключение редактора
- Регистрация JavaScript кода в системе
- Для редакторов типа
Markdownописание класса - фильтра отвечающего за преобразование текста
Javascript файл можно размещать в любом модуле системы по пути modulename/resources/js/filename.js
Рассмотрим пример подключения редактора ckeditor
CMS.ui.add('ckeditor', function() { // регистрация UI компонента
var $ckeditor = {};
CKEDITOR.disableAutoInline = true;
CKEDITOR.config.extraPlugins = 'images-browser';
CKEDITOR.config.simpleImageBrowserURL = '/api-media.images';
// Метод вызываемый в момент активации редактора
$ckeditor.switchOn_handler = function (textarea_id, params) {
params = $.extend({
skin: 'bootstrapck',
filebrowserBrowseUrl: BASE_URL + '/filemanager.popup',
height: 200
}, params);
var editor = CKEDITOR.replace(textarea_id, params);
return editor;
};
// Метод вызываемый в момент деактивации редактора
$ckeditor.switchOff_handler = function (editor, textarea_id){
editor.destroy()
}
// Метод вызываемый в момент передачи параметров в редактор
$ckeditor.exec_handler = function (editor, command, textarea_id, data){
switch (command) {
case 'insert':
editor.insertText(data);
break;
case 'changeHeight':
editor.resize('100%', data);
}
}
// Регистрация филтра в системе на стороне JavaScript. На входе метод add ожидает 4 параметра
CMS.filters.add('ckeditor', $ckeditor.switchOn_handler, $ckeditor.switchOff_handler, $ckeditor.exec_handler);
});
CMS.filters.add - Регистрация филтра в системе на стороне JavaScript. На входе метод add ожидает 4 параметра
1. Название фильтра по которому он будет доступен для подключения
2. Callback при выборе фильтра (активация редактора)
3. Callback при деактивации редактора
4. Callback при передаче в редактор данных
modulename/resources/packages.php
use KodiCMS\CMS\Assets\Package;
Package::add('ckeditor')
->js('ckeditor-library', resources_url() . '/libs/ckeditor/ckeditor.js', 'jquery')
->js(NULL, backend_resources_url() . '/js/ckeditor.js', 'ckeditor-library'); // Файл с нашим скриптом добавления фильтра, который был показан выше
/**
* @param string $editorId [Идентификатор редактора, должен совпадать с тем, что указали в Javascript коде CMS.filters.add('ckeditor'....]
* @param string|null $name [Название редактора для выпадающего списка]
* @param string|null $filter [Класс фильтра, который будет использоваться для преобразования. Должен ]
* @param string|null $package [Клю медиа пакета по которому на страницу он будет загружен, default: $editorId]
* @param string $type [Тип редактора (html, code), default: self::TYPE_HTML]
*/
WYSIWYG::add('ckeditor', 'CKEditor');
Единственное условие это реализация интерфейса KodiCMS\CMS\Contracts\WysiwygFilterInterface. В метод apply передается строка с текстом, там она преобразуется и возвращается преобразованная строка.
use WYSIWYG;
$html = WYSIWYG::applyFilter('ckeditor', ....);
Для подключение редактора, необходимо через контроллер инициализировать существующие редакторы
use WYSIWYG;
class PageController extends BackendController
{
...
public function getEdit($id)
{
WYSIWYG::loadDefaultHTMLEditor();
...
}
...
}
<textarea id="textareaId"></textarea>
@section('scripts')
@parent
<script>
$(function() {
// Если необходима передача параметров в редактор
var params = $('#textareaId').data();
CMS.filters.switchOn('textareaId', 'ckeditor', params);
});
</script>
@stop
Каждая страница админ панели содержит JavaScript переменные, которые помогут получить идентификатор редактора по умолчанию:
-
DEFAULT_HTML_EDITOR- Редактор текста по умолчанию -
DEFAULT_CODE_EDITOR- Редактор кода по умолчанию
Пример использования
CMS.filters.switchOn('textareaId', DEFAULT_HTML_EDITOR, params);
-
getDefaultHTMLEditorId()- идентификатор редактора текста по умолчанию -
isExists($editorId)- Проверка редактора на существование -
isLoaded($editorId)- Проверка подключен ли редактор на страницу -
getUsed()- Список используемых редакторов на странице -
getAvailable()- Получения списка доступных редакторов в системе -
getAvailableByType($type)- Получения списка доступных редакторов определенного типа -
getEditor($editorId)- Получение объекта редактора (KodiCMS\CMS\Contracts\WysiwygEditorInterface) -
loadAllEditors()- Загрузить в шаблон все редакторы -
loadCodeEditors()- Загрузить в шаблон редакторы кода -
loadHTMLEditors()- Загрузить в шаблон редакторы текса -
loadDefaultHTMLEditor()- Загрузить в шаблон редактор текста по умолчанию -
loadDefaultCodeEditor()- Загрузить в шаблон редактор кода по умолчанию -
loadDefaultEditors()- Загрузить в шаблон редакторы по умолчанию -
loadEditor($editorId)- Загрузить редактор в шаблон по идентификатору -
applyFilter($editorId, $text)- Применить фильтр используемый редактором к тексту -
htmlSelect($type = null)- Получение списка редакторов для выпадающего списка -
usedHtmlSelect()- Получение списка редакторов для выпадающего списка подключенных в шаблон
Для просмотра списка подключенных редакторов кода в системе используйте консольную команду:
php artisan cms:wysiwyg:list