Fantastic WYSIWYG-editor on jQuery

Выкладываем свои наработки
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

Изображение Redactor

ImperaviRedactorWidget — обёртка для Imperavi Redactor, довольно неплохого WYSIWYG редактора.

Обратите внимание, что сам Imperavi Redactor — коммерческий продукт и не является OpenSource, но так как сообщество Yii купило OEM-лицензию, то вы можете бесплатно пользоваться им в проектах на Yii.

Github
Примеры использования
Жду Yii 3!
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение nizsheanez »

/**
* Assets package ID.
*/
const PACKAGE_ID='imperavi-redactor';


это чего?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

Это ID пакета

Код: Выделить всё

Yii::app()->getClientScript();
$cs->registerPackage(self::PACKAGE_ID); 
Если до использования виджета зарегестрировать свой пакет ресурсов под таким именем, буден использован он. Например, если нужно использовать более старую или свою доработанную версию редактора.
Жду Yii 3!
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение nizsheanez »

что-то меня смущает в таком подходе. Тогоже эффекта через темы нельзя добиться?

хотя подход в общем удобен.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

О каком подходе речь? О пакетах? Если да то, мне они кажутся мегаудобными, намного удобнее чем просто ресурсы публиковать и еще заботится о зависимостях.
Жду Yii 3!
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение Ekstazi »

2mc-bear, спасибо за идею. Буду юзать.
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение SpiLLeR »

Пакеты полезная штука, как появились стал использовать.
2mc-bear, Не мог бы рассказать свое мнение о данном визивиге? До этого использовал какие-то визивиги? Если да, то почему перешел на этот? Какие у него преимущества на твой взгляд? что хорошо?)
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

SpiLLeR, не могу сравнивать, опыта с другими практически нет. Рассказывать не знаю даже что, текущая версия в админке полностью хватает.
Жду Yii 3!
Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение Koduc »

