Yii 1: Merefresh CGridview via JQuery secara Otomatis

Berawal dari dipostingnya salah satu fitur software ERP Capella yaitu To Do Auto Refresh, maka terispirasi untuk auto reload GridView.. berikut ini contoh kode untuk auto reload (asumsi id dari gridview adalah training-gridview dan refresh setiap 5000 mili detik)

Yii::app()->clientScript->registerScript('refreshGridView', "
  setInterval(\"$.fn.yiiGridView.update('training-grid')\",5000);
");

Nah pertanyaan berikutnya.. yang menarik adalah bagaimana cara mereload otomatis setiap page pada GridView?? (merupakan pertanyaan dari salah satu member Grup YiiFramework Indonesia tepatnya adalah Saudara Yoel Pieter Aritonang) ternyata tidak terlalu sulit setelah googling gak menemukan hasil.. akhirnya mencoba – coba dan berhasil :)

$pageCount = ceil($model->search()->getTotalItemCount() / $model->search()->pagination->pageSize);
Yii::app()->clientScript->registerScript('autoRefreshGridView', "
 var totalPage=".$pageCount.";
 var currentPage = 1;
 setInterval(
 function(){
 currentPage=currentPage+1;
 if(currentPage>totalPage) currentPage=1;
 $.fn.yiiGridView.update('training-grid',{url:'".$this->createUrl('training/index')."&Training_page='+currentPage+'&ajax=training-grid'}); },
 5000);
");

Wah ternyata masih belum cukup, dimana ketika terjadi perubahan data yang mengakibatkan penambahan atau pengurangan page, maka kode diatas tidak bisa mendeteksi.. karena itu perlu kita ubah dikit kodenya.. intinya setiap reload ada pengecekan jumlah page.. tentunya via ajax

Yii::app()->clientScript->registerScript('autoRefreshGridView', "
 var totalPage=".$pageCount.";
 var currentPage = 1;
 setInterval(
 function(){
 currentPage=currentPage+1;
 if(currentPage>totalPage) currentPage=1;
 $.fn.yiiGridView.update('training-grid',{url:'".$this->createUrl('training/index')."&Training_page='+currentPage+'&ajax=training-grid'}); },
 5000);
");

kemudian pada perhitungan total page kita pindahkan ke bagian Controller

actionTotalPage(){
	$model=new Training('search');
	$model->unsetAttributes();  // clear any default values
	if(isset($_GET['Training']))
		$model->attributes=$_GET['Training'];
	$pageCount = ceil($model->getTotalItemCount() / $model->pagination->pageSize);
	echo $pageCount;
	Yii::app()->end();
}

Requirement Yii 1.1.14

Mudah-mudahan manfaat..

3 Comments
  1. Yoel Pieter
  2. Nur Ichsan
  3. Rattan Furniture

Leave a Reply

Your email address will not be published. Required fields are marked *