私はYiiを初めて使用しますが、これを理解するのに苦労しています。ユーザーが選択したオプションに応じて、ページに複数のCGridViewを表示したいのですが、各グリッドビューにはそのオプションのレコードのみが表示されます。この場合、オプションは、オープン、クローズ、進行中などのジョブステータスです。
配列をループして複数のグリッドビューを表示するように機能するコードがいくつかありますが、それらをフィルタリングする方法がわかりません。
$test = array(1,2,3,4,5);
foreach ($test as $value) {
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'job-grid',
'dataProvider'=>$model->search(),
'columns'=>array(
'ID',
'CustomerCompany',
'FirstName',
'LastName',
/* etc */
),
));
}
配列の値から各グリッドビューをフィルタリングする方法についてのアイデアはありますか?
ありがとう!
アップデート
わかりました、私は自分がやろうとしていたことをどのように行うかを理解しました。私はこのようにコントローラーでそれを処理しています:
public function actionBoard()
{
$models = array();
$statuses = JobStatus::model()->findAll();
foreach ($statuses as $status)
{
$model=new Job('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Job']))
$model->attributes=$_GET['Job'];
$model->Status = $status->ID;
$models[$status->Status] = $model;
}
$this->render('board',array('models'=>$models));
}
したがって、すべてのステータスを見つけ、IDフィールドを使用して検索を実行し、結果を配列に入れて、ビューに渡します。ビューでは次のように処理します。
foreach ($models as $status)
{
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'job-grid',
'dataProvider'=>$status->search(),
'columns'=>array(
'ID',
'CustomerCompany',
'FirstName',
'LastName',
'Phone1',
'Phone2',
/* etc */
),
));
基本的に、「ステータス」の配列内の「ステータス」ごとにグリッドビューを作成します。動作しているようですが、私が慣れている古いASP.NETデータバインディング方法ではなく、MVC用語で考えるのに少し時間がかかりました。