GridView в Yii2 — это мощный виджет для отображения табличных данных в веб-приложении. Одним из распространенных требований является получение выбранных строк из GridView для дальнейшей обработки. В этой статье мы рассмотрим различные методы достижения этой цели с помощью Yii2 GridView. Мы предоставим пошаговые примеры кода и объясним каждый метод простыми разговорными словами.
Метод 1: использование JavaScript
Если вы хотите получить выбранные строки на стороне клиента без дополнительного запроса к серверу, вы можете использовать JavaScript. Вот пример:
$('#gridview-id').on('click', '.checkbox-class', function() {
var selectedRows = [];
$('.checkbox-class:checked').each(function() {
selectedRows.push($(this).closest('tr').data('key'));
});
console.log(selectedRows);
});
В этом примере мы прикрепляем обработчик событий щелчка к флажкам GridView. При установке флажка мы перебираем все отмеченные флажки, находим их родительскую строку и извлекаем уникальный идентификатор (обычно первичный ключ), связанный с каждой строкой. Наконец, мы сохраняем выбранные идентификаторы строк в массиве selectedRows.
Метод 2: использование выбираемого расширения GridView в Yii2
Yii2 предоставляет расширение под названием «yii2-gridview-extensions», которое расширяет функциональные возможности GridView, включая встроенную поддержку обработки выбранных строк. Вы можете установить его с помощью Composer:
composer require kartik-v/yii2-grid "@dev"
После установки расширения вы можете включить выбираемую функцию в конфигурации GridView:
use kartik\grid\GridView;
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => $columns,
'pjax' => true,
'panel' => [
'type' => GridView::TYPE_PRIMARY,
'heading' => 'Select Rows',
],
'toolbar' => [
[
'content' =>
Html::button('<i class="glyphicon glyphicon-trash"></i>', [
'class' => 'btn btn-danger',
'id' => 'delete-selected',
'data-pjax' => 0,
]),
],
'{toggleData}',
],
'selection' => GridView::SELECT_MULTIPLE,
'export' => false,
]);
Это активирует функцию выбора в GridView, позволяя пользователям выбирать несколько строк с помощью флажков. Доступ к выбранным строкам можно получить на стороне сервера с помощью метода Yii::$app->request->post('selection').
Метод 3: обработка выбора на стороне сервера
Если вы предпочитаете обрабатывать выбор строк на стороне сервера, вы можете настроить столбец флажка GridView и включить специальную функцию JavaScript. Вот пример:
use yii\helpers\Html;
use yii\grid\GridView;
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
[
'class' => 'yii\grid\CheckboxColumn',
'checkboxOptions' => function ($model, $key, $index, $column) {
return ['onchange' => 'handleRowSelection(event)'];
},
],
'column1',
'column2',
// Other columns
],
]);
В этом примере мы настраиваем столбец флажка и добавляем обработчик событий onchangeк каждому флажку. Этот обработчик событий вызывает функцию JavaScript handleRowSelection, с помощью которой вы можете выполнить любую желаемую серверную логику для обработки выбранных строк.
В этой статье мы рассмотрели различные методы получения выбранных строк из Yii2 GridView. Мы рассмотрели клиентский JavaScript, расширение GridView Selectable для Yii2 и обработку выбора на стороне сервера. Каждый метод предлагает свои преимущества в зависимости от ваших конкретных требований. Следуя приведенным примерам кода и пояснениям, вы сможете легко реализовать функцию выбора строк в своих приложениях Yii2.