CKEditor "на максималках", расширение функционала визуального редактора

Всем привет! Решил установить пару плагинов в CKEditor, и меня понесло)
Собрал и перевёл на русский все рабочие плагины для этого компонента.
Обновил сам CKEditor до версии 4.25-LTS (Long Term Support)
Добавил функцию выбора ресурса для ссылок! Спасибо @Дима Касаткин и Степан Гончаров!
Теперь он воспринимает Excel таблицы, умеет генерировать QR коды изображением, создавать диаграммы, оформлять контент в Bootstrap «сетке», создавать Bootstrap вкладки, подсвечивать исходный код, считать кол-во слов и параграфов и многое другое…
Так же, теперь он выглядит как редактор MS Word!

UPD. Обновление самой библиотеки CKEditor + новый плагин autogrow.

UPD. 01.11.24 Новые плагины — вставка изображений со внешних источников и красивые уведомления: uploadfile, uploadwidget, notificationaggregator, filetools.



Вот полный список добавленных плагинов:
  • autogrow — автоматическая высота по контенту
  • autolink — автоматическая ссылка при вставке или написании URL
  • balloonpanel, balloontoolbar и floating-tools — параметры того или иного элемента и текста в виде подсказки (tooltip)
  • bootstrapTabs — вставка Bootstrap табов (вкладки)
  • btgrid — вставка Bootstrap сетки
  • chart — диаграммы в виде: гистограммы, линии, круга, круга с полями, пончика
  • codemirror — подсветка кода в источнике с горячими клавишами
  • codeTag — экранирование кода тегом code
  • html5audio — вставка аудиофайла
  • html5video — вставка видео HTML5
  • lineheight — изменение высоты строк
  • tableresize — изменение размера таблиц курсором
  • textindent — автоматические отступы в каждом абзаце
  • texttransform — изменение текста: маленькими, большими, с большой
  • wordcount — подсчёт парагрофов и слов
  • yaqr — генератор QR кодов с возможностью менять их размер, внутренний отступ, цвета через палитру
  • placeholder — вставляем в контент плейсхолдеры из TV полей и MIGX
  • textselection — сохраняет выделение текста при переключении из WYSIWYG в исходный код
Это список самых интересных функций, что я добавил. Есть некоторые плагины чисто технические, которые необходимы для работы других…

Итак! Давайте же сделаем такую «конфетку»!
  1. Скачиваем ckeditor_mod.zip
  2. Открываем /manager/assets/components/ckeditor/ и удаляем тут папку ckeditor
  3. Грузим на место удалённой папки ту, что в архиве
Если CKEDitor версии ниже 1.4.5
Создаём файл editorsearch.class.php по следующему пути:
core/model/modx/processors/resource

И вставляем код:
<?php
class editorSearchResGetListProcessor extends modObjectGetListProcessor
{
    public $objectType = 'modResource';
    public $classKey = 'modResource';
    public $defaultSortField = 'pagetitle';
    public $defaultSortDirection = 'ASC';
    //public $permission = 'list';


    /**
     * We do a special check of permissions
     * because our objects is not an instances of modAccessibleObject
     *
     * @return boolean|string
     */
    public function beforeQuery()
    {
        if (!$this->checkPermissions()) {
            return $this->modx->lexicon('access_denied');
        }

        return true;
    }


    /**
     * @param xPDOQuery $c
     *
     * @return xPDOQuery
     */
    public function prepareQueryBeforeCount(xPDOQuery $c)
    {
        $query = trim($this->getProperty('query'));
        if ($query) {
            $c->where([
                '`id`' => $query,
                'OR:`pagetitle`:LIKE' => "%{$query}%",
            ]);
        }
        if ($id = $this->getProperty('id')) {
            $c->where(['`id`' => $id, 'OR:`id`:>' => 0]);
            $c->sortby('FIELD(id, '.$id.')', DESC);
        }
        return $c;
    }
}

return 'editorSearchResGetListProcessor';

Всё, с файлами разобрались, теперь перейдём к сис. настройкам:
  1. ckeditor.extra_plugins — autogrow,codemirror,codeTag,autocomplete,ajax,textwatcher,xml,textmatch,balloontoolbar,notification,autolink,tableresize,youtube,html5video,balloonpanel,button,lineheight,btgrid,tabletools,html5audio,bootstrapTabs,chart,textindent,texttransform,floating-tools,yaqr,wordcount,placeholder,textselection,uploadfile,uploadwidget,notificationaggregator,filetools
  2. ckeditor.remove_plugins — forms,pagebreak,newpage,print,language,smiley,exportpdf,about
  3. ckeditor.skin — office2013
