Yii2 Imperavi Redactor

Выкладываем свои наработки
Аватара пользователя
Dominus
Сообщения: 799
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 Imperavi Redactor

Сообщение Dominus » 2016.11.29, 13:05

Arni писал(а):
Dominus писал(а): Что бы отключить уникальность имен файлов, в настройках нужно указать:

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

'unique' => false,
По умолчанию там стоит true.
Спасибо! Не знаете есть ли какая-то настройка, чтобы в файлах с именем на кирилице при сохранении не коверкалось название? Получается Киевстар - акты.xlsx
Это с кодировкой надо играть. Ну или переименовывать имена файлов в транслит).
Для транслита можно воспользоваться этим хэлпером TransliteratorHelper for Yii 2.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Imperavi Redactor

Сообщение zelenin » 2016.11.29, 14:32

Dominus писал(а):Для транслита можно воспользоваться этим хэлпером TransliteratorHelper for Yii 2.
некорректный и тяжелый транслитератор. из коробки в php идет "правильный" intl

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.11.29, 16:30

В любом случае это надо ковыряться в файлах виджета искать куда вставить функцию транслитерации?

Аватара пользователя
Dominus
Сообщения: 799
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 Imperavi Redactor

Сообщение Dominus » 2016.11.29, 16:57

Arni писал(а):В любом случае это надо ковыряться в файлах виджета искать куда вставить функцию транслитерации?
Отнаследоваться, переопределить что вам нужно и подключать свою версию UploadAction, да и искать то там особо ничего не нужно, код понятен, нужно только изменить run(), а именно там где задаётся имя файла

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

$model->file->name
Как то так:

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

namespace common/components/imperavi/actions

class UploadAction extends \vova07\imperavi\actions\UploadAction
{

    public function run()
    {
       ...
       if ($this->unique === true && $model->file->extension) {
           $model->file->name = uniqid() . '.' . $model->file->extension;
        } else if($model->file->baseName && $model->file->extension) {       
           // Задаём своё имя
           $model->file->name = self::transliterateName($model->file->baseName). '.' . $model->file->extension;
        }
       ...      
    }
    
    public function transliterateName($str) {
        // наш код
        ...
       return $str;
    }
}
и подключаем:

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

'file-upload' => [
            ...
            'class' => 'common\components\imperavi\actions\UploadAction',
            ...
 ] 
Последний раз редактировалось Dominus 2016.11.29, 18:05, всего редактировалось 4 раза.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.11.29, 17:55

Ура, получилось. Добавил в класс:
$model->file->name = transliterator_transliterate('Any-Latin; Latin-ASCII;', $model->file->baseName) . '.' . $model->file->extension;
осталось подключить как вы написали. Единственное плохо, что транслитератор intl на хостингах обычно отключен, наверное буду делать через какой-нибудь отдельный класс, которых полно в интернете.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Imperavi Redactor

Сообщение zelenin » 2016.11.29, 18:09

Arni писал(а):Ура, получилось. Добавил в класс:
$model->file->name = transliterator_transliterate('Any-Latin; Latin-ASCII;', $model->file->baseName) . '.' . $model->file->extension;
осталось подключить как вы написали. Единственное плохо, что транслитератор intl на хостингах обычно отключен, наверное буду делать через какой-нибудь отдельный класс, которых полно в интернете.
надо включить.

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.11.29, 19:05

zelenin писал(а):
Arni писал(а):Ура, получилось. Добавил в класс:
$model->file->name = transliterator_transliterate('Any-Latin; Latin-ASCII;', $model->file->baseName) . '.' . $model->file->extension;
осталось подключить как вы написали. Единственное плохо, что транслитератор intl на хостингах обычно отключен, наверное буду делать через какой-нибудь отдельный класс, которых полно в интернете.
надо включить.
Это понятно, просто хочу универсальное решение, а то получится сайт готов, а какой-то хостер откажется включать.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Imperavi Redactor

Сообщение zelenin » 2016.11.29, 19:09

