ммм, ну все довольно просто. Про accessRules писать не буду, все есть в документации.
Сам elrte/elfinder подключаю как экстеншен
EditorWidget.php
<?php
class EditorWidget extends CWidget {
public $selector;
public $id;
public function run() {
$this->render('editor', array('selector' => $this->selector, 'id' => $this->id));
}
}
editor.php - вьюшка
<?
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/elrte.min.js');
$cs->registerScriptFile($baseUrl.'/js/elfinder.min.js');
$cs->registerScriptFile($baseUrl.'/js/i18n/elrte.ru.js');
$cs->registerScriptFile($baseUrl.'/js/i18n/elfinder.ru.js');
$cs->registerCssFile($baseUrl.'/css/elfinder.css');
$cs->registerCssFile($baseUrl.'/css/elrte.full.css');
if(!file_exists(Yii::app()->params['paths']['editor'] . '/' . $id))
mkdir(Yii::app()->params['paths']['editor'] . '/' . $id, 0777);
?>
<script type="text/javascript">
$(function() {
var opts = {
cssClass : 'el-rte',
lang : 'ru',
height : 450,
toolbar : 'complete',
absoluteURLs: false,
cssfiles : ['/css/elrte-inner.css'],
fmOpen : function(callback) {
$('<div id="myelfinder" />').elfinder({
url : '<? echo Yii::app()->createUrl('site/connector', array('id' => $id)); ?>',
fileURL: false,
lang : 'ru',
dialog : { width : 900, modal : true, title : 'Files' }, // открываем в диалоговом окне
closeOnEditorCallback : true, // закрываем после выбора файла
editorCallback : callback // передаем callback файловому менеджеру
});
}
}
$('<? echo $selector; ?>').elrte(opts);
});
</script>
в скрипте есть такая строчка
url : '<? echo Yii::app()->createUrl('site/connector', array('id' => $id)); ?>',
она создает корректную ссылку на мой коннектор, который я засунул в экшен
потом в конфиге прописываем правило для пути коннектора
BACKEND . '/connector/<id:\d+>' => 'site/connector',
далее пишем экшен для коннектора
SiteController.php
public function actionConnector() {
if (function_exists('date_default_timezone_set')) {
date_default_timezone_set('Europe/Kiev');
}
$opts = array(
'root' => Yii::app()->params['paths']['editor'] . '/' . $_GET['id'] , // path to root directory
'URL' => '/images/goods/' . $_GET['id'] . '/', // root directory URL
'rootAlias' => 'Корень', // display this instead of root directory name
);
$fm = new elFinder($opts);
$fm->run();
}
так же надо взять файл с классом elfinder и скопировать в папку /protected/extensions/, оригинальный файл выглядит так elFinder.class.php, что бы этот класс подхватился автоматом стоит переименовать его в elFinder.php
что еще, столкнулся с маленьким глюком, часть скриптов elfinder падали из-за попытки определить каким методом можно получать информацию о файлах. фиксить эту штуку не хотелось, по этому я просто закомментировал часть проверки в классе elFinder.
В методе _getMimeDetect()
вот кусок кода который закомментировал
/*if (class_exists('finfo')) {
return 'finfo';
} else*/if (function_exists('mime_content_type') && (mime_content_type(__FILE__) == 'text/x-php' || mime_content_type(__FILE__) == 'text/x-c++')) {
ну и самое главное, как подключать RTE.
<?php $this->widget('EditorWidget', array('selector' => '#description', 'id' => $form->id)); ?>
где
selector - jquery css селектор того поля которое вам надо сделать визивигом
id - это фича для моего сайта, в принципе сделана для того что бы все картинки не в одну кашу собирались, а что бы у своего типа контента была своя папка с картинками.
что еще, там есть по коду константа BACKEND, это тоже фича сайта, что бы админку можно было одним махом перенести например с /admin в /today-admin-folder-is-here
так же по коду используется Yii::app()->params[‘paths’][‘editor’], там находится абсолютный путь к папке куда складируются картинки, путь файловой системы!
ну и что бы экстеншены работали стоит проверить есть ли у вас в конфиге в секции import вот такой параметр ‘application.extensions.*’
вроде все, если что забыл, спрашивайте