Чистим кэш — удалив всё в папке core/cache, через manager не помогает, и обновляем страницу с кэшем (Ctrl+F5).

И всё) Пользуемся! Если какие то «фичи» не нужны, просто уберите их название в ckeditor.extra_plugins.

Если нужен редактор не ломающий фронт, то уберите chart, btgrid и bootstrapTabs!

Поблагодарить автора, а также немного порадовать других активных участников сообщества можно,
отправив донат одним из следующих способов:
Спасибо за внимание!
Денис Усманов
22 апреля 2023, 06:42
modx.pro
8
2 863
+22

Комментарии: 36

Maxim
22 апреля 2023, 12:15
+1
Спасибо, потестируем.

В свою очередь, к ckeditor я использую плагины:
  • placeholder — через него удобно вставлять в контент плейсхолдеры из migx, например — ckeditor.com/cke4/addon/placeholder
  • textselection — сохраняет выделение текста при переключении из WYSIWYG в исходный код — ckeditor.com/cke4/addon/textselection
    Денис Усманов
    22 апреля 2023, 12:17
    +1
    Видел их, но не понял зачем они) добавлю пожалуй в сборку ?
    Александр Мельник
    22 апреля 2023, 14:28
    0
    А у меня вопрос лишь частично по теме, но раз уж вы разбирались с этим редактором.
    Я вот не пойму, насколько я вижу на офф сайтах, что редактор ckeditor, что tinymce являются платными продуктами.
    Бесплатное пользование либо ограничено по времени либо по функционалу.
    Я точно помню год назад пытался в одном проекте использовать какой-то из этих двух редакторов и без оплаты он выводил уведомление прямо под самим редактором, что мол демо версия, оплатите. Тоесть ты вообще не можешь им пользоваться, пока не завел аккаунт на их сайте, но и после этого должен еще и оплатить.
    Как тогда получается, что устанавливая компонент с редактором из магазина, мы получаем работоспособный редактор? Там используются взломанные версии? Или кто то за нас всех уже заплатил?
    Или же я ошибаюсь и эти два редактора можно использовать официально бесплатно?
      Денис Усманов
      22 апреля 2023, 14:42
      0
      Интересный вопрос) Чуть позже дам более точный ответ, а пока предположу, что лицензия открытая, но есть платные плагины…
      Что подразумевает, что создатели для большей популярности сделали редактор бесплатным, но что бы всё таки хоть как то заработать, продают «премиальные» функции…
        Александр Мельник
        22 апреля 2023, 14:55
        0
        Скорее всего вы правы, однако мой опыт использования этих редакторов в своих проктах, когда мне нужно создать свою админку, говорит о том, что как минимум нужно регистрироваться на сайте редактора, получать токен, который использовать для подключения скриптов и даже после этого (вот непомню кто конкретно — ckeditor или tinymce) выводит уведомление — мол у вас бесплатная версия, оплатите.
        Может я что-то не понимаю, не правильно пользуюсь этими редакторами — не знаю.
        Но помню что в итоге пришлось в одном случае написать свой простенький редактор, в другом найти реально открытый и бесплатный quilljs.com/
        Дима Касаткин
        23 апреля 2023, 00:48
        +2
        Насчет лицензии TinyMCE ничего не могу сказать (имхо он намного хуже, не красивый и не удобный), а вот CKEditor есть OpenSource-версия и она под GPL:
        ckeditor.com/wysiwyg-editor-open-source/
        ckeditor.com/legal/ckeditor-oss-license/

        В пакете интеграции для MODX используется 4 версия. Существует ещё 5, но это не старая и новая, а они разные:
        А если нужны которые свеже-поддерживаемые то:
        • ckeditor4 (https://github.com/ckeditor/ckeditor4) — классический с iframe (пользуюсь 10+ лет, сейчас не стал хуже
        и постоянно официально обновляется)
        • ckeditor5 (https://github.com/ckeditor/ckeditor5) — новомодный с инлайн HTML5-разметкой без фреймов. Он не так хорошо подходит для интеграции в админку из-за отсутствия изоляции CSS и JS, которую даёт iframe, поэтому 4 версию планирую в пакете так и оставлять

        P.S. А удивляться, что популярный OpenSource — продукт на оф. сайте пытаются продать в какой-то премиум упаковке не стоит, им же надо что-то кушать! Короче, этот редактор легально можно использовать бесплатно!
        deleted
        22 апреля 2023, 16:18
        +1
        А есть вставка ссылки по id ресурса? Если б не это, перешёл бы, наверное.
        Есть ли возможность создавать спойлеры?
          Денис Усманов
          22 апреля 2023, 16:29
          +1
          Вставка по id в разработке, а спойлер тоже будет добавлен ?
          Некоторые плагины требуют интеграции стилей на фронт, это всё будет в обновлениях компонента ?
            Денис Усманов
            22 апреля 2023, 23:59
            0
            Дополню по вопросу вставки ссылок из ресурсов… в последнем обновлении 1.4.5 Дима добавил эту функцию.
              Дима Касаткин
              23 апреля 2023, 00:31
              +5
              Привет! Так вышло, что я в прошлом году решил подхватить флаг и начать обновлять любимый редактор!

              Плагин спойлера есть, мы даже использовали его на каком-то из клиентских сайтов, но он требует подключения css/js отдельных на фронтенд, это не очень MODX-way поэтому пока его нет в общем компоненте, но мы с @Денис Усманов надеюсь решим эту задачу как-то системно в будущем!

              А вот вставка ссылок по id ресурса — всегда можно было вставить через [[~id]] modx-тег, но не удобно, и пару недель назад наконец дошли руки, и нашлись помощники (@Stepan — спасибо!) и реализовали более крутой функционал уже с поиском ресурса по id или названию. Компонент находился в бета-версии, но раз тут пошла такая движуха, то сегодня я оформил новый релиз!

              Итак, встречайте 1.4.5-pl:
              • На гитхабе: github.com/dimasites/modx-ckeditor/releases/tag/1.4.5-pl ← скриншоты нового функционала здесь
              • На МодСторе: modstore.pro/packages/content/ckeditor
              • В офф. репозитории: modx.com/extras/package/ckeditor

              Вообще это уже 4й релиз за последние 3 месяца, даже какая-то регулярность начинает прослеживаться. В планах сделать максимально дружелюбный, красивый и безглючный редактор с возможностью также из коробки выбрать полный или минимальный функционал. Потому что я на своих проектах контент-менеджерам только минимальное оформление даю делать, такой как Денис описал в статье Word-подобны комбайн это круто, но мне кажется опасным столько кнопок разрешать нажимать.

              В общем считаю, что редактор должен быть таким:


              Но по итогу в пакет хочется оформить так чтобы при установке это выбиралось (ну и кастомизацию через сис. настройки никто не отменял)
                deleted
                23 апреля 2023, 13:37
                0
                > Плагин спойлера есть, мы даже использовали его на каком-то из клиентских сайтов, но он требует подключения css/js отдельных на фронтенд, это не очень MODX-way

                Есть же нативный . Подключение css/js по-моему такое себе, за редкими исключениями типа минишопа.
              Артур Шевченко
              22 апреля 2023, 23:07
              +1
              Плюсик за старания поставил, но сам подобным не пользуюсь, так как это либо занимает много времени при настройке, чтобы контент-менеджер не страдал, либо контент-менеджер будет страдать и с большой долей вероятности сломает вёрстку. Да и сама вёрстка зачастую не рассчитана на работу с визуальными редакторами, так как стили пишут кто во что горазд.
                Денис Усманов
                22 апреля 2023, 23:47
                0
                Спасибо Артур) Мы тут сегодня с Димой скооперировались, будем допиливать компонент вместе. А это значит, что будем следить, что бы редактор не косил фронт и плагины будем добавлять аккуратно.
                  deleted
                  23 апреля 2023, 13:44
                  0
                  WYSIWYG редакторы зло, по крайней мере многофункциональные. но менеджеры просят. Сделают «вёрстку» таблицей, а потом удивляются, что на телефонах всё поехало) Или текст по ширине страницы выровняют, а потом пробелы огромные, особенно на узких экранах. Но на это похоже никто внимания не обращает)

                  У тебя же тоже наверняка WYSIWYG просят, чтоб «как в ворде», как выкручиваешься?
                    Артур Шевченко
                    23 апреля 2023, 14:56
                    0
                    Если просят, объясняю почему это плохо, если настаивают — ставлю стандартный TinyMCE и пусть делают что хотят. В конец концов, кто платит, то заказывает музыку. Но в последнее время я использую конфигуратор страниц и необходимости в визуальных редакторах просто нет.
                      deleted
                      23 апреля 2023, 22:55
                      0
                      > Но в последнее время я использую конфигуратор страниц и необходимости в визуальных редакторах просто нет.

                      Я это представляю так. Нужно параграф добавить, добавляешь отдельную строку в migx. И так для каждого параграфа, заголовка. Неудобно же, как по мне. А ссылку как вставить, выделить слово жирным? Или не так работает?
                        Артур Шевченко
                        23 апреля 2023, 23:38
                        0
                        Может немного неудобно, но зато надёжно: контентщик ничего не знает про классы, а оперирует строго определенными блоками, которые были подготовлены при вёрстке и стили, которых не надо подключать как-то отдельно. Ну и вообще, это актуально для статей ных сайтов, я в основном делаю магазины.
                          deleted
                          24 апреля 2023, 06:13
                          0
                          По-моему самая удобная штука для такого — дефолтный gutenberg на wp. Но на паре сайтов, что доводилось править, его выпиливали и ставили tinymce
                  Sergey (Sentinel)
                  23 апреля 2023, 12:38
                  0
                  У меня не работает. Ошибки в консоле
                  Uncaught Error: [CKEDITOR.resourceManager.load] Resource name "ajax" was not found at "http://site.com/manager/assets/components/ckeditor/ckeditor/plugins/ajax/plugin.js?t=1.4.5-pl".
                  наверное что-то с путями

                  UPD сорри, разобрался
                    Денис Усманов
                    23 апреля 2023, 12:41
                    +1
                    Не, с путями всё ок, обнови страницу с кэшем (Ctrl+F5).
                    deleted
                    24 апреля 2023, 06:20
                    0
                    Может немножко не в тему вопрос. Делал конструктор страниц на migx. При выборе типа блока подгружается отдельная конфигурация. И всё бы хорошо, но если в конфигурациях есть tinymce, то ресурс не сохраняется. Заменил на ckeditor — то же самое. Полагаю проблема в том, что при смене конфигурации надо «уничтожать» редактор и инициализировать заново. Кто-нибудь знает, как это можно сделать?

                    Сделано примерно вот так modx.pro/howto/16558
                      Димыч
                      25 апреля 2023, 19:30
                      0
                      Респект, что подняли такую важную тему.

                      Пользовался расширениями Content Editor Tools Дениса Дыранова, там еще тема была и много еще чего интересного. Например, фиксировать панель редактора к шапке. Правда, в последних версиях Modx приложение поломалось.
                        Валерий
                        19 ноября 2023, 12:32
                        0
                        Добрый день! Спасибо за сборку, некоторым клиентам помогает. Но столкнулся с проблемой вставки Iframe с Youtube. При первом сохранении все хорошо, но после переключения в визуальный режим редактора к iframe добавляется sandbox="" и видео с фронта пропадает. Причем иногда просто черный экран, а иногда говорит про JS, который надо включить )).
                        Я так понял, это встроенная функция редактора, и вроде как должна помочь запись в файле конфигурации
                        config.iframe_attributes = {
                            sandbox: 'allow-scripts allow-same-origin',
                            allow: 'autoplay'
                        }
                        Вот только у меня не помогает. Может файл конфигурации где-то в другом месте находится? Я правил вот тут: manager/assets/components/ckeditor/ckeditor

                        Кто как решал эту проблему?
                          Валерий
                          23 ноября 2023, 11:57
                          0
                          Никто не сталкивался с такой проблемой?
                          myData
                          14 февраля 2024, 23:24
                          0
                          Спасибо все встало без проблем. Крутая подборка.
                          Но есть одни вопрос как поставить плагин
                          Code Snippet
                          уже все перерыл не появляется иконка.

                          Спасибо
                            Денис Усманов
                            15 февраля 2024, 13:15
                            0
                            В сис. настройках в ckeditor.extra_plugins дописывал codesnippet?
                              myData
                              15 февраля 2024, 13:49
                              0
                              Да, но после этого редактор не запускается вообще

                              Uncaught TypeError: CKEDITOR.tools.object.keys is not a function
                                  at Object.setHighlighter (plugin.js?t=1.4.5-pl:51:28)
                                  at Object.afterInit (plugin.js?t=1.4.5-pl:134:10)
                                  at Object.<anonymous> (ckeditor.js?v=1.4.5-pl:4830:45)
                                  at e (ckeditor.js?v=1.4.5-pl:4488:48)
                                  at Array.y (ckeditor.js?v=1.4.5-pl:4493:105)
                                  at x (ckeditor.js?v=1.4.5-pl:4498:64)
                                  at ckeditor.js?v=1.4.5-pl:4511:41
                                myData
                                15 февраля 2024, 14:26
                                0
                                Денис, спасибо видимо проблема в браузере хром. в яндексе появилось.

                                Можно еще вопрос, как отключить автоматическое форматирования исходного кода.

                                Например вставляю в исходный код
                                <div class="alert alert-primary" role="alert">
                                  A simple primary alert—check it out!
                                </div>
                                Выхожу, захожу обратно в исходный и получается
                                <p>A simple primary alert—check it out!</p>
                                Пробовал в конфиг прописать
                                config.allowedContent= 'true';
                                config.allowedContent = true;
                                config.extraAllowedContent= 'true';
                                Не помогает
                                  Денис Усманов
                                  15 февраля 2024, 15:49
                                  0
                                  Часто задаваемый вопрос, и судя по всему решение «лежит» в файлах компонента, в сис. настройках ничего связанного с этим нет… Если найду решение, напишу сюда обязательно.
                                    myData
                                    15 февраля 2024, 15:54
                                    0
                                    Спасибо, будем ждать
                            Станислав
                            24 сентября 2024, 12:23
                            0
                            Добавлю сюда из ветки отсюда modx.pro/help/22916, так как часто сюда заглядываю
                            Чтобы по умолчанию открывался исходный код (а то у меня часто ломались некоторые страницы), нужно
                            в секции
                            CKEDITOR.editorConfig = function (config) {
                            добавить строчку
                            config.startupMode = 'source';
                            в файле config.js
                              Ник
                              30 сентября 2024, 01:48
                              0
                              Подскажите, а как добавить кнопки выравнивания текста?
                                Станислав
                                24 октября 2024, 15:53
                                0
                                Добрый день. Тоже столкнулся с этой проблемой и решил ее так. С сайта ckeditor, в разделе плагины (addon) скачал плагин «justify»: ckeditor.com/cke4/addon/justify. Далее распаковал и и скопировал в /manager/assets/components/ckeditor/ckeditor/plugins (чтобы получилась там папка justify). Далее: Системные настройки, раздел ckeditor.extra_plugins, надо добавить justify. И все появится.
                                  Ник
                                  12 ноября 2024, 18:44
                                  0
                                  Благодарю!
                                Сергей
                                27 октября 2024, 01:47
                                0
                                Не работает кнопка «Вставить/редактировать ссылку»
                                  Сергей
                                  27 октября 2024, 02:05
                                  0
                                  ckeditor.js?v=1.4.6-pl:10528 Uncaught TypeError: Cannot read properties of undefined (reading 'build')
                                      at Object.build (ckeditor.js?v=1.4.6-pl:10528:76)
                                      at Object.build (ckeditor.js?v=1.4.6-pl:10528:76)
                                      at CKEDITOR.dialog.addPage (ckeditor.js?v=1.4.6-pl:10080:160)
                                      at new CKEDITOR.dialog (ckeditor.js?v=1.4.6-pl:9929:81)
                                      at a.openDialog (ckeditor.js?v=1.4.6-pl:10616:122)
                                      at a.<anonymous> (ckeditor.js?v=1.4.6-pl:10620:30)
                                      at e (ckeditor.js?v=1.4.6-pl:4488:33)
                                      at Array.y (ckeditor.js?v=1.4.6-pl:4493:105)
                                      at x (ckeditor.js?v=1.4.6-pl:4498:64)
                                      at ckeditor.js?v=1.4.6-pl:4511:41
                                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                  36