Skip to content

Теги MODX и Fenom ​

Шаблонный код в содержимом — вызовы сниппетов, чанки, плейсхолдеры, ссылки [[~12]], условия и циклы Fenom — сохраняется ровно как написан, символ в символ, даже если вы правите текст вокруг. Редактор не экранирует &, < и кавычки внутри тегов и не разбивает их форматированием.

За это отвечают настройки tiptapeditor.protect_modx_syntax и tiptapeditor.protect_fenom_syntax (обе включены по умолчанию).

Что считается тегом ​

Теги MODX ​

Всё от [[ до парного ]] — с любым префиксом (*, ++, ~, $, %, +, -, !, #), фильтрами вывода, параметрами и вложенными тегами. Например, это один тег:

text
[[!pdoResources? &parents=`10` &tpl=`@INLINE <li>[[+pagetitle]]</li>`]]

Незакрытая [[ остаётся обычным текстом.

Fenom ​

Конструкция Fenom начинается с {, за которой сразу идёт $, /, *, кавычка или ключевое слово Fenom (if, foreach, set, include и др.), и тянется до парной }. Строки в кавычках и вложенные скобки учитываются.

text
{$_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 там, где его ставит сам редактор (выравнивание текста);
  • одиночный & в тексте записывается как &amp; — для браузера это тот же 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}]]Как записывается ссылка на ресурс из диалога ссылки.

Не выключайте защиту, если используете теги

Без защиты теги становятся обычным текстом: их можно случайно разрезать форматированием, а & в параметрах сниппета после правки превратится в &amp;. Выключайте защиту, только если на сайте нет MODX-тегов или Fenom в содержимом (например, нужна запись вида {$...} как простого текста).

Полный список — в разделе Системные настройки.