Формы в списках
В методе, отвечающем за формирование списка, создаем объект компонента Формы:
$form = \tplAdmin::form($this, 'form_template');
Параметрами для компонента являются объект контроллера и опционально название php шаблона контроллера.
Приведем развернутый пример подключения формы к списку:
public function listing()
{
# создаем объект формы
$form = \tplAdmin::form($this);
# формируем поля формы
$form->text('title', 'Название', '', true)
->required('Введите название публикации')
->checkbox('enabled', 'Включена', true);
# событие получения данных о записи
$form->onLoad(function ($id, $fields) {
# получаем необходимые данные о редактируемой записи
return $this->model->postData($id, $fields);
});
# события сохранения данных записи
$form->onSave(function ($id, $data) {
return $this->model->postSave($id, $data);
});
# создаем объект списка
$list = \tplAdmin::blockList($this);
# привязываем форму к списку
$list->formAdd($form);
// формируем список
# отрисовываем список
return $list->view();
}
Обратим внимание, что установка обработчиков onLoad()
и onSave()
должны происходить до привязки формы к списку и вызова метода formAdd()
.
Для всех обработчиков событий должны существовать соответствующие методы в модели модуля/дополнения.
Добавление всплывающей формы для списка (popup).
Данная форма может использоваться для просмотра данных о записи в списке. По аналогии с обычными формами, необходимо:
- создать форму и добавить обработку событий:
$popupForm = \tplAdmin::form($this);
# Объявить методы загрузки и сохранения данных
$popupForm->onLoad(function($id, $fields) {
# загрузка
return $this->model->postData($id);
})->onSave(function($id, $data) {
# сохранение
});
# Добавить необходимые поля
$popupForm
->param('titleWidth', 150)
->setTitle('Заголовок формы')
# Пример поля с просмотром текста
->staticText('body', 'Текст', function() use ($popupForm) {
$data = $popupForm->_data(); # загруженные в форму данные в методе onLoad
return nl2br($data['body']);
})
->buttonsNo(); # скрываем кнопки (если необходимо)
- добавить форму в список как custom форму с опцией
popup
:
$list->formCustom($popupForm, 'popup_view_action', ['idKey' => 'id', 'popup' => true]);
- добавить в списке действие по которому эта форма будет открываться:
$list->rowsActionAdd('popup_view_action', function($row) use ($list){
return '<a href="'.$list->urlAjax('popup_view_action', ['id' => $row['id']]).'"
class="but edit j-form-popup"></a>';
}, 45);