Arni писал(а):
zelenin писал(а):
Arni писал(а):Ура, получилось. Добавил в класс:
$model->file->name = transliterator_transliterate('Any-Latin; Latin-ASCII;', $model->file->baseName) . '.' . $model->file->extension;
осталось подключить как вы написали. Единственное плохо, что транслитератор intl на хостингах обычно отключен, наверное буду делать через какой-нибудь отдельный класс, которых полно в интернете.
надо включить.
Это понятно, просто хочу универсальное решение, а то получится сайт готов, а какой-то хостер откажется включать.
это проблема хостера. Вы вправе сами выбирать своего хостера. Достаточно странно ухудшать свой код, чтобы решить странные проблемы чужого дяди.

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.11.29, 22:58

Dominus писал(а): подключаем
Методом тыка подключил. Работает, если в методе run() закомментировать строку

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

$model->addRule ('file', $this->_validator, $this->validatorOptions)->validate(); 
иначе ошибка в app.log:

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

2016-11-30 00:48:07 [127.0.0.1][-][-][error][yii\base\UnknownPropertyException] exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: common\widgets\UploadKsl::_validator' in W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Component.php:143
Stack trace:
#0 W:\domains\klisl.loc\common\widgets\UploadKsl.php(33): yii\base\Component->__get('_validator')
#1 [internal function]: common\widgets\UploadKsl->run()
#2 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Action.php(92): call_user_func_array(Array, Array)
#3 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Controller.php(154): yii\base\Action->runWithParams(Array)
#4 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Module.php(454): yii\base\Controller->runAction('image-upload', Array)
#5 W:\domains\klisl.loc\vendor\yiisoft\yii2\web\Application.php(100): yii\base\Module->runAction('post/image-uplo...', Array)
#6 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#7 W:\domains\klisl.loc\backend\web\index.php(19): yii\base\Application->run()
#8 {main}  
не разбираюсь в этом, может у кого есть идеи? Ничего ведь в коде класса не менял.

Аватара пользователя
Dominus
Сообщения: 799
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 Imperavi Redactor

Сообщение Dominus » 2016.11.30, 11:15

Arni писал(а):
Dominus писал(а): подключаем
Методом тыка подключил. Работает, если в методе run() закомментировать строку

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

$model->addRule ('file', $this->_validator, $this->validatorOptions)->validate();
иначе ошибка в app.log:

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

2016-11-30 00:48:07 [127.0.0.1][-][-][error][yii\base\UnknownPropertyException] exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: common\widgets\UploadKsl::_validator' in W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Component.php:143
Stack trace:
#0 W:\domains\klisl.loc\common\widgets\UploadKsl.php(33): yii\base\Component->__get('_validator')
#1 [internal function]: common\widgets\UploadKsl->run()
#2 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Action.php(92): call_user_func_array(Array, Array)
#3 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Controller.php(154): yii\base\Action->runWithParams(Array)
#4 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Module.php(454): yii\base\Controller->runAction('image-upload', Array)
#5 W:\domains\klisl.loc\vendor\yiisoft\yii2\web\Application.php(100): yii\base\Module->runAction('post/image-uplo...', Array)
#6 W:\domains\klisl.loc\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#7 W:\domains\klisl.loc\backend\web\index.php(19): yii\base\Application->run()
#8 {main}     
не разбираюсь в этом, может у кого есть идеи? Ничего ведь в коде класса не менял.
Ошибка говорит о том, что не определена переменная $_validator.
$_validator приватная переменная, попробуйте добавить её перед run() в вашей версии UploadAction

т.е.

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

namespace common/components/imperavi/actions

class UploadAction extends \vova07\imperavi\actions\UploadAction
{
     /**
     * @var string Model validator name
     */
    private $_validator = 'image';

    public function run()
    {
       ...
       if ($this->unique === true && $model->file->extension) {
           $model->file->name = uniqid() . '.' . $model->file->extension;
        } else if($model->file->baseName && $model->file->extension) {       
           // Задаём своё имя
           $model->file->name = self::transliterateName($model->file->baseName). '.' . $model->file->extension;
        }
       ...      
    }
    
    public function transliterateName($str) {
        // наш код
        ...
       return $str;
    }
}
 
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.11.30, 12:10

Dominus писал(а):
Теперь все ок, спасибо. Когда сделал то уже думаю- как я сам не догадался)

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.12.28, 15:56

При вставке html кода в режиме "код", при повторном открытии/пересохранении записи, некоторые теги, например <span> форматирюется в

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

<span style="color: #000000; font-weight: bold;">class</span>
то есть кавычки заменяются. Кто-то знает как отменить такое форматирование?

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.12.28, 16:38

