Кратко оставлю памятку по экстенду полей в админке, замечаю, что это частый вопрос новичков. Всё покажу на примере плагина RainLab.Blog.
Все действия будем делать в файле Plugin.php
своего плагина в методе boot()
Добавить новое поле или удалить
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
Изменить существующие поля
Теперь более интересная задача — изменить существующие поля.
К примеру, нам нужно на форме создания нового поста для блога по умолчанию поставить галочку «опубликовано» и заполнить текущее время публикации. Для нас это изи:
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(),
]
);
});
}