На сколько я вижу - это продолжение Imperavi
Не нашел на гитхабе контроллера, который отвечает за аплоад. В последних версиях imperavi была сделана клёва фишка - при аплоаде произвольных файлов (doc, xls, pdf etc) вставлялась ссылка на файл с иконкой типа файла (картинка http://clip2net.com/s/1WtWN ).
Ну и плюс надо править css сайта, чтобы везде такие иконки корректно показывались.

Код выдернул из проекта, нет сейчас времени подправить. Но что-то типа такого:

Код: Выделить всё

class RedactorController extends CExtController {
    function run($actionID) {
        if(Yii::app()->user->getState("isAdmin")){
            $type = Yii::app()->request->getQuery('type');

            Controller::disableProfiler(); // yii-debug-toolbar disabler

            if($type == 'imageUpload' || $type == 'fileUpload'){
                if (!empty($_FILES['file']['name']) && !Yii::app()->user->isGuest) {
                    //$dir = Yii::getPathOfAlias('webroot.upload') . '/' . Yii::app()->user->id . '/';
                    $dir = Yii::getPathOfAlias('webroot.uploads') . '/';
                    if (!is_dir($dir))
                        @mkdir($dir, '0777', true);

                    $file = CUploadedFile::getInstanceByName('file');
                    if ($file) {
                        if($type == 'imageUpload'){
                            $new_name = md5(time()) . '.' . $file->extensionName;
                            $file->saveAs($dir . $new_name);
                            echo '<img src="'.Yii::app()->getBaseUrl(false).'/uploads/' . $new_name.'" />';
                        } else {
                            $new_name = $file->getName();
                            if(!is_file($dir . $new_name)){
                                $file->saveAs($dir . $new_name);
                                echo '<a href="'.Yii::app()->getBaseUrl(false).'/uploads/'.$new_name.'"
                                    rel="'.$new_name.'"
                                    class="redactor_file_link redactor_file_ico_'.$this->_getIcon($file->extensionName).'">'.$new_name.'</a>';
                            } else {
                                echo Yii::t('common', 'Uploading error! File already exists');
                            }
                        }
                        Yii::app()->end();
                    }
                }
            }
            
            if($type == 'fileDelete'){
                $fname = Yii::getPathOfAlias('webroot.uploads').'/'.$_GET['delete'];
                if(is_file($fname) && dirname($fname) == Yii::getPathOfAlias('webroot.uploads')){
                    unlink($fname);
                }
            }
            
            if($type == 'fileDownload'){
                if (isset($_GET['file'])){
                    $fname = Yii::getPathOfAlias('webroot.uploads').'/'.$_GET['file'];
                    if(is_file($fname) && dirname($fname) == Yii::getPathOfAlias('webroot.uploads')){
                        $this->_download($fname);
                    }
                }
            }
        }
    }

    private function _getIcon($type){
        $fileicons = array('other' => 0, 'avi' => 'avi', 'doc' => 'doc', 'docx' => 'doc', 'gif' => 'gif', 'jpg' => 'jpg', 'jpeg' => 'jpg', 'mov' => 'mov', 'csv' => 'csv', 'html' => 'html', 'pdf' => 'pdf', 'png' => 'png', 'ppt' => 'ppt', 'rar' => 'rar', 'rtf' => 'rtf', 'txt' => 'txt', 'xls' => 'xls', 'xlsx' => 'xls', 'zip' => 'zip');

        if (isset($fileicons[$type])){
            return $fileicons[$type];
        } else {
            return 'other';
        }
    }

    private function _download($filename, $filenamef = false, $mimetype='application/octet-stream'){
        if (!file_exists($filename)) die('File not found');

        $from = $to = 0;
        $cr = NULL;

        if (isset($_SERVER['HTTP_RANGE'])){
            $range = substr($_SERVER['HTTP_RANGE'], strpos($_SERVER['HTTP_RANGE'], '=')+1);
            $from = strtok($range, '-');
            $to = strtok('/');
            if ($to>0) $to++;
            if ($to) $to-=$from;
            header('HTTP/1.1 206 Partial Content');
            $cr = 'Content-Range: bytes ' . $from . '-' . (($to)?($to . '/' . $to+1):filesize($filename));
        }
        else header('HTTP/1.1 200 Ok');

        if ($filenamef === false) $filenamef = $filename;

        $etag = md5($filename);
        $etag = substr($etag, 0, 8) . '-' . substr($etag, 8, 7) . '-' . substr($etag, 15, 8);
        header('ETag: "' . $etag . '"');
        header('Accept-Ranges: bytes');
        header('Content-Length: ' . (filesize($filename)-$to+$from));
        if ($cr) header($cr);
        header('Connection: close');
        header('Content-Type: ' . $mimetype);
        header('Last-Modified: ' . gmdate('r', filemtime($filename)));
        $f = fopen($filename, 'r');
        header('Content-Disposition: attachment; filename="' . basename($filenamef) . '";');
        if ($from) fseek($f, $from, SEEK_SET);
        if (!isset($to) || empty($to)) $size=filesize($filename)-$from;
        else $size=$to;
        $downloaded = 0;
        while(!feof($f) && !connection_status() && ($downloaded<$size)){
            echo fread($f, 512000);
            $downloaded+=512000;
            flush();
        }
        fclose($f);
    }
} 
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

Верно контроллера нет и не думаю что появится в этом расширении.
Загрузка файлов/картинок из проекта в проект отличается и никак к редактору не привязан.
Так что если в проекте нет собственного контроллера-загрузчика, можно юзать
https://github.com/yiiext/file-upload-action
Жду Yii 3!
DRX_wat
Сообщения: 36
Зарегистрирован: 2012.01.23, 02:32

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение DRX_wat »

Спасибо за новость. Удобная вещь на первый взгляд.
Zeen
Сообщения: 44
Зарегистрирован: 2011.06.28, 11:50

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение Zeen »

Еще бы поддержку CSRF добавить
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение nizsheanez »

а причем тут csrf?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

givemeachance писал(а):Расскажите, пожалуйста, как правильно подключить редактор при загрузке формы аяксом?
В чем проблема?
Жду Yii 3!
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение aser »

А как бороться со вставкой через из Word?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

Редактор чистит мусор ворда, как минимум в документации об этом сказано :)
Жду Yii 3!
Аватара пользователя
aser
Сообщения: 167
Зарегистрирован: 2009.04.02, 14:25
Откуда: Киев

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение aser »

что не туда, но чистит он, мягко говоря, плохо. А вставка через Word сплошь и рядом. И шаблон письма вместо 5кь - 155кб, вроде и не много, а при отправке по базе 15тыс, уже не так мало.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

Ну тогда у тебя как минимум три варианта выбора
1) Дописать свой скрипт который будет чистить (js - у редактора есть API, или HtmlPurifier задействовать)
2) Попробовать убедить авторов чтоб исправили чистяльзик
3) Юзать другой редактор
Жду Yii 3!
Аватара пользователя
twix
Сообщения: 86
Зарегистрирован: 2011.12.12, 18:25

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение twix »

Не нашел кнопки изменения размера. Надо. Печально(
Возьму ck или tiny.
Но редактор этот симпатичный) Я за развитие)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Fantastic WYSIWYG-editor on jQuery

Сообщение slavcodev »

Изменение размера чего? Картинки? Если да, то клацаешь на ней и таскаешь в строны.

ЗЫ: У редактора поменялась лицензия, теперь он платный, что меня очень огорчило.
Конечно за хороший продукт можно заплатить, вот только мне не нравится, когда продукт резко становится платным.
Жду Yii 3!
Ответить