Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Убрать код редакторов из состава модуля yupe #1632

Closed
DarkCs opened this issue Sep 12, 2014 · 21 comments
Closed

Comments

@DarkCs
Copy link
Collaborator

DarkCs commented Sep 12, 2014

Предлагаю удалить https://github.com/yupe/yupe/tree/0.8/protected/modules/yupe/widgets/editors и использовать версии из composer.

@yupe
Copy link
Owner

yupe commented Sep 12, 2014

Поддерживаю.

@chemezov
Copy link
Collaborator

Возможно могут возникнуть проблемы с настройкой редакторов. Плагины и настройки обычно лежат в папках с ними. Надо проверить для начала можно ли для каждого из редакторов переопределить путь к конфигу и путь к плагинам.

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 12, 2014

Вообще, сейчас на выбор доступно три редактора, но два из них (ckeditor и markitup) не могут загружать изображения и файлы через себя, а для imperavi redactor это достигнуто путем костылей https://github.com/yupe/yupe/blob/0.8/protected/modules/yupe/components/WebModule.php#L1031-L1045 . В итоге благодаря такой "свободе" выбора возможность настройки для интеграции с системой очень низкие.
Может стоит убрать остальные редакторы и сосредоточиться на полноценном внедрении redactor? Выбор изображений и файлов, загрузка и ресайз изображений, может быть еще что-то полезное.
В данный момент польза наличия ckeditor и markitup весьма сомнительна в силу того, что большинство, а то может и все их функции есть у redactor, для добавления нового редактора все равно придется добавлять свои данные в системные модули + опять же настройка их будет происходить непонятными способами. В итоге, если понадобится в своем модуле какой-то специфичный редактор, то проще его использовать по прямому назначению в нужном месте, а не тянуть через все модули.
Хотя и redactor тоже не фонтан, но вроде более адекватных альтернатив нет.

@yupe
Copy link
Owner

yupe commented Sep 12, 2014

Пожалуй, я соглашусь с @DarkCs Думаю, что стоит выпилить все редакторы кроме одного. @chemezov что думаешь ?

@mikspark
Copy link
Collaborator

👍 за выпил остальных и фокусе на redactor'e.

@chemezov
Copy link
Collaborator

@yupe был бы с радостью "за", если бы сам не использовал ckeditor :) Сейчас так, навскидку, сложно вспомнить его ключевые преимущества перед остальными. Вспоминается только возможность просмотреть загруженные файлы, более удобное создание таблиц (сейчас посмотрел как это в redactor - менеджерам будет сложно понять :) ). Но бывали ситуации, когда нужно было использовать именно его, взамен redactor'у, из-за каких-то фич. Даже бывали случаи, когда в одном модуле надо было использовать 1 редактор, в другом модуле - другой. Но это уже скорей костыли, чтобы не запариваться с подменой конфигов для каждого модуля был выбран такой путь.

Объективно:

  1. @DarkCs не совсем прав, для ckeditor есть ckfinder, который подключается в считанные минуты, ну и имеет функционал чуть пошире, чем в redactor'е.
  2. Судя по кол-ву скачиваний Юпи (недавно перевалило за 1К), очень много разработчиков начинают использовать Юпи, но не отмечаются ни здесь, ни в чате, и могут использовать другие редакторы, а мы сделаем не хорошо просто выпилив их.

Что делать?
Собственно не вижу проблему в поддержке других редакторов, кроме redactor, выпилить из yupe/widgets/editors не проблема, главное чтобы можно было переопределить конфиги и загрузку файлов, иначе эта затея чревата провалом, т.к. мы сами не сможем что-то поменять в них. Поддерживать их работоспособность тоже не вижу особой проблемы, я могу поддерживать ckeditor, кто-то markitup, кто им пользуется, главное где-то в чате написать что-то типа "поломал совместимость в редакторах, проверьте", и всё.

В качестве компромисса, если уж совсем-совсем не хочется их поддерживать, можно сделать инструкцию как подключить и использовать оные и выпилить :)

