Теги MODX и Fenom
Шаблонный код в содержимом — вызовы сниппетов, чанки, плейсхолдеры, ссылки [[~12]], условия и циклы Fenom — сохраняется ровно как написан, символ в символ, даже если вы правите текст вокруг. Редактор не экранирует &, < и кавычки внутри тегов и не разбивает их форматированием.
За это отвечают настройки tiptapeditor.protect_modx_syntax и tiptapeditor.protect_fenom_syntax (обе включены по умолчанию).
Что считается тегом
Теги MODX
Всё от [[ до парного ]] — с любым префиксом (*, ++, ~, $, %, +, -, !, #), фильтрами вывода, параметрами и вложенными тегами. Например, это один тег:
[[!pdoResources? &parents=`10` &tpl=`@INLINE <li>[[+pagetitle]]</li>`]]Незакрытая [[ остаётся обычным текстом.
Fenom
Конструкция Fenom начинается с {, за которой сразу идёт $, /, *, кавычка или ключевое слово Fenom (if, foreach, set, include и др.), и тянется до парной }. Строки в кавычках и вложенные скобки учитываются.
{$_modx->resource.pagetitle}
{if $_modx->user.id > 0} … {/if}
{foreach $items as $item} … {/foreach}
{* комментарий *}
{ignore} … {/ignore}{* … *}и{ignore}…{/ignore}— каждая одна конструкция.{с пробелом после неё — обычный текст (так же считает и сам Fenom), поэтому CSS и JSON в тексте не превращаются в теги.- Имена собственных тегов и функций Fenom добавьте в
tiptapeditor.fenom_tagsчерез запятую, напримерmyTag, other. Тогда{myTag …}тоже будет защищён.
Как теги выглядят в редакторе
| Где стоит тег | Как показывается |
|---|---|
В тексте (Привет, [[+name]]!) | Плашка. Её нельзя разрезать, впечатать в неё текст или отформатировать отдельно — она ведёт себя как один символ. |
На отдельной строке между блоками ([[!pdoResources? …]], {if …}, {/foreach}) | Карточка с полным исходным кодом. |
В атрибуте (href="[[~12]]", src="[[+image]]", class="{$cls}") | Обычный текст в диалоге ссылки или изображения; записывается обратно без экранирования. |
Правка тега. Двойной щелчок или Enter на выделенной плашке или карточке открывает диалог «Код MODX / Fenom» с исходным кодом. Ctrl/Cmd+Enter сохраняет, пустое поле удаляет тег.
Набор и вставка. Как только вы допечатали или вставили полный тег, он становится плашкой: [[*pagetitle остаётся текстом, пока не набрано ]]. Обратные кавычки внутри набираемого тега MODX не включают «код в строке». Внутри блоков кода и кода в строке теги не преобразуются — там это просто текст.
HTML-блоки
Если в содержимом есть HTML, для которого у визуального редактора нет подходящего элемента, этот фрагмент сохраняется HTML-блоком — байт в байт, без изменений. Всё вокруг остаётся обычным редактируемым текстом.
Чаще всего HTML-блоками становятся:
<div>,<section>,<span class="…">и другие обёртки;<script>,<style>,<iframe>, который не прошёл проверку, собственные элементы (<my-widget>);- конструкции Fenom между строками таблицы или пунктами списка (
{foreach}вокруг<tr>или<li>); - теги внутри
<pre>; - элементы, у которых тег стоит внутри самого тега (
<li[[+attr]]>) или в атрибуте есть двойная кавычка внутри тега; - элементы с обработчиками событий (
onclick,onerror…); - таблицы с
<caption>или<colgroup>, фигуры не из одной картинки с подписью.
В редакторе HTML-блок — карточка с названием элемента и текстовым превью: ничего из него в менеджере не отображается и не выполняется. Двойной щелчок или Enter открывает диалог «HTML-блок» с исходным кодом. Ctrl/Cmd+Enter сохраняет, пустое поле удаляет блок.
Почему так, а не «как в браузере»
Если бы редактор пытался показать такой HTML визуально, ему пришлось бы его переписать — развернуть <div>, вынести {foreach} из таблицы, убрать атрибуты. HTML-блок гарантирует, что вёрстка и логика шаблона дойдут до сайта нетронутыми.
Текст без абзаца (на верхнем уровне, в пунктах списка, ячейках, цитатах) так и остаётся без <p>, а таблица без <tbody> — без него.
Если что-то всё же не помещается
Перед запуском редактор проверяет, что загрузка содержимого ничего не теряет: элементы, атрибуты, комментарии, текст. Всё, что нельзя показать, становится HTML-блоками. Только если проверка всё равно не проходит, поле остаётся обычным текстовым с сообщением «В этом содержимом есть разметка, которую визуальный редактор не может показать без изменений…». То же — если в содержимом есть служебные символы U+E000 или U+E001, которые редактор использует сам.
Что может измениться при правке
Сохранение без правок не меняет ничего. После правок могут измениться только:
- переносы строк и пробелы между блоками;
- порядок атрибутов у некоторых элементов;
- значение
styleтам, где его ставит сам редактор (выравнивание текста); - одиночный
&в тексте записывается как&— для браузера это тот же HTML.
Внутри тегов MODX и Fenom ничего не меняется никогда.
Подсказки при наборе
Пока вы набираете тег, редактор подсказывает варианты:
| Набрано | Подсказки |
|---|---|
[[ | Типы тегов: [[*, [[!, [[$, [[++, [[~ |
[[* | Поля ресурса и TV → [[*pagetitle]] |
[[!имя или [[имя | Сниппеты → [[!pdoResources]] |
[[$имя | Чанки → [[$header]] |
[[++ключ | Ключи системных настроек (никогда не значения) → [[++site_name]] |
[[~заголовок | Ресурсы → [[~12]] |
{$ | Поля ресурса как переменные Fenom, $_modx-> |
{$_modx-> | Члены объекта $_modx из pdoTools; после resource. — поля ресурса, после config. — ключи настроек |
Стрелки выбирают вариант, Enter или Tab вставляют, Escape закрывает список. В блоках кода подсказок нет.
Как это устроено:
- Элементы, настройки и ресурсы ищутся на сервере через коннектор TipTapEditor, по одному запросу после паузы в наборе. Заранее со страницей ничего не загружается.
- Действуют права пользователя (
view_chunk,view_snippet,view_tv,settings,view_document) и ACL категорий элементов. Возвращаются только имена и короткие описания. - Теги лексикона
[[%не подсказываются.
Настройки
| Настройка | По умолчанию | Что делает |
|---|---|---|
tiptapeditor.protect_modx_syntax | Да | Защита тегов MODX. |
tiptapeditor.protect_fenom_syntax | Да | Защита конструкций Fenom. |
tiptapeditor.fenom_tags | пусто | Имена собственных тегов и функций Fenom. |
tiptapeditor.modx_autocomplete | Да | Подсказки тегов MODX. |
tiptapeditor.fenom_autocomplete | Нет | Подсказки Fenom. |
tiptapeditor.resource_link_format | [[~{id}]] | Как записывается ссылка на ресурс из диалога ссылки. |
Не выключайте защиту, если используете теги
Без защиты теги становятся обычным текстом: их можно случайно разрезать форматированием, а & в параметрах сниппета после правки превратится в &. Выключайте защиту, только если на сайте нет MODX-тегов или Fenom в содержимом (например, нужна запись вида {$...} как простого текста).
Полный список — в разделе Системные настройки.