我有两个表:User和UserProfile都处于关系中。即UserProfile属于User。用户表具有列“is_active”,它以0和1格式存储特定用户的活动/非活动记录。
现在我有一个下拉字段,其中包含Active(值1)和Inactive(值0)选项,我想根据活动和非活动用户列表过滤CGridview小部件。
以下是我正在做的事情:
<?php echo CHtml::dropDownList('UserProfile[is_active]', $model->user->is_active,
array(
'1'=>"Active",
'0'=>"Inactive",
), array('onchange'=>"$.fn.yiiGridView.update('yw0', {data: $(this).serialize()});") ); ?>
<?php
$this->widget('bootstrap.widgets.TbGridView', array(
'type' => 'striped bordered condensed',
'dataProvider' => $model->search(),
'filter' => $model,
'template' => '{pager}{items}',
'enableSorting' => true,
'columns' => array(
'title.name',
array(
'name' => 'first_name',
'type' => 'raw',
'value' => 'CHtml::link($data->first_name,"/userProfile/$data->user_profile_id")'
),
'last_name',
'user.username',
'user.email',
array(
'class' => 'bootstrap.widgets.TbButtonColumn',
'template' => '{update} {delete}',
),
),
'pager' => array(
'header' => '',
'hiddenPageCssClass' => 'disabled',
'maxButtonCount' => 3,
'cssFile' => false,
'class' => 'CLinkPager',
'prevPageLabel' => '<i class="icon-chevron-left"></i>',
'nextPageLabel' => '<i class="icon-chevron-right"></i>',
'firstPageLabel' => 'First',
'lastPageLabel' => 'Last',
),
'pagerCssClass' => 'pagination',
));
?>
控制器:
public function actionManage() {
$model = new UserProfile('search');
$model->unsetAttributes(); // clear any default values
if (isset($_GET['UserProfile'])) {
$model->attributes = $_GET['UserProfile'];
}
$this->render('manage', array(
'model' => $model,
));
}
这是我的搜索方法:
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('first_name', $this->first_name, true);
$criteria->compare('middle_name', $this->middle_name, true);
$criteria->compare('last_name', $this->last_name, true);
$criteria->with = array('user');
$criteria->join = 'LEFT JOIN AuthAssignment ON AuthAssignment.userid=user_id';
if (isset($_GET['employee'])):
$criteria->addCondition("AuthAssignment.itemname <> 'Customer'");
$criteria->addCondition("user.is_active='$status'");
else:
$criteria->addCondition("AuthAssignment.itemname = 'Customer'");
$criteria->addCondition("user.is_active='$status'");
endif;
//Rights::getAssignedRoles(Yii::app()->session['user_id']);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 10,
),
));
}
在这里,我希望$status
变量值是动态的,因为下拉字段更改为活动或非活动状态。
当更改下拉选项时,显示以下错误:
TypeError: settings is undefined
$grid.addClass(settings.loadingClass);
我是Yii的新手,需要帮助。
由于
答案 0 :(得分:2)
首先在个人资料模型中声明属性user_status
喜欢
public $user_status;
然后在配置文件模型的搜索方法
$criteria->with = array( 'user' );
$criteria->compare( 'user.is_active', $this->user_status, true );
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'user_status'=>array(
'asc'=>'user.is_active',
'desc'=>'user.is_active DESC',
),
'*',
),
)
));
然后在列数组
中的配置文件gridview中添加
array(
'name'=>'user_status',
'header' => 'Status',
'value'=>'$data->user->is_active',
'filter' => array( '1'=>"Active",'0'=>"Inactive" )
'type' => 'raw',
),
无需使用chtml下拉列表