P.S. Вспомнил, что к ckeditor есть хороший репозиторий модулей, для redactor не нашёл такого. Для ckeditor можно без проблем подключить, например, Яндекс.Спеллер, для redactor'а такого не находил.

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 12, 2014

@chemezov, а кто спорил, что ckeditor не умеет вставлять файлики в принципе? проблема в том, что он не умеет этого делать в юпи.

@chemezov
Copy link
Collaborator

@DarkCs ну поэтому я и сделал акцент на том, что подключить ckfinder - задача пары минут :)

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 12, 2014

но ведь ckfinder платный

@chemezov
Copy link
Collaborator

есть бесплатная версия, там всего лишь надпись показывается. Кроме того, есть компании, покупающие OEM лицензии. Думаю есть такие, которые покупают его для каждого проекта. Это не важно, главное что есть функционал такой же и даже больше.

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 12, 2014

ну, я не то чтобы фанат лицензионных соглашений, если бы это было для личных целей, я бы наверно и пользовался демкой, но как-то делать нечто фундаментальное на триалке, по-моему не очень правильно.

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

@chemezov
Copy link
Collaborator

ну триал чаще всего подразумевает под собой ограниченный период, тут - другое дело.
"Что-то" уже в принципе придумано, editorOptions, если этого не хватает - можно расширить. Давайте говорить фактами.

  • "если бы это было для личных целей, я бы наверно и пользовался демкой" - Юпи может использоваться для личных целей, и используется. Лично я, для лично своего проекта как раз использовал ckeditor в связке с ckfinder, ради как раз вот этой фичи, с листингом загруженных файлов. Думаю я не один такой. Есть люди, которые используют ckeditor только из-за того что знают его вдоль и поперёк и в любой момент могут расширить его, потому как знают его API.
  • Для начала нужно исследовать все эти редакторы и выяснить, возможно ли перенести все конфиги и папки для загрузки в другие места. Если да - то проблемы не возникает. Если нет - можно уже думать дальше.
  • Сложность поддержки. Вообще изначальная идея - выпилить из репозитория и заменить версиями из composer. В чём проблема просто подменить пути? Зачем что-то выпиливать, если можно оставить? По сути сейчас вопрос только в том, чтобы подменить пути к редакторам и подмене путей конфигов, так?

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 13, 2014

  1. я не знаю, что на это ответить. По-моему, если продукт платный, то его нельзя тянуть в составе open source проекта с bsd лицензией. Почему бы не сделать выбор в пользу чего-то бесплатного? Тот же elFinder.
  2. О каких конфигах идет речь? Виджеты в yii настраиваются через передачу массива параметров. Если чего-то не предусмотрено настройками виджета, то его всегда можно подправить.
  3. По той же причине, по которой и yii не тянется со всем проектом, зачем в проекте тянуть код чужих библиотек? Для этого композер и придумали, а раз уж он используется, то почему бы и нет.

Может быть сделать примерно как сейчас, сделать некий класс-прослойку между модулем yupe и виджетами, сейчас в папке editor лежать сразу готовые виджеты, а будут классы, которые возвращают, грубо говоря, путь до настоящего класса виджета и массив его настроек.
Например,

// вот эти файлики лежать в папке editors и по их именам они привязываются к модулям

class RedactorWidget implements YupeEditorWidget
{
    public function getWidgetClass()
    {
        return 'vendor.yiiext.imperavi-redactor-widget.ImperaviRedactorWidget';
    }

    public function getWidgetOptions()
    {
        return array(
            'imageUpload'             => Yii::app()->createUrl('/image/imageBackend/AjaxImageUpload'),
            'fileUpload'              => Yii::app()->createUrl('/yupe/backend/AjaxFileUpload'),
            'imageGetJson'            => Yii::app()->createUrl('/image/imageBackend/AjaxImageChoose'),
            'fileUploadErrorCallback' => 'js:function (data) {
                $(\'#notifications\').notify({
                    message: {text: data.error},
                    type: \'danger\',
                    fadeOut: {delay: 5000}
                }).show();
                }'
        );
    }
}

