如何使用activeDropDownList yii2更改网格视图过滤器?

时间:2017-08-01 06:25:07

标签: php yii yii2 frameworks

我想在yii2中更改gridview的过滤器。我想使用下拉列表和复选框来添加过滤器而不是过滤器文本框。

1)取消定义笔记本电脑型号错误 2)在我的代码下拉列表工作,但显示没有文本的空列表。(我想我错了一些)。帮助我解决它。

这是我的代码



   <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            //'id',
			[
			
			
                'attribute'=>'id',
				'value'=>'id',
                //'filter'=>array("1"=>"open","2"=>"in progress","3"=>"closed")
				 'filter' => Html::activeDropDownList($searchModel, 'id', ArrayHelper::map(Laptop::find()->asArray()->all(), 'id', 'laptop'),['class'=>'form-control','prompt' => 'Select Category']),
			],
            'network',
            'technology',
            'sup_id',
            'speaker',
			'size',
			[
            'class' => 'yii\grid\ActionColumn',
	
            'template' => '{myButton}' , // the default buttons + your custom button
            'buttons' => [
                'myButton' => function($url, $model, $key) {     // render your custom button
                    return Html::a('تایید');
                }
            ]
			],
			
			  // [
           // 'class' => DataColumn::className(), // this line is optional
           /* 'attribute' => 'name',
            'format' => 'text',
            'label' => 'Name',
        ],*/
            // 'optical_drive',
             //'webcam',
            // 'touchpad',
            // 'card_reader',
            // 'ethernet',
            // 'vga',
            // 'hdmi',
            // 'usb3_ports',
            // 'usb2_ports',
            // 'usb_type_c',
            // 'thunderbolt_ports',
            // 'serial_ports',

            ['class' => 'yii\grid\ActionColumn'],
        ],
		
				'layout' => '{summary}{items}{pager}',
		
		
		
    ]); ?>
&#13;
&#13;
&#13;

在下面的部分我应该改变什么来解决这个问题?

&#13;
&#13;
<?

	[
			
			
                'attribute'=>'id',
				'value'=>'id',
                //'filter'=>array("1"=>"open","2"=>"in progress","3"=>"closed")
				 'filter' => Html::activeDropDownList($searchModel, 'id', ArrayHelper::map(Laptop::find()->asArray()->all(), 'id', 'laptop'),['class'=>'form-control','prompt' => 'Select Category']),
			],

?>
&#13;
&#13;
&#13;

谢谢:))

2 个答案:

答案 0 :(得分:1)

尝试在视图中添加realted use子句

例如,如果您拥有共同\ models中的所有模型

use common\models\LapTop;

use your_app_name\models\LapTop;

为your_app_name

指定正确的值

或基本模板尝试

use app\models\LapTop;

和过滤器尝试仅使用

'filter'=>ArrayHelper::map(LapTop::find()->asArray()->all(), 'id', 'laptop'),

答案 1 :(得分:1)

如果你使用PhpStorm你可以删除这段代码“Laptop :: find()” 在你输入这个地方后,单词“Laptop” - PhpStorm添加下拉列表 - 从这个下拉列表中你应该选择“你的笔记本电脑类的位置”,

之后 - 在代码中你的单词“Laptop”将被类似的东西所取代 - “common \ models \ LapTop :: find()”

示例:https://i.ytimg.com/vi/EVvBKDB1NNQ/maxresdefault.jpg