Как изменить/добавить/удалить поле в админке October CMS (на примере Rainlab.Blog)

Кратко оставлю памятку по экстенду полей в админке, замечаю, что это частый вопрос новичков. Всё покажу на примере плагина RainLab.Blog.

Все действия будем делать в файле Plugin.php своего плагина в методе boot()

Добавить новое поле или удалить

\Plugins\Author\PluginName\Plugin.php

public function boot()
{
    // Слушаем событие экстенда полей формы
    Event::listen('backend.form.extendFields', function($widget) {

        // Проверяем, что контроллер именно тот, который нам нужен
        if ( ! $widget->getController() instanceof \RainLab\Blog\Controllers\Posts ) {
            return;
        }

        // Проверяем, что модель именно та, которая нам нужна
        if ( ! $widget->model instanceof \RainLab\Blog\Models\Post ) {
            return;
        }

        // Добавляем поле
        $widget->addFields([
            'test' => [
                'label' => 'test',
                'type'  => 'text',
            ]
        ]);

        // Удалить поле
        $widget->removeField('surname');
    });
}

Информация о доступных полях и их свойствах есть в документации — https://octobercms.com/docs/backend/forms#field-types

Изменить существующие поля

Теперь более интересная задача — изменить существующие поля.

К примеру, нам нужно на форме создания нового поста для блога по умолчанию поставить галочку «опубликовано» и заполнить текущее время публикации. Для нас это изи:

\Plugins\Author\PluginName\Plugin.php

public function boot()
{
    // Слушаем уже другое событие, которое позволяет изменить существующие поля
    Event::listen('backend.form.extendFieldsBefore', function($widget) {

        if ( ! $widget->getController() instanceof \RainLab\Blog\Controllers\Posts ) {
            return;
        }

        if ( ! $widget->model instanceof \RainLab\Blog\Models\Post ) {
            return;
        }

        // Обрати внимание, наше поле находится на вкладке,
        // поэтому получаем доступ к полю через secondaryTabs
        //
        // Так же используем array_merge, чтобы объединить изменённую характеристику
        // с существующими характеристиками. Иначе мы просто затрём характеристики
        $widget->secondaryTabs['fields']['published'] = array_merge(
            $widget->secondaryTabs['fields']['published'], [
                'default' => true,
            ]
        );

        $widget->secondaryTabs['fields']['published_at'] = array_merge(
            $widget->secondaryTabs['fields']['published_at'], [
                'default' => now(),
            ]
        );
    });
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *