1. Thêm lớp tùy chỉnh hoặc id để chứa pjax
Hoặc thêm class hoặc id để chứa pjax của bạn với GridView, vì vậy bạn không phải phụ thuộc từ tự động tạo ra các lớp học và id (hoặc trong trường hợp bạn có nhiều widget GridView trong một trang).
kartik\grid\CheckboxColumn
chỉ là phiên bản mở rộng của yii\grid\CheckboxColumn.
kartik\grid\View
có containerOptions
, bạn có thể chỉ định class
tại đây, có vẻ như id
được tạo tự động và không thể thay đổi bằng thuộc tính này.
'containerOptions' => ['class' => 'hotel-pjax-container'],
Ví dụ về sản lượng được tạo ra:
<div class="hotel-pjax-container table-responsive" id="w0-container">...</div>
yii\grid\View\
có options
, bạn có thể chỉ định id
đây. Id kết quả container sẽ được bắt đầu bằng giá trị thông qua, ví dụ:
'options' => ['id' => 'hotel-pjax'],
tạo đầu ra:
<div class="table-responsive" id="hotel-pjax-container">...</div>
Class được bỏ qua trong trường hợp này.
Tôi khuyên bạn nên chỉ định id.
2. Tạo hoặc sửa đổi hành động để xóa trong bộ điều khiển
Theo mặc định delete
tự động được tạo ra với gii
đã chuyển hướng, vì vậy chúng tôi có thể tạo một hành động cho nhiều xóa (hoặc bạn có thể xử lý này trong một, tuỳ bạn).
public function actionDeleteMultiple()
{
$pk = Yii::$app->request->post('pk'); // Array or selected records primary keys
// Preventing extra unnecessary query
if (!$pk) {
return;
}
return Hotel::deleteAll(['hotel_id' => $pk]);
}
Lưu ý rằng nếu bạn không chỉ định bất kỳ điều kiện trong deleteAll()
, tất cả các bản ghi trong bảng sẽ bị xóa! Hãy chính xác với điều đó.
Bạn cũng có thể chỉ định các hành động trong VerbFilter
như thế này:
use yii\filters\VerbFilter;
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
'delete-multiple' => ['post'],
],
],
];
}
3.Viết một số javascript để buộc tất cả cùng nhau
Bạn có thể nhận được từ khóa chính của dòng được chọn như thế này:
$('#hotel-pjax-container').yiiGridView('getSelectedRows');
Thêm javascript này (nút bấm ví dụ):
$.post(
"delete-multiple",
{
pk : $('#hotel-pjax-container').yiiGridView('getSelectedRows')
},
function() {
$.pjax.reload({container:'#hotel-pjax-container'});
}
);
Bạn có thể tìm thêm thông tin về việc cập nhật GridView với pjax trong issue này. Có thể thử cách này: $('#hotel-pjax-container').yiiGridView('applyFilter');
làm phương án thay thế; Bao gồm js bằng nội dung hoặc chỉ với registerJs()
;
Chính xác bạn muốn xóa gì? – arogachev
Tôi muốn xóa tất cả dữ liệu có hộp kiểm được chọn. – Stark