Yii 动态创建显示不同数据的cgridview
我是Yii的新手,我很难弄明白这一点。我想根据用户选择的选项在一个页面上显示多个cgridview,每个gridview只显示该选项的记录。在这种情况下,选项是作业状态,如打开、关闭、进行中等 我有一些代码通过循环数组来显示多个网格视图,但我不确定如何过滤它们:Yii 动态创建显示不同数据的cgridview,yii,cgridview,Yii,Cgridview,我是Yii的新手,我很难弄明白这一点。我想根据用户选择的选项在一个页面上显示多个cgridview,每个gridview只显示该选项的记录。在这种情况下,选项是作业状态,如打开、关闭、进行中等 我有一些代码通过循环数组来显示多个网格视图,但我不确定如何过滤它们: $test = array(1,2,3,4,5); foreach ($test as $value) { $this->widget('zii.widgets.grid.CGridView', array( 'id'
$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 */
),
));
}
关于如何从数组中的值过滤每个gridview,有什么想法吗
谢谢
更新
好吧,我知道该怎么做了。我在控制器中处理它,如下所示:
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 */
),
));
基本上,为“状态”数组中的每个“状态”创建一个gridview。似乎是可行的,只是花了一些时间用MVC术语来考虑它,而不是我习惯的旧ASP.NET数据绑定方法。您应该从问题的数据部分开始:首先尝试创建几个返回所需结果的数据提供程序。如果您使用Gii自动生成一些模型,您可以查看那里的
search()
方法,以了解如何使用不同的查询条件创建这样的提供者。您应该尝试将此代码保存在某个模型中。例如,您可以创建一个searchByStatus($status)
方法,该方法返回给定状态的数据提供程序
然后在控制器中,您可以从此方法获取多个数据提供程序,每个状态对应一个数据提供程序,将它们发送到视图,最后将它们馈送到不同的cGridView中。您应该从问题的数据部分开始:首先尝试创建多个返回所需结果的数据提供程序。如果您使用Gii自动生成一些模型,您可以查看那里的
search()
方法,以了解如何使用不同的查询条件创建这样的提供者。您应该尝试将此代码保存在某个模型中。例如,您可以创建一个searchByStatus($status)
方法,该方法返回给定状态的数据提供程序
然后在控制器中,您可以从此方法获取多个数据提供程序,每个状态对应一个数据提供程序,将它们发送到视图,最后将它们馈送到不同的cgridview中。您要求使用不同的cgridview,因此: 进入你的模型 现在,您需要编写一些新的search()方法 在每个方法中,您将指定所需的值,如以下两种方法:
public function searchA() {
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('email', $this->email, true);
$criteria->compare('password', $this->password);
$criteria->compare('created', $this->created);
$criteria->compare('lastmodified', $this->lastmodified);
$criteria->compare('confirmed', $this->confirmed);
$criteria->compare('is_human', 1);// this is a human
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
public function searchB() {
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('email', $this->email, true);
$criteria->compare('password', $this->password);
$criteria->compare('created', $this->created);
$criteria->compare('lastmodified', $this->lastmodified);
$criteria->compare('confirmed', $this->confirmed);
$criteria->compare('is_human', 0);//this is not a human, maybe a donkey ... who knows
$criteria->compare('username', $this->username, true);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
现在已经有了搜索方法,请对每个cgridview使用所需的搜索方法
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'job-grid',
'dataProvider'=>$model->searchA(),
'columns'=>array(
'ID',
'CustomerCompany',
'FirstName',
'LastName',
/* etc */
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'job-grid2',
'dataProvider'=>$model->searchB(),
'columns'=>array(
'ID',
'CustomerCompany',
'FirstName',
'LastName',
/* etc */
),
));
简单的
ps:作为一种技巧,您可能需要使用常量,例如:
const CONSTA = 1;
const CONSTB = 2;
然后在模型中用作:
self::CONSTA
ModelName::CONSTA
或在模型之外,例如:
self::CONSTA
ModelName::CONSTA
通过使用const,如果值随时间变化,则不必修改整个代码,也不必在整个项目中查找这些值,因为您要求使用不同的cgridview,因此: 进入你的模型 现在,您需要编写一些新的search()方法 在每个方法中,您将指定所需的值,如以下两种方法:
public function searchA() {
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('email', $this->email, true);
$criteria->compare('password', $this->password);
$criteria->compare('created', $this->created);
$criteria->compare('lastmodified', $this->lastmodified);
$criteria->compare('confirmed', $this->confirmed);
$criteria->compare('is_human', 1);// this is a human
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
public function searchB() {
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('email', $this->email, true);
$criteria->compare('password', $this->password);
$criteria->compare('created', $this->created);
$criteria->compare('lastmodified', $this->lastmodified);
$criteria->compare('confirmed', $this->confirmed);
$criteria->compare('is_human', 0);//this is not a human, maybe a donkey ... who knows
$criteria->compare('username', $this->username, true);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
现在已经有了搜索方法,请对每个cgridview使用所需的搜索方法
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'job-grid',
'dataProvider'=>$model->searchA(),
'columns'=>array(
'ID',
'CustomerCompany',
'FirstName',
'LastName',
/* etc */
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'job-grid2',
'dataProvider'=>$model->searchB(),
'columns'=>array(
'ID',
'CustomerCompany',
'FirstName',
'LastName',
/* etc */
),
));
简单的
ps:作为一种技巧,您可能需要使用常量,例如:
const CONSTA = 1;
const CONSTB = 2;
然后在模型中用作:
self::CONSTA
ModelName::CONSTA
或在模型之外,例如:
self::CONSTA
ModelName::CONSTA
通过使用常量,如果值随时间变化,您不必修改整个代码,也不必在整个项目中查找这些值。这是一个在同一视图中的wiki。这是一个在同一视图中的wiki。我认为您只需要一个cGridView,您可以在选择选项时通过ajax更新表……我认为您只需要一个cGridView,就可以进行更新选择选项时使用ajax创建的表格…感谢您的帮助。最后,我在我的工作模型中使用了搜索方法,但我感谢你的努力。谢谢你的帮助。最后,我在我的工作模型中使用了搜索方法,但我感谢你的努力。