Open loveorigami opened 9 years ago
сложный вопрос думаю правельнее сделать через CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/', 'plugin.js' ); но надо както связать с ассетсами чтоб всё автоматом подтягивалось у меня пока нету времени занятся этим если у вас будут предложения по реализвации буду рад помощи!
Да, это если писать свой плагин, можно взять на заметку. http://ckeditor.com/forums/CKEditor-3.x/Tutorial-create-external-plugin-for-CKEDITOR
А из тех, которые я хочу добавить из уже разработанных, они предполагают установку путем копирования в папку plugins... http://docs.ckeditor.com/#!/guide/dev_plugins например, этот - http://ckeditor.com/addon/footnotes
видимо, просто придется обновлять ckeditor вручную... Неизвестно еще как после обновления поведут себя эти плагины...
невижу ничего сложно скачиваем и распаковываем кудато плагин далее во вьюхе
list(,$footnotesUrl) = Yii::$app->assetManager->publish('@app/path/to/footnotes');
$this->registerJs("CKEDITOR.plugins.addExternal( 'footnotes', ".\yii\helpers\Json::encode($footnotesUrl).", 'plugin.js' );");
В общем, по разному. Через компонент запустить не получилось ... Возможно баг с $options['extraPlugins'];
<script>
CKEDITOR.replace( 'editor1', {
extraPlugins: 'magicline',
extraPlugins: 'footnotes',
extraPlugins: 'widget',
// Ensure that magicline plugin, which is required for this sample, is loaded.
allowedContent: true
} );
</script>
if($this->_inline){
$options['extraPlugins'] = 'sourcedialog';
$options['removePlugins'] = 'sourcearea';
}
кстати - на демке http://demo.gridlight-design.co.uk/ckeditor-footnotes.html тоже используется предустановленный в ckeditor.js плагин...
Наконец дошли руки до плагинов :) В общем, разобрался, почему они не подключаются...
Дело в том, что код
$this->registerJs("CKEDITOR.plugins.addExternal( 'footnotes', ".\yii\helpers\Json::encode($footnotesUrl).", 'plugin.js' );");
только регистрирует плагин.
а для того, чтобы появилась кнопка в редакторе, его необходимо инициализировать. и выполнить скрипт в таком порядке
CKEDITOR.plugins.addExternal('footnotes', $footnotesUrl);
CKEDITOR.replace('id_editor', {
// Load the footnotes plugin.
extraPlugins: 'footnotes',
});
На деле же данный код в комбинации с POS
$this->registerJs("CKEDITOR.plugins.addExternal( 'footnotes', ".\yii\helpers\Json::encode($footnotesUrl).", 'plugin.js' );");
вызывается либо выше самого ckeditor.js, либо ниже CKEDITOR.replace('id_editor',....
и по этой причине плагин footnotes
не подключается...
В связи с чем у меня есть идея ). Недавно я написал модуль плагинов, работающий на событиях. https://github.com/loveorigami/yii2-plugins-system
Когда собирал инфу по этому вопросу, находил и ваше сообщение http://www.yiiframework.ru/forum/viewtopic.php?t=19722#p115748 помогло )
Идея заключается в следующем :+1: Ввести в ваш класс CKEditor несколько event - ов, участвующих в формировании конфигурации редактора.
Например, если я все правильно понимаю, после создания такового - EVENT_BEFORE_INITEDITOR (по минимому) отдаст мне ID редактора и его preset.
Затем, как в данном плагине https://github.com/loveorigami/yii2-plugins-system/blob/master/plugins/code/Code.php в функции ShortCode я получаю эти данные, в зависимости от которых произвожу свои операции: например - для пресета mini не возвращать дополнительных настроек.
А для остальных пресетов я возвращаю URL extraplagins и набор самих extra ск-плагинов (abbr, footnotes etc.)
Вы же, получив эти данные, формируете окончательные настройки инициализации редактора, подключив вверху сначала extra-плагины, а потом вызвав их в самом CKEDITOR.replace('id_editor', {.....
Пока что в ручном режиме у меня получилось сделать так.
Во вьюшке создал textarea id="editor"
Код моего плагина
class Test
{
/**
* Application id, where plugin will be worked.
* Support values: frontend, backend, common
* Default: frontend
* @var appId string
*/
public static $appId = 'frontend';
/**
* Default configuration for plugin.
* @var config array()
*/
public static $config = [
'mode' => 'full',
];
public static function events()
{
return [
'yii\base\View' => [
'afterRender' => ['foo', self::$config]
],
];
}
/**
* handler method foo
*/
public function foo($event)
{
$view = $event->sender;
$bundle = TestAsset::register($view);
$view->registerJs("
if(typeof CKEDITOR != 'undefined'){
CKEDITOR.plugins.addExternal('footnotes', '$bundle->baseUrl/footnotes/');
CKEDITOR.replace('editor', {
//language: 'ru',
uiColor: '#9AB8F3',
// Load the footnotes plugin.
extraPlugins: 'footnotes',
// Disable Advanced Content Filter as the plugin does not implement it (yet).
allowedContent: true,
// The following options are set to make the sample more clear for demonstration purposes.
// Rearrange toolbar groups and remove unnecessary plugins.
toolbarGroups: [
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },
{ name: 'links' },
{ name: 'insert' },
{ name: 'document', groups: [ 'mode' ] },
'/',
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list', 'indent' ] },
{ name: 'styles' },
{ name: 'about' }
],
removePlugins: 'font,iframe,pagebreak,flash,stylescombo,print,preview,save,smiley,pastetext,pastefromword',
removeButtons: 'Anchor,Font,Strike,Subscript,Superscript'
});
}
", $view::POS_END);
return true;
}
}
и получаю результат.
Т.е задача сводится к тому, как можно извне повлиять на настройки редактора. Возможно ли это через события?
Я поддержу предыдущего оратора :)
Проблема имеет место быть: как и было сказано попытался подключить свой плагин (во вьюшку) через: list(,$linkstreeUrl) = Yii::$app->assetManager->publish('@app/web/js/cke_plugins/linkstree'); $this->registerJs("CKEDITOR.plugins.addExternal( 'linkstree', ".\yii\helpers\Json::encode($linkstreeUrl).", 'plugin.js' );");
код в странице есть: юрл плагина валиден, но эффекта нет.... при попытке добавить: CKEDITOR.replace('article-full', { // Load the footnotes plugin. extraPlugins: 'linkstree', });
получаю ошибку js: элемент уже назначен, ну или как-то так...
П.С. если прописываю в @app/vendor/mihaildev/yii2-ckeditor/editor/config.js: config.extraPlugins = 'linkstree';
все работает!.. но это же не правильно править вендоровские файлы :) хелп плиз...
Я. чтоб не править, сделал форк, добавил Asset с плагинами. Зарегистрировал его во вьюшке https://github.com/loveorigami/yii2-ckeditor/blob/master/CKEditor.php#L137
А потом нужные плагины добавил перед инициализацией редактора. https://github.com/loveorigami/yii2-ckeditor/blob/master/CKEditor.php#L192
И где нужно, прописал в пресеты https://github.com/loveorigami/yii2-ckeditor/blob/master/CKEditor.php#L91
После этого все заработало, как и хотелось выше ). Редактор отдельно (у себя вообще перенес в bower), доп. плагины - отдельно.
https://github.com/sadovojav/yii2-ckeditor
eto fork MihailDev/yii2-ckeditor s dobavkami kak plugin i t.d
Михаил, подскажите, как я могу добавить новые (или свои) плагины в редактор. http://ckeditor.com/addons/plugins/all Думаю так: