Editor Pro¶
Важно
Продукты Premium требуют бесплатного плагина License Manager. Установите его и добавьте лицензию продукта перед установкой этого продукта.
Установка¶
Сначала убедитесь, что у вас установлена последняя версия Grav 1.7 (-f принудительно обновляет индекс GPM).
Для полной функциональности Editor Pro требуется Grav 1.7.0 или более поздняя версия.
Через GPM (рекомендуется)¶
Через плагин Admin¶
- Перейдите в раздел Плагины на боковой панели админки
- Нажмите кнопку Добавить (значок плюса)
- Найдите «Editor Pro»
- Нажмите Установить
- Нажмите Включить, чтобы активировать
Установка вручную¶
- Скачайте плагин из своей учётной записи Grav Premium
- Распакуйте zip-архив в
/user/plugins/ - Переименуйте папку в
editor-pro - Очистите кэш:
bin/grav cache
Конфигурация¶
Перед настройкой плагина скопируйте user/plugins/editor-pro/editor-pro.yaml в user/config/plugins/editor-pro.yaml и редактируйте только эту копию.
Ниже приведена конфигурация по умолчанию и описание доступных параметров:
enabled: true
default_for_all: false
toolbar: 'undo,redo,|,removeformat,|,heading,bold,italic,underline,strikethrough,|,link,image,|,blockquote,bulletList,orderedList,|,codeBlock,table,|,htmlBlock,shortcodeBlock'
extra_typography:
enabled: true
custom: []
Параметры конфигурации¶
enabled— включить или отключить плагин глобальноdefault_for_all— назначить Editor Pro редактором по умолчанию для всех пользователейtoolbar— настроить, какие инструменты отображаются на панели инструментовextra_typography.enabled— включить автоматические типографские преобразованияextra_typography.custom— задать пользовательские замены текста
Настройка редактора по умолчанию¶
Editor Pro можно настроить как редактор по умолчанию на нескольких уровнях:
Глобальное значение по умолчанию (все пользователи)¶

Включите параметр «Default for All Users» в конфигурации плагина, чтобы Editor Pro стал редактором по умолчанию для всех.
Выбор отдельным пользователем¶

Пользователи могут выбрать предпочитаемый редактор в настройках профиля:
- Нажмите на свой аватар в админке
- Выберите «Preferences»
- Выберите «Editor Pro» в выпадающем списке «Редактор»
- Сохраните настройки
Настройка для отдельной схемы¶
Укажите Editor Pro для конкретных типов страниц в схемах:
Сочетания клавиш¶
Сочетания клавиш для разных платформ¶
| Действие | Windows/Linux | Mac |
|---|---|---|
| Сохранить | Ctrl + S |
⌘ + S |
| Копировать | Ctrl + C |
⌘ + C |
| Вставить | Ctrl + V |
⌘ + V |
| Вырезать | Ctrl + X |
⌘ + X |
| Отменить | Ctrl + Z |
⌘ + Z |
| Повторить | Ctrl + Y |
⌘ + Y |
Ctrl + Shift + Z |
⌘ + Shift + Z |
|
| Полужирный | Ctrl + B |
⌘ + B |
| Курсив | Ctrl + I |
⌘ + I |
| Подчёркивание | Ctrl + U |
⌘ + U |
| Зачёркивание | Ctrl + Shift + X |
⌘ + Shift + X |
| Ссылка | Ctrl + K |
⌘ + K |
Сочетания клавиш для заголовков¶
| Действие | Windows/Linux | Mac |
|---|---|---|
| Заголовок 1 | Ctrl + Alt + 1 |
⌘ + Option + 1 |
| Заголовок 2 | Ctrl + Alt + 2 |
⌘ + Option + 2 |
| Заголовок 3 | Ctrl + Alt + 3 |
⌘ + Option + 3 |
| Заголовок 4 | Ctrl + Alt + 4 |
⌘ + Option + 4 |
| Заголовок 5 | Ctrl + Alt + 5 |
⌘ + Option + 5 |
| Заголовок 6 | Ctrl + Alt + 6 |
⌘ + Option + 6 |
Сочетания клавиш для списков и блоков¶
| Действие | Windows/Linux | Mac |
|---|---|---|
| Маркированный список | Ctrl + Shift + 8 |
⌘ + Shift + 8 |
| Нумерованный список | Ctrl + Shift + 7 |
⌘ + Shift + 7 |
| Цитата | Ctrl + Shift + B |
⌘ + Shift + B |
| Блок кода | Ctrl + Alt + C |
⌘ + Option + C |
| Вставка шорткода | Ctrl + Shift + S |
⌘ + Shift + S |
Сочетания клавиш навигации¶
| Действие | Клавиатура |
|---|---|
| Переход к следующему блоку | Tab (когда применимо) |
| Переход к предыдущему блоку | Shift + Tab |
| Выход из блока (в абзац) | Enter (дважды) |
| Навигация между блоками | ↑ / → / ↓ / ← |
| Выделить всё | Ctrl/⌘ + A |
| Поиск | Ctrl/⌘ + F |
Навигация по таблице¶
| Действие | Клавиатура |
|---|---|
| Следующая ячейка | Tab |
| Предыдущая ячейка | Shift + Tab |
| Новая строка (в последней ячейке) | Tab |
| Навигация по ячейкам | ↑ / → / ↓ / ← |
| Выход из таблицы | Ctrl/⌘ + Enter |
Настройка панели инструментов¶

Панель инструментов можно настроить так, чтобы на ней отображались только нужные инструменты. Доступные элементы панели инструментов:
Форматирование текста¶
bold— полужирный текстitalic— курсивunderline— подчёркнутый текстstrikethrough— зачёркнутый текстcode— встроенный кодsubscript— текст нижним индексомsuperscript— текст верхним индексомremoveformat— очистка форматирования
Структура¶
heading— выпадающий список заголовков (H1–H6)paragraph— формат абзацаblockquote— цитатаhorizontalRule— горизонтальная линия
Списки¶
bulletList— маркированный списокorderedList— нумерованный список
Контент¶
link— вставка и изменение ссылкиimage— вставка изображенияtable— вставка таблицыcodeBlock— блок кода с подсветкой синтаксиса
Специальные блоки¶
htmlBlock— сохранение блока HTMLshortcodeBlock— вставка шорткодаtwigBlock— сохранение шаблона TwiggithubAlert— оповещения в стиле GitHub
История¶
undo— отменить последнее действиеredo— повторить последнее действие
Разделители¶
|— визуальный разделитель на панели инструментов
Пример конфигурации панели инструментов:
Типы контента¶
Расширенное форматирование текста¶
Editor Pro поддерживает всестороннее форматирование текста:
- Полужирный — сильное выделение (
**text**или__text__) - Курсив — выделение (
*text*или_text_) - Подчёркивание — подчёркнутый текст (
<u>text</u>) - Зачёркивание — зачёркнутый текст (
~~text~~) - Нижний индекс — текст нижним индексом (
<sub>text</sub>) - Верхний индекс — текст верхним индексом (
<sup>text</sup>) - Код — встроенный код (
`code`)
Заголовки¶
Поддерживаются шесть уровней заголовков (H1–H6). Используйте выпадающий список на панели инструментов или сочетания клавиш:
Списки¶
Маркированные списки¶
Нумерованные списки¶
Ссылки¶
Ссылки поддерживают заголовки и могут быть внутренними или внешними:
[Link text](https://example.com "Optional title")
[Internal link](/path/to/page)
[Reference link][ref]
[ref]: https://example.com "Reference title"
Изображения¶
Изображения поддерживают alt-текст и заголовки:
Перетаскивайте изображения прямо в редактор для автоматической загрузки и вставки.
Таблицы¶
Полноценная поддержка таблиц с визуальным редактированием:
| Header 1 | Header 2 | Header 3 |
|----------|----------|----------|
| Cell 1 | Cell 2 | Cell 3 |
| Cell 4 | Cell 5 | Cell 6 |
Фичи работы с таблицами: * Добавление и удаление строк и столбцов * Объединение и разделение ячеек * Назначение строк и столбцов заголовками * Изменение ширины столбцов перетаскиванием * Навигация с помощью Tab/Shift+Tab
Блоки кода¶
Блоки кода с подсветкой синтаксиса и выбором языка:
Поддерживаемые языки включают: * JavaScript/TypeScript * PHP * Python * HTML/CSS * Markdown * YAML/JSON * И многие другие…
Цитаты¶
Вложенные цитаты с корректным форматированием:
Оповещения GitHub¶
Встроенная поддержка блоков оповещений в стиле GitHub:
> [!NOTE]
> Useful information that users should know.
> [!TIP]
> Helpful advice for doing things better.
> [!IMPORTANT]
> Key information users need to know.
> [!WARNING]
> Urgent info that needs immediate attention.
> [!CAUTION]
> Advises about risks or negative outcomes.
Визуальные блоки¶
Editor Pro сохраняет специальный контент в виде визуальных блоков, чтобы предотвратить его повреждение:
Блоки необработанного кода (тёмно-серые)¶

Необработанный код — это контент HTML или Twig; он сохраняется в виде синих блоков:
- Предотвращает случайное изменение
- Сохраняет исходное форматирование
- Редактирование на месте с подсветкой синтаксиса
- Поддерживает любой допустимый HTML или Twig, начинающийся с новой строки
Пример:
Пример:
<div class="custom-widget">
<h3>Custom HTML</h3>
<p>This HTML is preserved exactly as written.</p>
</div>
Блоки шорткодов (зелёные)¶

Шорткоды отображаются в виде зелёных блоков с визуальными индикаторами:
- Показывает имя шорткода и параметры
- Нажмите, чтобы изменить через модальное окно
- Поддерживает вложенные шорткоды
- Предпросмотр в реальном времени, когда доступен
Пример:
Типографские преобразования¶

Editor Pro может автоматически преобразовывать текстовые шаблоны по мере ввода.
Встроенные преобразования¶
Типографика¶
--→ — (длинное тире)...→ … (многоточие)(c)→ © (знак копирайта)(r)→ ® (зарегистрированный знак)(tm)→ ™ (торговая марка)
Кавычки¶
"text"→ "text" (умные кавычки)'text'→ 'text' (умные одинарные кавычки)
Стрелки¶
->→ →<-→ ←<->→ ↔=>→ ⇒
Дроби¶
1/2→ ½1/3→ ⅓1/4→ ¼3/4→ ¾
Математические символы¶
+-→ ±!=→ ≠<=→ ≤>=→ ≥
Пользовательские преобразования¶
Добавьте собственные преобразования в конфигурации:
Преобразования для отдельных языков¶
Настройте преобразования для каждого языка:
Интеграция шорткодов¶
При использовании с плагином shortcode-core Editor Pro предоставляет расширенную поддержку шорткодов.
Модальное окно шорткодов¶

Нажмите Ctrl/⌘ + Shift + S, чтобы открыть модальное окно шорткодов:
- Поиск шорткодов по имени или описанию
- Настройка параметров через поля формы
- Предпросмотр результата (если предпросмотр доступен)
- Вставка шорткода в ваш контент
Поддерживаемые типы полей¶
- Текст — однострочное поле ввода
- Многострочный текст — многострочное поле ввода
- Выбор — выбор из выпадающего списка
- Флажок — логический переключатель
- Число — числовой ввод
- Цвет — выбор цвета
- Дата — выбор даты
- Файл — выбор файла или медиафайла
- Страница — выбор страницы
Вложенные шорткоды¶
Сложные шорткоды с иерархией «родитель — потомок»:
[tabs]
[tab title="First"]
First tab content
[/tab]
[tab title="Second"]
Second tab content
[/tab]
[/tabs]
Предпросмотр в реальном времени¶
Если включено, шорткоды отображают предпросмотр в реальном времени в редакторе:
Расширение Editor Pro¶
Интеграция плагинов¶
Зарегистрируйте свой плагин в Editor Pro:
<?php
namespace Grav\Plugin;
use Grav\Common\Plugin;
class YourPlugin extends Plugin
{
public static function getSubscribedEvents()
{
return [
'registerEditorProPlugin' => ['registerEditorProPlugin', 0]
];
}
public function registerEditorProPlugin($event)
{
$plugins = $event['plugins'];
// Добавить CSS
$plugins['css'][] = 'plugin://your-plugin/assets/editor-pro.css';
// Добавить JavaScript
$plugins['js'][] = 'plugin://your-plugin/assets/editor-pro.js';
$event['plugins'] = $plugins;
return $event;
}
}
JavaScript API¶
Обращайтесь к API Editor Pro в своём JavaScript:
window.EditorPro.registerPlugin({
name: 'your-plugin',
init(editorPro) {
const { editor, toolbar, schema } = editorPro;
// Добавить пользовательскую кнопку
toolbar.addButton({
name: 'customButton',
icon: '🎨',
title: 'Custom Action',
action: () => {
// Ваше пользовательское действие
editor.chain()
.focus()
.insertContent('Custom content')
.run();
}
});
// Слушать события редактора
editor.on('update', ({ editor }) => {
console.log('Content updated');
});
// Доступ к состоянию редактора
editor.on('selectionUpdate', ({ editor }) => {
const { from, to } = editor.state.selection;
console.log(`Selection: ${from} to ${to}`);
});
}
});
Пользовательские узлы¶
Создавайте пользовательские узлы TipTap:
import { Node } from '@tiptap/core';
export const CustomWidget = Node.create({
name: 'customWidget',
group: 'block',
content: 'inline*',
addAttributes() {
return {
type: {
default: 'default',
},
};
},
parseHTML() {
return [
{
tag: 'div[data-widget]',
},
];
},
renderHTML({ HTMLAttributes }) {
return ['div', { 'data-widget': '', ...HTMLAttributes }, 0];
},
addCommands() {
return {
setWidget: (attributes) => ({ commands }) => {
return commands.setNode(this.name, attributes);
},
};
},
});
Пользовательские марки¶
Создавайте пользовательские текстовые марки:
import { Mark } from '@tiptap/core';
export const Highlight = Mark.create({
name: 'highlight',
addAttributes() {
return {
color: {
default: 'yellow',
},
};
},
parseHTML() {
return [
{
tag: 'mark',
},
];
},
renderHTML({ HTMLAttributes }) {
return ['mark', HTMLAttributes, 0];
},
addCommands() {
return {
toggleHighlight: (attributes) => ({ commands }) => {
return commands.toggleMark(this.name, attributes);
},
};
},
});
Расширенная конфигурация¶
Конфигурация для отдельной страницы¶
Управляйте поведением Editor Pro для каждой страницы:
---
title: My Page
editor_pro:
enabled: true
toolbar: 'bold,italic,link'
preserve_html: false
preserve_twig: true
typography:
enabled: false
---
Параметры поля схемы¶
Расширенная конфигурация поля в схемах:
form:
fields:
content:
type: editor-pro
label: Content
toolbar: 'heading,bold,italic,link,image'
height: 500
autofocus: true
placeholder: 'Start writing...'
typography:
enabled: true
arrows: true
quotes: true
preserve:
html: true
shortcodes: true
twig: false
Правила сохранения контента¶
Настройте, какие типы контента сохранять:
plugins:
editor-pro:
preserve:
html:
enabled: true
tags: ['script', 'style', 'iframe']
shortcodes:
enabled: true
list: ['notice', 'columns', 'tabs']
twig:
enabled: true
patterns: ['{{', '{%', '{#']
Оптимизация производительности¶
Большие документы¶
Для документов объёмом более 50 000 слов:
Управление памятью¶
Оптимизируйте использование памяти:
plugins:
editor-pro:
performance:
clear_history_on_save: true
compress_history: true
max_document_size: 5000000 # 5MB
Решение проблем¶
Редактор не появляется¶
-
Проверьте, что плагин включён
-
Очистите кэш
-
Проверьте настройку пользователя
- Проверьте выбор редактора в профиле пользователя
-
Убедитесь, что выбран «Editor Pro»
-
Проверьте консоль браузера
- Откройте инструменты разработчика (F12)
- Найдите ошибки JavaScript
- Сообщите об обнаруженных ошибках
Контент не сохраняется¶
-
Проверьте права доступа
-
Проверьте обработку формы
- Проверьте наличие ошибок валидации формы
-
Убедитесь, что обязательные поля заполнены
-
Протестируйте с простым контентом
- Попробуйте сохранить только простой текст
- Постепенно добавляйте сложный контент
Шорткоды не работают¶
-
Проверьте, что shortcode-core установлен
-
Проверьте регистрацию шорткодов
- Убедитесь, что шорткоды зарегистрированы правильно
-
Проверьте, что слушатели событий настроены
-
Включите режим отладки
Проблемы с производительностью¶
- Проверьте размер документа
- Большим документам могут потребоваться настройки оптимизации
-
Подумайте о разделении очень длинного контента
-
Отключите предпросмотр в реальном времени
-
Сократите число элементов панели инструментов
- Включайте только необходимые инструменты
- Сведите к минимуму пользовательские расширения
Совместимость с браузерами¶
- Проверьте версию браузера
- Убедитесь, что браузер соответствует минимальным требованиям
-
При необходимости обновите до последней версии
-
Отключите расширения браузера
- Блокировщики рекламы могут мешать
-
Попробуйте режим инкогнито или приватный режим
-
Проверьте в другом браузере
- Попробуйте Chrome, если используете Firefox
- Убедитесь, что проблема связана с конкретным браузером
Руководство по миграции¶
С NextGen Editor¶
-
Установите Editor Pro
-
Обновите настройки пользователей
- Измените выбор редактора на «Editor Pro»
-
Миграция контента не требуется
-
Обновите пользовательские интеграции
- Измените имена событий с
registerNextGenEditorPluginнаregisterEditorProPlugin -
Обновите вызовы JavaScript API
-
Тщательно протестируйте
- Проверьте все типы страниц
- Убедитесь в работоспособности шорткодов
- Проверьте пользовательские расширения
С редактора Markdown¶
- Контент полностью совместим
- Преобразование не требуется
-
Структура Markdown сохраняется
-
Включайте постепенно
- Начните с отдельных типов страниц
-
Постепенно внедряйте у пользователей
-
Обучите пользователей
- Предоставьте справочник по сочетаниям клавиш
- Объясните концепцию визуальных блоков
Справочник API¶
События PHP¶
registerEditorProPlugin¶
Регистрация ресурсов и конфигурации:
public function registerEditorProPlugin($event)
{
$plugins = $event['plugins'];
$config = $event['config'];
// Добавить ресурсы
$plugins['js'][] = 'plugin://your-plugin/editor.js';
$plugins['css'][] = 'plugin://your-plugin/editor.css';
// Добавить конфигурацию
$config['custom_setting'] = true;
$event['plugins'] = $plugins;
$event['config'] = $config;
return $event;
}
onEditorProSave¶
Обработка контента перед сохранением:
public function onEditorProSave($event)
{
$content = $event['content'];
$page = $event['page'];
// Обработать контент
$content = $this->processContent($content);
$event['content'] = $content;
return $event;
}
JavaScript API¶
Экземпляр редактора¶
Доступ к редактору TipTap:
const editor = window.EditorPro.getEditor(fieldId);
// Получить/установить контент
editor.getHTML();
editor.getJSON();
editor.getText();
editor.setContent(content);
// Команды
editor.chain().focus().bold().run();
editor.chain().focus().insertContent('text').run();
// Состояние
editor.isActive('bold');
editor.can().bold();
API панели инструментов¶
Управление элементами панели инструментов:
const toolbar = window.EditorPro.getToolbar(fieldId);
// Добавить кнопку
toolbar.addButton({
name: 'custom',
icon: '🎨',
title: 'Custom',
action: callback
});
// Удалить кнопку
toolbar.removeButton('custom');
// Обновить кнопку
toolbar.updateButton('custom', {
disabled: true
});
API схемы¶
Доступ к схеме документа и её изменение:
const schema = window.EditorPro.getSchema(fieldId);
// Зарегистрировать узел
schema.registerNode('customNode', nodeSpec);
// Зарегистрировать марку
schema.registerMark('customMark', markSpec);
// Получить узел/марку
schema.getNode('paragraph');
schema.getMark('bold');
Поддержка¶
Как получить помощь¶
- Документация — это подробное руководство
- Задачи GitHub — сообщить об ошибках
- Discord — присоединиться к Grav Discord
- Форум — форум Grav
Сообщение о проблемах¶
При сообщении о проблемах указывайте:
- Версия Grav (
bin/grav version) - Версия Editor Pro
- Браузер и его версия
- Шаги для воспроизведения
- Сообщения об ошибках из консоли
- Соответствующая конфигурация
Запросы фич¶
Отправляйте запросы на новые фичи на GitHub с указанием:
- Описание сценария использования
- Ожидаемое поведение
- Макеты или примеры, если применимо
- Приоритет и срочность
Благодарности¶
- TipTap — современный фреймворк редактора
- ProseMirror — базовый движок редактора
- Grav Team — платформа CMS
- Trilby Media — разработка плагина