モデルを使わないCGridViewサンプル
続いてモデルを使わずzii.widgets.CGridtViewを使ってみる。
サンプルコード
ボタンカラムは、データ各要素にprimaryKeyプロパティを要するのでコメントアウトしています。もちろん回避する方法はあるだろうが今回そこまでやらない。
protected/controllers/SiteController.php
<?php public function actionIndex() { $data = array( (object)array('id'=>1,'title'=>'アルファ','create_time'=>time(), 'content'=>'<div>content</div>', 'category'=>(object)array('name'=>'コメディ'), 'author'=>(object)array('username'=>'アルファのauthor'), ), (object)array('id'=>2, 'title'=>'ベータ', 'create_time'=>time(), 'content'=>'<div>content</div>', 'category'=>(object)array('name'=>'アクション'), 'author'=>(object)array('username'=>'ベータのauthor'), ), (object)array('id'=>3, 'title'=>'チャーリー', 'create_time'=>time(), 'content'=>'<div>content</div>', 'category'=>(object)array('name'=>'アニメ'), 'author'=>(object)array('username'=>'チャーリーのauthor'), ), (object)array('id'=>4, 'title'=>'デルタ', 'create_time'=>time(), 'content'=>'<div>content</div>', 'category'=>(object)array('name'=>'ホラー'), 'author'=>(object)array('username'=>'デルタのauthor'), ), ); $dataProvider = new CArrayDataProvider($data); $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$dataProvider, 'columns'=>array( 'title', 'category.name', // display the 'name' attribute of the 'category' relation 'content:html', // display the 'content' attribute as purified HTML array( 'name'=>'create_time', 'value'=>'date("M j, Y", $data->create_time)', ), array( // display 'author.username' using an expression 'name'=>'authorName', 'value'=>'$data->author->username', ), // array( // display a column with "view", "update" and "delete" buttons // 'class'=>'CButtonColumn', // ), ), )); }
'category.name' としたり、array('value'=>'$data->author->username') としたりしています。
得られたHTML
table が得られた。単純なarrayからtableへの整形にも使えそうです。
<div id="yw0" class="grid-view"> <div class="summary">Displaying 1-4 of 4 result(s).</div> <table class="items"> <thead> <tr> <th id="yw0_c0">title</th><th id="yw0_c1">category.name</th><th id="yw0_c2">content</th><th id="yw0_c3">create_time</th><th id="yw0_c4">authorName</th> </tr> </thead> <tbody> <tr class="odd"><td>アルファ</td><td>コメディ</td><td><div>content</div></td><td>Mar 7, 2012</td><td>アルファのauthor</td></tr> <tr class="even"><td>ベータ</td><td>アクション</td><td><div>content</div></td><td>Mar 7, 2012</td><td>ベータのauthor</td></tr> <tr class="odd"><td>チャーリー</td><td>アニメ</td><td><div>content</div></td><td>Mar 7, 2012</td><td>チャーリーのauthor</td></tr> <tr class="even"><td>デルタ</td><td>ホラー</td><td><div>content</div></td><td>Mar 7, 2012</td><td>デルタのauthor</td></tr> </tbody> </table> <div class="keys" style="display:none" title="/test/"><span>1</span><span>2</span><span>3</span><span>4</span></div> </div>
ソート&ページネーション
これでソート、ページネーションできた。 リレーションフィールドに対してはできなかったが、今回は(略)
<?php $dataProvider = new CArrayDataProvider($dt, array( 'sort'=>array( // ソート設定 'attributes'=>array('title', 'category.name', 'content', 'create_time', 'authorName'), ), 'pagination'=>array( // ページネーション設定 'pageSize'=>10, ), ));