Yii2 GridView. Віджет виведення даних. Частина 1

14

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. У цій статті ми з вами познайомимося з одним з віджетів для роботи з даними – це віджет Yii2 GridView.

Фреймворк Yii2 пропонує відразу кілька віджетів для відображення даних – це віджет DetailView, ListView і потужний віджет для роботи з даними GridView, який ми і почнемо розглядати в даній статті.

Віджет GridView (або таблиця даних) являє собою таблицю, яку дуже зручно використовувати в адмінці сайту. У неї порядково виводяться дані конкретної таблиці БД і керувати цими даними – одне задоволення. У таблицю ми можемо вивести тільки ті дані, які нам потрібні, ми можемо визначати формат цих даних, сортувати їх по будь-якому полю, проводити швидкі операції (перехід до детального перегляду запису, редагування вибраного запису або її видалення).

Принадність роботи з цим провайдером даних полягає ще і в тому, що спочатку нам не доведеться навіть писати код, ми можемо скористатися генератором коду Gii, який за замовчуванням згенерує в індексних видах подання даних табличним списком, тобто з використанням віджета GridView. Ось який код генератор видав списку постів в адмінці:

$dataProvider,
‘columns’ => [
[‘class’ => ‘yii\grid\SerialColumn’],
‘id’,
‘category_id’,
‘title’,
‘excerpt’,
‘text:n-текст’,
// ‘keywords’,
// ‘description’,
// ‘created’,
// ‘status’,
[‘class’ => ‘yii\grid\ActionColumn’],
],
]); ?>

А ось так виглядає результат роботи даного коду на сторінці списку постів в адмінці:

Yii2 GridView. Віджет виведення даних. Частина 1

Кожен рядок таблиці – це одна стаття, тобто один запис з відповідної таблиці в БД. За замовчуванням фреймворк може вивести в таблицю не зовсім ті дані, які нам потрібні. Наприклад, в моєму випадку короткий і повний текст запису явно зайві і виводити їх не потрібно. А от поля created і status можна було б вивести (в коді вони є, але закомментированы). Поправити це легко. Поля таблиці перераховані властивості columns віджета, просто приберемо або закомментіруем зайві поля і додамо або раскомментируем потрібні.

$dataProvider,
‘columns’ => [
[‘class’ => ‘yii\grid\SerialColumn’],
‘id’,
‘category_id’,
‘title’,
// ‘excerpt’,
// ‘text:n-текст’,
// ‘keywords’,
// ‘description’,
‘created’,
‘status’,
[‘class’ => ‘yii\grid\ActionColumn’],
],
]); ?>

В результаті ми отримаємо наступну картину:

Yii2 GridView. Віджет виведення даних. Частина 1

Погодьтеся, таблиця стала виглядати набагато приємніше. Вона стала компактною, в ній з’явилися відсутні дані та керувати такою таблицею тепер набагато зручніше. Йдемо далі і спробуємо скористатися можливістю налаштування вмісту колонок. Наприклад, у колонці Title у нас є найменування посади. Уявімо, що там можуть бути теги HTML, наприклад, обрамим найменування першого запису в теги b.

Yii2 GridView. Віджет виведення даних. Частина 1

Як бачимо, теги не працюють, вони перетворюються в HTML-сутності. Так відбувається, тому що за замовчуванням віджет використовує для форматування даних у цій колонці компонент Formatter і тип формату text. Якщо ми хочемо, щоб теги працювали, нам достатньо змінити форматування колонки. Для цього ми трохи перепишемо висновок зазначеної колонки, ось так:

$dataProvider,
‘columns’ => [
[‘class’ => ‘yii\grid\SerialColumn’],
‘id’,
‘category_id’,
// ‘title’,
[
‘attribute’ => ‘title’,
‘format’ => ‘html’
],
// ‘excerpt’,
// ‘text:n-текст’,
// ‘keywords’,
// ‘description’,
‘created’,
‘status’,
[‘class’ => ‘yii\grid\ActionColumn’],
],
]); ?>

Тут ми використовували formatter html для потрібного нам атрибута title. Також можна замість html використовувати значення raw. В результаті теги спрацюють:

Yii2 GridView. Віджет виведення даних. Частина 1

Така можливість навряд чи потрібна нам для заголовка, але безумовно буде потрібно, наприклад, для показу мініатюри запису. Крім форматтеров text (за замовчуванням) і html (або raw) ми можемо використовувати і набір інших методів форматування, повний їх список можна знайти в документації.

Візьмемо ще один приклад, давайте змінимо формат дати посту. Зараз у нас виводиться дата у форматі YYYY-MM-DD. Пара прикладів форматування дати. Замінимо простий висновок атрибута created таким:

// ‘created’,
[
‘attribute’ => ‘created’,
‘format’ => [‘date’, ‘dd/MM/yyyy’]
],

Результат:

Yii2 GridView. Віджет виведення даних. Частина 1

Також можна зустріти і такий варіант форматування дати:

[
‘attribute’ => ‘created’,
‘format’ => [‘date’, ‘php:d/m/Y’]
],

Результат буде аналогічний попередньому. На цьому сьогодні все. Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.