Формы в списках

В методе, отвечающем за формирование списка, создаем объект компонента Формы:

$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).

Данная форма может использоваться для просмотра данных о записи в списке. По аналогии с обычными формами, необходимо:

  1. создать форму и добавить обработку событий:
$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(); # скрываем кнопки (если необходимо)
  1. добавить форму в список как custom форму с опцией popup:
$list->formCustom($popupForm, 'popup_view_action', ['idKey' => 'id', 'popup' => true]);
  1. добавить в списке действие по которому эта форма будет открываться:
$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);