Разработка сайтов и интернет-магазинов Блог веб-разработчика

markdown редактор в админку MODX

Изображение сгенерированно ИИ и принадлежит qwen.ai
Изображение сгенерированно ИИ и принадлежит qwen.ai

Для написания статей в блог, заметок, описаний и прочего текстового контента нужен текстовый редактор. В маркетплейсе MODX Revolution есть неплохой выбор редакторов: TinyMCE, TinyMCE Rich Text Editor, CKEditor. Их использование закроет 99,9% всех потребностей, а контент-менеджера не нужно обучать, так как интерфейс похож на интерфейс MS Word.

Но всё-таки есть небольшая проблема с такими редакторами - вставка кода. Не просто размещение исполняемого кода, а именно его отображение в виде текста, да ещё и с поддержкой форматирования. Это задачка не из простых.

Markdown-текст из админки

Рассмотрю на примере написания постов для блога.

изображение поста блока в markdown

Чтобы реализовать такую штуку, нужно в ресурсе поста блога, а именно в поле content, размещать текст в Markdown-формате.

Затем в шаблоне парсить его и отдавать в HTML-формате, понятном всем браузерам.

Дополнение Ace для подсветки

Чтобы писать Markdown-текст было интереснее, сделаю подсветку текста. Для этого буду использовать популярный редактор кода Ace.

  1. Установлю пакет Ace из маркетплейса.

Пакет Ace

  1. В системных настройках выберу этот пакет в качестве HTML-редактора ресурса.

Системные настройки Ace

Подключение репозитория через Composer

Чтобы сконвертировать Markdown в HTML, использую репозиторий на GitHub. Делаю соответствующую магию в Composer, чтобы подключить.

Сниппет конвертации Markdown

  1. Создаю сниппет с названием markdown.

  2. Вставляю код и сохраняю.

<?php
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';

use FastVolt\Helper\Markdown;

// Инициализация
$markdown = new Markdown(); // или Markdown::new()

// Получаю контент для конвертации
$markdown->setContent($input);

// Возвращаю HTML
return $markdown->getHtml();

Подключение в шаблоне

В шаблоне подключаю сниппет в режиме inline.

{ $_modx->resource.content | markdown }
Теги:

❗️ Код и технические решения в блоге — это исключительно субъективное мнение автора, предоставленное по принципу «как есть» (AS IS) в ознакомительных целях. Не является готовым продуктом или призывом к действию. Автор не гарантирует работоспособность и безопасность кода в вашем окружении. Вы обязаны самостоятельно тестировать решения перед использованием в продакшене. Автор снимает с себя любую ответственность за потерю данных, сбои систем, уязвимости, финансовые убытки или любые другие последствия, возникшие из-за применения материалов блога.

Обсудим вашу задачу и рассчитаем стоимость?

Отвечаю лично в течение пары часов. Никакого спама и автоматических рассылок.