Разобрался, это делает функция encodeEntities() из файла redactor.js Отменил замену символов в функции, сейчас нормально. Но может есть такая настройка, чтобы не изменять файл виджета?

Аватара пользователя
Dominus
Сообщения: 799
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Yii2 Imperavi Redactor

Сообщение Dominus » 2016.12.29, 00:50

Arni писал(а):Разобрался, это делает функция encodeEntities() из файла redactor.js Отменил замену символов в функции, сейчас нормально. Но может есть такая настройка, чтобы не изменять файл виджета?
Смотрите настройки самого редактора.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Arni
Сообщения: 28
Зарегистрирован: 2016.11.29, 00:01

Re: Yii2 Imperavi Redactor

Сообщение Arni » 2016.12.29, 19:37

Dominus писал(а): Смотрите настройки самого редактора.
Вроде бы там нет такой опции, но есть много другого нужного о чем не знал.

kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Yii2 Imperavi Redactor

Сообщение kawabanga » 2017.02.16, 07:26

Друзья, а нет ли желания продлить OEM лицензию? Всем миром по нитке... Я бы вложился...

kemycuk
Сообщения: 7
Зарегистрирован: 2016.03.25, 20:28

Re: Yii2 Imperavi Redactor

Сообщение kemycuk » 2017.02.19, 18:48

Товарищи, привет!

Редактор создаёт списки вида:

<ul>
<li></li>
<li></li>
<li></li>
</ul>

А мне нужно добавить стиль по умолчанию:

<ul class="style-name">
<li></li>
<li></li>
<li></li>
</ul>


Где что нужно отредактироват ьскажите, пожалуйста? (Желательно имя файла и строку, тк я вообще далёк от php)

Goog1e
Сообщения: 97
Зарегистрирован: 2016.01.18, 20:02

Re: Yii2 Imperavi Redactor

Сообщение Goog1e » 2017.03.31, 11:47

Не получается удалить картинку на сервере, когда удаляешь через кнопку
https://yadi.sk/i/9nGvFseU3GWiRX

DefaultController

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

        return [
            'images-get' => [
                'class' => 'vova07\imperavi\actions\GetAction',
                'url' => '/images/post',
                'path' => '@webroot/images/post',
                'type' => GetAction::TYPE_IMAGES,
            ],
            'image-upload' => [
                'class' => 'vova07\imperavi\actions\UploadAction',
                'url' => '/images/post',
                'path' => '@webroot/images/post',
            ],
        ];
_form

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

    <?= $form->field($model, 'post_content')->widget(
        Imperavi::className(), [
            'settings' => [
                'minHeight' => 300,
                'imageUpload' => Url::to(['/admin/default/image-upload']),
                'imageManagerJson' => Url::to(['/admin/default/image-get']),
                'plugins' => [
                    'imagemanager',
                ]
            ]
        ]
    ) ?>
    

И еще такой момент, не могу добавить новые плагины
Например 'counter' ,'table' - кнопки в редакторе не появляются.

Goog1e
Сообщения: 97
Зарегистрирован: 2016.01.18, 20:02

Re: Yii2 Imperavi Redactor

Сообщение Goog1e » 2017.03.31, 16:30

Насчет вывода плагинов - такая вот штука,
Если на странице 2 редактора, и если во дном стоит плагин 'table' а в втором нет это, то не выводится плагин вообще.Приходится впихивать везде, чтоб показывало

antosh
Сообщения: 11
Зарегистрирован: 2017.04.26, 14:14
Откуда: Москва

Re: Yii2 Imperavi Redactor

Сообщение antosh » 2017.04.26, 17:44

Goog1e писал(а):
2017.03.31, 16:30
Насчет вывода плагинов - такая вот штука,
Если на странице 2 редактора, и если во дном стоит плагин 'table' а в втором нет это, то не выводится плагин вообще.Приходится впихивать везде, чтоб показывало
Причем, по аналогии с плагином Video (на таблицах не проверял), если на странице редактор используется N раз, то главное, чтобы плагин был прописан к использованию в следующих за необходимым редактором :shock: . В предыдущих необходимому можно не вписывать.
= Мои вопросы туповатые, но это мы не проходили, это нам не задавали) =

Ответить