Almost in every application, i have need in wysiwyg editor for content. In most of them I have used tinymce extension writen by MetaYii(with some ugly changes, added by me, to connect elFinder file manager to it).
Recently I have written my own widget for TinyMce and for elFinder with possibility of integrating them. Also I have written separate actions for TinyMce compessor and for spellchecker plugin. So i think that my code looks more cleaner than something like tinymceelfinder extension, that has similar functionality.
Also I have added less ugly skin for tinyMce(modified version of cirkuitSkin).
// controller for tinyMce Yii::import('ext.tinymce.*'); class TinyMceController extends CController { public function actions() { return array( 'compressor' => array( 'class' => 'TinyMceCompressorAction', 'settings' => array( 'compress' => true, 'disk_cache' => true, ) ), 'spellchecker' => array( 'class' => 'TinyMceSpellcheckerAction', ), ); } } // in view $this->widget('ext.tinymce.TinyMce', array( 'model' => $model, 'attribute' => 'tinyMceArea', // Optional config 'compressorRoute' => 'tinyMce/compressor', //'spellcheckerUrl' => array('tinyMce/spellchecker'), // or use yandex spell: http://api.yandex.ru/speller/doc/dg/tasks/how-to-spellcheck-tinymce.xml 'spellcheckerUrl' => 'http://speller.yandex.net/services/tinyspell', 'fileManager' => array( 'class' => 'ext.elFinder.TinyMceElFinder', 'connectorRoute'=>'admin/elfinder/connector', ), 'htmlOptions' => array( 'rows' => 6, 'cols' => 60, ), ));
By default Yii validates csrf token for all requsts, but spellchecker has requst content-type "application/json" - so even if we pass csrf token in request, yii will not validate it.
Also there is no need in csrf validation for spellchecker service, so possible solutions is to skip validation for such requests. I order to do so we need to extend CHttpRequst like in sample below:
class HttpRequest extends CHttpRequest { public function validateCsrfToken($event) { $contentType = isset($_SERVER["CONTENT_TYPE"]) ? $_SERVER["CONTENT_TYPE"] : null; if ($contentType !== 'application/json') parent::validateCsrfToken($event); } }
And add it into application configuration:
// application components 'components' => array( 'request' => array( 'class' => 'HttpRequest', 'enableCsrfValidation' => true, ), ... ),
Total 18 comments
Just add 'js:' prefix:
how can I use onchange_callback ?
I try:
but nothing happens
I think need one function like 'reinit' to init again with the sames settings than the init :)
Hi Bodya,
nice extension again. I experienced a bootstrap conflict with yii's tinymce extension and I tried this. The conflict has amazingly gone. Excellent work! Grat! So I've tried the galleryManager before and that have been also great like this one again.
Best Regards Laszlo from Hungary
Works well with tinymce and elfinder, but not save fields content. Anyone, any ideas?
Spell check function does not work well in lii site. Language is Vietnamese. Anyone help me?
Btw, this is very good extension. I recommend. (Better than Tinymce original/FCK Editor)
@fad, thanks for that idea - I have updated extension, now external spell checkers can be used.
TinyMce.php, line 105
If i use external spelling, like URL http://speller.yandex.net/services/tinyspell in config (http://api.yandex.ru/speller/doc/dg/tasks/how-to-spellcheck-tinymce.xml Url is mysite.ru/http://speller.yandex.net/services/tinyspell need to check spellcheckerRoute - external or internal route....
Compressor will work(it works by get request).
Originally tinymce spellchecker plugin does not support CSRF protection, so, by now, my widget does not support it too. ASAP, I will try to fix this. Thanks for report.
Spell check (and I think compressor) do not work if you have csrf validation enabled (which everyone should) because it does not send the crsf token.
Url is normal - it is not url to script, it is url to compressor action which will concatenate and compress all scripts requested in action params.
After i have removed all routing rules from url manager - I have the same url as you have, - no errors, everything works.
I'm probably missing something… The js file is not correctly referred to, au far as I can see. Here is the link that is generated in the page where I put the widget:
Note: I got the source by cloning the repository
This is part of configuration for fileManager integration. In example above it is for my elFinder extesion. You can read how to configure it on extension page.
Please, could you let me know what is this: 'connectorRoute'=>'admin/elfinder/connector', How should I setup it?
Replace 'ext.tinymce.TinyMce' in your config with 'TinyMce'.
In widgets property for widgetFactory you should use class name as a key for widget configuration not alias for it.
I write in protected/config/main.php
But there is no change in tinymce What can I do?
Settings are the same as for original script.
About where to set - your can pass them as any other params, when rendering widget. Also you can set some default settings for your application widgets in widgetFactory configuration
How-to or where to set $settings declared var in TinyMce.php?
Leave a comment
Please login to leave your comment.