Модель и представление данных в табличном виде.
Модель может быть использована сразу после подклчения библиотеки через композер.
Для использования помощников вида (ViewHelper) нужно в ваш application.config.php в ветки service_manager и listeners добавить следующее:
'service_manager' => array(
'invokables' => array(
'ZFS\Grid\View\Helper\Configurator' => 'ZFS\Grid\View\Helper\Configurator'
)
),
'listeners' => array(
'ZFS\Grid\View\Helper\Configurator'
)Ключ можно выбрать любой другой, если есть необходимость. Для использования произвольных помощников вида, их можно подключить к ViewHelperManager:
$serviceLocator
->get('ViewHelperManager')
->setInvokableClass('gridRowValue', 'ZFS\Grid\View\Helper\GridRowValue');Для отображения данных в табличном виде нужны:
- Сами данные:
$users = array(
array(
'id' => 1,
'login' => 'Vasia',
'email' => '[email protected]',
'status' => '0',
),
array(
'id' => 2,
'login' => 'Fedia',
'email' => '[email protected]',
'status' => '1',
)
);- Модель "сетки":
$grid = new GridModel();- Установить гриду данные:
$grid->setRows($users);- Установить гриду набор колонок. Параметр name - системное имя колонки, fieldName - имя/ключ параметра в строке для выборки и подстановки в ячейку, title - заглавие колонки:
$grid->setColumns(
array(
new ColumnModel(array(
'name' => 'id',
'fieldName' => 'id',
'title' => 'ID',
)),
new ColumnModel(array(
'name' => 'login',
'fieldName' => 'login',
'title' => 'Login',
)),
new ColumnModel(array(
'name' => 'email',
'fieldName' => 'email',
'title' => 'E-mail',
))
)
);- Передать грид в представление:
// представим, что находимся в контроллере
return new ViewModel(array('grid' => $grid));- Отобразить таблицу в шаблоне с помощью ViewHelper'а Grid:
<?php echo $this->grid($grid); ?>или отобразить таблицу вручную, если вы намеренно не подключили ViewHelper'ы.
Все параметры ColumnModel можно устанавливать через get* и set* методы:
$column = new ColumnModel();
$column->setName('name');
$column->setFieldName('name');
$column->setTitle('User name');Полный набор параметров у ColumnModel:
-
name - системное имя колонки;
-
fieldName - имя/ключ параметра в строке для выборки и подстановки в ячейку;
-
title - заглавие колонки;
-
formatter - callback, результат которого идет как значение в ячейку. Вызывается помощником вида GridRowValue после получения значения из строки и только при наличии этого параметра у ColumnModel. Сигнатура функции:
function ($valueFromRowCell, $wholeRow, $currentColumn) {}; -
id - строка, подставляется в атрибут
idтэгу<th>в<thead>и<tfoot>; -
css - строка, подставляется в атрибут
classтэгу<th>в<thead>и<tfoot>; -
style - строка, подставляется в атрибут
styleтэгу<th>в<thead>и<tfoot>;
У GridModel тоже есть подобные параметры:
- id - строка, подставляется в атрибут
idтэгу<table>; - css - строка, подставляется в атрибут
classтэгу<table> - style - строка, подставляется в атрибут
styleтэгу<table>
И у ColumnModel и у GridModel есть возможность установки произвольных параметров через магические __get и __set для ручной их обработки в шаблонах представления.
В библиотеке реализованы следующие помощники вида:
- grid - отображение стандартной таблицы с использованием параметров id, css, style;
- gridHeader - отображение блока
<thead>; - gridHeaderRow - отображение строки заголовка:
<tr><th>...</th></tr>; - gridHeaderCell - отображение ячейки строки заголовка:
<th>..</th>; - gridBody - отображение блока
<tbody>; - gridBodyRow - отображение строки тела:
<tr><td>...<td></tr>; - gridBodyCell - отображение ячейки строки тела:
<td>...</td>; - gridFooter - отображение блока
<tfoot>; - gridFooterRow - отображение строки футера:
<tr><th>...</th></tr>; - gridFooterCell - отображение ячейки строки футера:
<th>..</th>; - gridRowValue - отображение значения ячейки строки данных.
Для отображения стандартной таблицы достаточно использовать лишь grid:
<?php echo $this->grid($grid); ?>Если вам не нужен футер, к примеру, можно воспользоваться помощниками вида ниже уровня: gridHeader, gridBody:
<?php echo $this->grid()->openTag($grid); ?>
<?php echo $this->gridHeader($grid); ?>
<?php echo $this->gridBody($grid); ?>
<?php echo $this->grid()->closeTag(); ?>Полная аналогия с помощниками вида Zend\Form.
MIT