Пожалуй ни один сайт не обходится без вывода данных в таблицах, поэтому сегодня мы поговорим о такой замечательной штуке, как gridview. Нет ничего проще, чем работа с этим классом.
1. Для начала выберите любую таблицу, из которой можно выводить данные. Для примера возьмём таблицу с юзерами — users. Предположим, что вам в админ панели нужно выводить следующие данные: id, логин, e-mail, дату регистрации и логин реферала. На примере этих данных мы научимся использовать gridview почти на максимум.
2. UserController и модель User должны быть у каждого, поэтому сразу приступим к написанию кода. Для начала нам нужно настроить получение логина реферала. Делается это очень просто, в модель User вставляем следующий код:
public function getRef() { return $this->hasOne(User::className(), ['id' => 'ref_id']); }
Там где ref_id — название столбца с ID рефералов.
3. Теперь перейдём к самому главному — выводу данных. Сначала нужно настроить контроллер. Делаем это так:
public function actionIndex() { $dataProvider = new ActiveDataProvider([ 'query' => User::find(), ]); return $this->render('index', [ 'dataProvider' => $dataProvider, 'sort' => false, 'pagination' => false, ]); }
Теперь, собственно, нужно вывести эту самую таблицу с вашими данными. Вставляем такой код в index.php:
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'showFooter' => false, 'summary' => '', 'columns' => [ [ 'attribute' => 'id', 'format' => 'raw', 'value' => function ($model) { return '<a href="/user/'.$model->id.'/">'.$model->id.'</a>'; }, ], [ 'attribute' => 'login', 'format' => 'raw', 'value' => function ($model) { return '<a href="/user/'.$model->id.'/">'.$model->login.'</a>'; }, ], 'email', [ 'attribute' => 'date_add', 'label' => 'Дата регистрации', 'format' => 'datetime', 'contentOptions' => function ($model, $key, $index, $column) { return ['class' => 'date']; }, 'headerOptions' => ['class' => 'date'], ], [ 'attribute' => 'ref_id', 'format' => 'raw', 'value' => function ($model) { return '<a href="/user/'.$model->ref_id.'/">'.$model->ref->login.'</a>'; }, ], [ 'class' => 'yii\grid\ActionColumn', 'header' => "Действия", 'buttons' => [ 'view' => function ($url, $model) { return Html::a('Просмотр', ['/controller/action'], ['class'=>'btn btn-primary']); } ], ], ], ]);
Давайте разберёмся в коде. Во-первых, функция getRef получает все данные реферала, но больше всего нам нужен логин реферала. Затем мы в actionIndex получаем данные и ставим запрет pagination и сортировке. Лично мне это не нравится, я использую автоматическую подкрутку через ajax. Ну и напоследок мы в index.php вставляем код по выводу данных в таблице, там ничего сложного нет.
Как видите, ничего сложного в работе с gridView нет. Разумеется, есть и сложнее модели создания таблиц, но мы этого не будем трогать, потому что зачастую этого хватает.
Здравствуйте, почему не публикуйте новые уроки. Лично мне это очень интересно.Особенно этот тема. Если продолжили бы эту тему это было очень круто.
Здравствуйте. Времени не хватает.