Using filters with CGridView and CArrayDataProvider

January 28, 2012 Leave a comment

To use filter in CArrayDataProvide we must specify our own model to handle the filter. This is the example

Model

/**
 * Filterform to use filters in combination with CArrayDataProvider and CGridView
 */
class FiltersForm extends CFormModel
{
    public $filters = array();
 
    /**
     * Override magic getter for filters
     */
    public function __get($name)
    {
        if(!array_key_exists($name, $this->filters))
            $this->filters[$name] = null;
        return $this->filters[$name];
    }
 
    /**
     * Filter input array by key value pairs
     * @param array $data rawData
     * @return array filtered data array
     */
    public function filter(array $data)
    {
        foreach($data AS $rowIndex => $row) {
            foreach($this->filters AS $key => $value) {
                // unset if filter is set, but doesn't match
                if(array_key_exists($key, $row) AND !empty($value)) {
                    if(stripos($row[$key], $value) === false)
                        unset($data[$rowIndex]);
                }
            }
        }
        return $data;
    }
}

Controller

// Create filter model and set properties
$filtersForm=new FiltersForm;
if (isset($_GET['FiltersForm']))
    $filtersForm->filters=$_GET['FiltersForm'];
 
// Get rawData and create dataProvider
$rawData=User::model()->findAll();
$dataProvider=new CArrayDataProvider($rawData);
 
// Render
$this->render('index', array(
    'filtersForm' => $filtersForm,
    'dataProvider' => $dataProvider,
));

View

$columns = array(
    array(
        'header'=>CHtml::encode('Name'),
        'name'=>'username',
        'value'=>'$data->username',
    ),
    array(
        'header'=>CHtml::encode('Organisation'),
        'name'=>'organisation',
        'value'=>'$data->organisation',
    ),
);
 
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'area-grid',
'dataProvider'=>$dataProvider,
    'columns'=>$columns,
    'filter'=>$filtersForm,
));

Categories: yii framework

Using CArrayDataProvider

January 26, 2012 Leave a comment

View

$this->widget('zii.widgets.grid.CGridView', array(
	    'dataProvider' => $arrayDataProvider,
	    'columns' => array(
	        array(
	            'name' => 'username',
	            'type' => 'raw',
	            'value' => 'CHtml::encode($data["username"])'
	        ),
	        array(
	            'name' => 'email',
	            'type' => 'raw',
	            'value' => 'CHtml::link(CHtml::encode($data["email"]), "mailto:".CHtml::encode($data["email"]))',
	        ),
	    ),
	));


Controller
public function actionGridViewArray() {
	 
	   $rawData=array(
           array('id'=>1, 'username'=>'from', 'email'=>'array'),
	           array('id'=>2, 'username'=>'test 2', 'email'=>'hello@example.com'),
	       );
	       // or using: $rawData=User::model()->findAll();
	       $arrayDataProvider=new CArrayDataProvider($rawData, array(
	           'id'=>'id',
	           /* 'sort'=>array(
	               'attributes'=>array(
	                   'username', 'email',
	               ),
	           ), */
	           'pagination'=>array(
	               'pageSize'=>10,
	           ),
	       ));
	 
	       $params =array(
	           'arrayDataProvider'=>$arrayDataProvider,
	       );
	 
	       if(!isset($_GET['ajax'])) $this->render('grid_view_array', $params);
	       else  $this->renderPartial('grid_view_array', $params);
	   }

Categories: yii framework

Real Time AJAX Method

December 24, 2011 Leave a comment

Asynchronous Javascript and XML aka AJAX merupakan metode yang digunakan untuk transfer data dengan mengirimkan request dan response pada background web application. Request dikirimkan oleh client kepada server kemudian server mengembalikan request kepada client dalam bentuk response.

Nah, sekarang bagaimana kita menggunakan AJAX untuk membuat suatu web application yang real time. Real time ini di maksudkan pada segala update yang terdapat pada server dapat langsung disampaikan kepada client dengan response time yang masih dapat di tolelir oleh user.

Permasalahan yang dihadapi adalah segala interaksi antara client-server selalu di inisialisasi oleh client, sehingga untuk client bisa mendapatkan update, waktu request client harus pas dengan waktu update server. Nah! apakah mungkin client tahu kapan update pada server itu terjadi? Rasanya tidak…
Beberapa metode yang sekarang dikembangkan untuk mendapatkan realtime update yang memanfaatkan HTTP request antara lain:

Polling

Sebagian besar aplikasi AJAX melakukan pengecekan terhadap server pada interval yang telah ditentukan oleh user yang dikenal sebagai Time to Refresh (TTR). Pengecekan ini terjadi secara membabi buta tidak mempedulikan state aplikasi telah berubah atau tidak. Client melakukan request terhadap server, kemudian segera menerima response dan menunggu untuk melakukan request kembali sesuai dengan TTR.

Long Polling

Untuk mengatasi batasan ini, teknik yang dinamakan long polling digunakan. Long polling memanfaatkan kenyataan bahwa untuk mempunyai sebuah koneksi terbuka, sebuah request harus datang dari client. Akan tetapi, tidak seperti pull, pada long polling sebuah response tidak segera di kembalikan terhadap client setelah request diterima. Server tetap membuka koneksi sampai terdapatnya suatu data. Pada saat terdapat update untuk di kirimkan, server melakukan push data terhadap client. Setelah client menerima response, client akan melakukan request kembali.

Streaming

HTTP Streaming mirip dengan HTTP long polling, akan tetapi pada HTTP Streaming client tidak perlu melakukan request kembali setelah mendapatkan data. Koneksi antara client dan server tetap terbuka meskipun data telah di kirimkan.

Categories: Web Programming

Surga x Tidur

December 24, 2011 Leave a comment

“Carilah surga dengan sekuat tenagamu dan larilah dari neraka dengan sekuat tenagamu. Sesungguhnya orang yang mencari surga itu tidak tidur dan orang yang menghindari neraka juga tidak tidur…”

jalan surga dan neraka

jalan surga dan neraka

Kutipan hadits yang di riwayatkan oleh ath-Thabrani dari jalur periwayatan Ya’la al-Asydaq dari Kulaib bin Huzn tersebut akhir-akhir ini menjadi hal yang aku pikirkan setiap saat. Orang yang mencari surga itu tidak tidur… Apabila aku melihat diriku sendiri, melihat rutinitas diriku sendiri, setiap hari bekerja mulai dari pagi hari sampai dengan sore hari. Sepulang bekerja setelah mandi dan makan biasa langsung tidur. Ada yang kurang?

Ya! kapan waktu ku untuk bermesraan dengan Allah? Kapan aku mempelajari risalah yang diberikan-Nya? Kapan aku mempelajari wahyu2-Nya? Padalah dalam sehari ini aku mempunyai waktu sebanyak 24 jam penuh, tapi tak ada sejam pun dalam sehari aku mempelajari dan mendalami ajarannya….

Padahal orang yang tidak tidur pun masih takut akan dekatnya neraka dengan diri mereka

Categories: Islamic

Someday

November 30, 2011 Leave a comment

If not by chance we meet in this word, we’ll surely walk in our separated ways. I believe this is our destiny at least for now. I couldn’t change the fates that befall upon us. But I hope one day we’ll meet again. At that time I would like to say “Nice to meet you again :) ”.
From now on, I will use English in my blog because I have to Improve my skill in English.

Categories: A long way to go
Follow

Get every new post delivered to your Inbox.