Можно ли в Modx создать баннер так, чтобы задавать ему картинку в админке, а не в коде (через Ресурсы -> Доп. поля)? И если да, то как это сделать?

Да, в MODX вы можете создать баннер, который позволяет задавать его картинку через администраторскую панель, а не в коде ресурса через дополнительные поля.

Для реализации этого требуется выполнить следующие шаги:

1. Создайте новую плагинку:

- Перейдите в раздел "Элементы" в административной панели MODX.
- Щелкните правой кнопкой мыши на разделе "Плагины" и выберите "Создать плагин".
- Назовите плагин, например, "Banner Plugin" и укажите его системное имя, например, "banner_plugin".

2. В разделе "События" выберите событие "OnRichTextEditorRegister":

- Это событие позволяет добавлять пользовательские элементы в редактор контента.

3. В поле кода плагина добавьте следующий код:

<?php
$editor = $modx->event->params['editor'];

if ($editor == 'ckeditor') {
    $modx->event->output('<script>
    
    // Скрипт, добавляющий пользовательскую кнопку в редактор контента CKEditor
    CKEDITOR.on("instanceCreated", function (event) {
        var editor = event.editor;

        editor.ui.addButton("Banner", {
            label: "Вставить баннер",
            command: "InsertBanner",
            toolbar: "insert"
        });

        editor.addCommand("InsertBanner", {
            exec: function (editor) {
                // Открыть окно с выбором изображения баннера и вставить его в контент
                // Реализация окна выбора изображения зависит от ваших потребностей
                // Это может быть JSON-ресурс, плагин выбора изображений или что-то еще.
            }
        });

    });

    </script>');
} elseif ($editor == 'tinymce') {
    $modx->event->output('<script>
    
    // Скрипт, добавляющий пользовательскую кнопку в редактор контента TinyMCE
    tinymce.PluginManager.add("banner", function (editor) {
        editor.addButton("banner", {
            text: "Вставить баннер",
            icon: false,
            onclick: function () {
                // Открыть окно с выбором изображения баннера и вставить его в контент
                // Реализация окна выбора изображения зависит от ваших потребностей
                // Это может быть JSON-ресурс, плагин выбора изображений или что-то еще.
            }
        });
    });

    </script>');
}

4. Сохраните плагин.

5. Перейдите в раздел "Элементы" -> "Ресурсы":

- Создайте или выберите существующий ресурс, в котором нужно добавить баннер.
- Откройте вкладку "Доп. поля" и создайте поле типа "Текст" с системным именем "banner" (или любым другим системным именем по вашему выбору).

6. Добавьте вызов плагина в шаблоне вашего ресурса:

- Откройте нужный вам шаблон.
- Найдите место, где нужно выводить баннер, и добавьте следующий код (предполагается, что вы используете синтаксис MODX):

   [[!banner_plugin]]
   [[+banner]]

- Где banner_plugin - это системное имя созданной вами плагинки, а banner - системное имя созданного вами поля.

Теперь, когда вы откроете редактор контента (например, CKEditor или TinyMCE), у вас должна появиться новая кнопка "Вставить баннер". При щелчке на эту кнопку откроется окно, где вы сможете выбрать изображение для баннера. Выбранное изображение будет вставлено в контент вашего ресурса при щелчке на кнопку "Вставить".

Помните, что реализация окна выбора изображения зависит от ваших потребностей и может быть реализована различными способами, например, через JSON-ресурс или внешний плагин выбора изображений.