2012-07-21 8 views
16

私はカテゴリ配列を返す私の教師モデルの関数を持っています。Yii gridviewは値の外部変数を使用します

getCaterogies() { 
    return array('1' => 'short tempered', '2' => 'funny', '3' => 'visionary', ...); 
} 

私は、データベース内のインデックスを格納し、それに対応する配列の値を使用してどこにでも値を表示しています。..

$categories = $teacher->categories; 
$category = $categories[$teacher->category]; 

私は誰かが私は内の文字列を格納しないことが示唆ので、一度これをやっていますステータスであるデータベースは代わりに整数値を格納し、変換をデータベースに格納するか、htモデルで定義します。文字列の問題は、比較において人為的なエラーが発生しやすくなることです。大文字と小文字の区別があるためかもしれません。

今私が直面している問題は、gridviewに値を表示しているときに値のフィールドに2行を書く必要がありますが、式であり、外部変数にも取られません。

グリッドビューではどのように動作させることができますか?

答えて

45

あなたは$rowが成り立つ$row$dataのparamsを取ることのできる値として無名関数を使用することができます行番号(ゼロベース)と$dataには、行のデータモデルが含まれています。

このようにして、内部でのみ定義することができます。

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 
    'columns'=>array(
     array(
      'name'=>'..', 
      'value'=>function($data,$row){ 
       $categories = $teacher->categories; 
       return $categories[$data->category]; 
      }, 
     ), 
    ), 
)); 

そして、あなたは外からそれを使用したい場合は、あなたが頼ることができるPHPのuse:その方法は、配列の計算は一度だけになりますので、私は個人的に、二番目のをお勧めします

$categories = $teacher->categories; 
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 
    'columns'=>array(
     array(
      'name'=>'..', 
      'value'=>function($data,$row) use ($categories){ 
       return $categories[$data->category]; 
      }, 
     ), 
    ), 
)); 

すべての場合に使用されます。

+4

はチャームのように動作します..両方のソリューション..thankyou ..:) –

+0

ヒント:必要ならば、(レコードごとに)モデル関数を呼び出して、前記レコードの異なるgridview列に印刷する複数の値を返すことができます。すべての列で関数を呼び出す代わりに、最初の列で呼び出すことができ、$ categoriesを結果で更新することができます。したがって、他の列は$カテゴリから読み込むことができます。これを行うには、参照によってパラメータを '使用'します(含まれている場合はパラメータの前にアンパサンド(&)を追加するだけです)。 'value' =>関数($ data、$ row)を使用する(&$ categories){ $ categories = ... }、 –

2

あなたは1行で

$categories = $teacher->categories; 
$category = $categories[$teacher->category]; 

を書き込むことができます。これは、あなたがより多くのセマンティックを使用することを許可

class ModelClass 
{ 
    const STATUS_SHORT_TEMPERED = 1; 
    const STATUS_FUNNY = 2; 
    const STATUS_VISIONARY = 3; 
} 

$category = $teacher->categories[$teacher->category];  

はまた、私はあなたが別のソリューションを使用することをお勧め

ModelClass::STATUS_FUNNY; 
代わりに以下のセマンティック

2; 

また、あなたはこの方法であなたのアレイを構成することができます。

getCaterogies() { 
    return array(
     ModelClass::STATUS_FUNNY => 'status funny', 
     ... 
    ); 
} 
+0

あなたのconst提案には大変感謝しています。 –

+0

あなたがモデル内の動的ゲッターであるgetterであるため、 '$ category = $ teacher-> categories [$ teacher-> category];'はwirkになります。私の配列を返しています。 –

+2

あなたの時間と提案に感謝していますが、私が探しているのは他の人に正確に答えられています。このソリューションが他にも必要かもしれません。 latr私はそのような 'use' stuffを必要とするかもしれません..stackoverflowは私にupvoteを許可しません.. :( –

関連する問題