Article #547

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on November 8, 2022 #547

giiにより生成されたコードの修正法

元に戻って、標準のgiiにより生成されるコードの追加の修正法を示します。前稿までにCListViewの修正を示しましたが、ここではもう一つのCGridViewの修正を行います。

標準のgiiではテーブル表示にCListViewとCGridViewの2種類を選択するとができます。見かけが良いのはCGridViewで、図547.1のようにエクセルライクな表を作成してくれます。

図%%.1
図547.1 標準のCGridViewによる表示

views/docs/index.phpの修正法を示します。自動生成されたindex.phpを見ると、

<?php $this->widget('zii.widgets.grid.CGridView', array(
        
'id'=>'docs-grid',
        
'dataProvider'=>$model->search(),
        
'filter'=>$model,
        
'columns'=>array(
                
'id',
                
'title',
                
'pages',
                
'link',
                
'category_id',
                array(
                        
'class'=>'CButtonColumn',
                ),
        ),
)); 
?>

のように変数ではなくラベルになっています。従って\$model->(リレーション名)->(メンバ名)のように手修正することができないと思っていました。ところがyii2のGridViewのcolumnsにおいて、(リレーション名).(メンバ名)でリレーション先を表示できるとあったため、yiiで実行してみたところ、正常に表示されることが分かりました。この機能はマニュアルに書かれてないようです。

<?php $this->widget('zii.widgets.grid.CGridView', array(
        
'id'=>'docs-grid',
        
'dataProvider'=>$model->search(),
        
'filter'=>$model,
        
'columns'=>array(
                
'id',
                
'title',
                
'pages',
                
'link',
                
'category.name',
                array(
                        
'class'=>'CButtonColumn',
                ),
        ),
)); 
?>

これを実行した結果を図547.2に示します。

図%%.2
図547.2 修正したCGridViewによる表示

図547.1ではCategoryのタイトルで数字となっていたカラムが、Nameのタイトルでカテゴリ名に変化しています。ちなみにこのカラムタイトルは、"attribute:format:label"のようにラベルとして指定可能です。例えば元のままの"Category"としたければ、

                'category.name:text:Category',

のように記述します。

yiiにおいてはgiixを使えばリレーションに関する手修正は必要ないため、ここまでとします。


左矢前のブログ 次のブログ右矢

Leave a Comment

Your email address will not be published.

You may use Markdown syntax. If you include an ad such as http://, it will be invalidated by our AI system.

Please enter the numbers as they are shown in the image above.