// $this->module->getEditor() - возвращает экземпляр класса, реализующего YupeEditorWidget

$this->widget(
    $this->module->getEditor()->getWidgetClass(),
    [
        'model'     => $model,
        'attribute' => 'text',
        'options'   => $this->module->getEditor()->getWidgetOptions(),
    ]
);

Хотя в такой схеме тоже не все гладко, например, сама структура настроек у виджета может быть другой, как это можно предусмотреть?

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 13, 2014

Реализовал некую базовую логику, воплощающую идею выше, все изменения тут https://github.com/DarkCs/yupe/tree/redactor
Главные изменения:

  1. Редакторы удалены
  2. Доступные редакторы описываются в модуле yupe в конфиге https://github.com/DarkCs/yupe/blob/redactor/protected/modules/yupe/install/yupe.php#L51-L55 , таким образом можно задать какие-то дефолтные настройки, описать дополнительные редакторы в config/userspace/yupe.php
return array(
    'module'    => array(
        'visualEditors' => [
            'redactor2' => [
                'class' => 'yupe\widgets\editors\RedactorEditor2',
            ],
        ]
    )
);
  1. Класс-прослойка сам является виджетом, который внутри себя вызывает необходимый виджет. Виджет унаследован от CInputWidget с добавлением атрибута options.
  2. В WebModule добавлен метод, возвращающий класс виджета редактора https://github.com/DarkCs/yupe/blob/redactor/protected/modules/yupe/components/WebModule.php#L1124-L1138 , описанный в конфиге модуля yupe.

Думаю, что так же без особых проблем можно добавить другие редакторы. Идеи, замечания, предложения?
Как прикручивать разного рода файл менеджеры пока не ясно.

redactor: https://github.com/DarkCs/yupe/blob/redactor/protected/modules/yupe/widgets/editors/Redactor.php
ckeditor: https://github.com/DarkCs/yupe/blob/redactor/protected/modules/yupe/widgets/editors/CKEditor.php

В итоге виджет вызывается на странице таким образом:

        $this->widget(
            $this->module->getVisualEditor(),
            array(
                'model'     => $model,
                'attribute' => 'body',
            )
        ); ?>

@mikspark
Copy link
Collaborator

@DarkCs мы отказались от префиксов в пользу пространств имен, думаю можно назвать просто EditorWidgetInterface.

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 13, 2014

@mikspark я там все переосмыслил и удалил вообще этот интерфейс, комментарий обновил

@chemezov
Copy link
Collaborator

@DarkCs когда я говорил про кастомизацию, я имел ввиду, можно ли поменять расположение плагинов для этих редакторов. У ckeditor все плагины, допустим, лежат в папке с ним. Что делать если я хочу закинуть туда ещё какой-нибудь? Из-за того что композер, мы не можем лезть в папку со скриптами, значит нужно складывать плагины где-то отдельно, а к редактору подключать их через наш виджет.

@DarkCs
Copy link
Collaborator Author

DarkCs commented Sep 15, 2014

я не знаком с ckeditor, но думаю, что вовсе необязательно хранить плагины в строго определенной директории. Вот я наблюдаю в его опциях CKEDITOR.plugins.externals, получается, что нужно будет в файлике https://github.com/yupe/yupe/blob/0.8/protected/modules/yupe/widgets/editors/CKEditor.php или его производных указать в getoptions() необходимое расположение плагинов в требуемом ему формате.

@yupe
Copy link
Owner

yupe commented Sep 16, 2014

Я так понимаю, что тикет можно закрыть?

@DarkCs DarkCs closed this as completed Sep 16, 2014
@yupe
Copy link
Owner

yupe commented Sep 16, 2014

@DarkCs спсб!

@chemezov
Copy link
Collaborator

@DarkCs Да, а для redactor, насколько я помню, в любом случае при подключении плагина нужно передавать название файла, по идее можно и передавать полный путь. Тогда всё должно быть окей.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants