请问,如何根据字段值来显示不同的自定义按钮呢?

zii.widgets.grid.CGridView的widget里,两个自定义按钮,显示在两列里:




                        array(

                        		'header'=>'禁 用',

                        		'class'=>'CButtonColumn',

                        		'template'=>'{suspend}',

                        		'buttons' => array(

                        			'suspend'=>array(

                        				'imageUrl' => '$data->suspend==0 ?"'.Yii::app()->request->baseUrl.'/images/admin-ui/suspend.jpg":"'.Yii::app()->request->baseUrl.'/images/admin-ui/enabled.jpg"',

                         				 'url' => 'Yii::app()->createURL("p/operator/suspend",array("id"=>$data->id))' 

                        			),

                        		),

                        ),

                        array(

                        		'header'=>'启 用',

                        		'class'=>'CButtonColumn',

                        		'template'=>'{suspend}',

                        		'buttons' => array(

                        			'suspend'=>array(

                        				'imageUrl' => Yii::app()->request->baseUrl.'/images/admin-ui/enabled.jpg',

                         				 'url' => 'Yii::app()->createURL("p/operator/enabled",array("id"=>$data->id))' 

                        			),

                        		),

                        ),



启用和禁用都显示,感觉很不好,以前做过一个’value’=>’$data->active==0 ? “未验证” : “”’,来显示是否验证的,但是按钮上加不了三目运算符,各位前辈指点下,怎么才能根据字段值来显示按钮呢?

试过把imageUrl加上三目运算符:




'imageUrl' => '$data->suspend==0 ?"'.Yii::app()->request->baseUrl.'/images/admin-ui/suspend.jpg":'.Yii::app()->request->baseUrl.'/images/admin-ui/enabled.jpg',



结果图片挂了,查看源码发现:




<img src="$data-&gt;suspend==0 ?&quot;/admin-main/images/admin-ui/suspend.jpg&quot;:/admin-main/images/admin-ui/enabled.jpg" alt="suspend">



三目运算符也上去了……请问怎么做才能根据字段的值来显示对应按钮呢?

很明显的错误

php 表达示写在单引号里面不会被执行


Yii::app()->request->baseUrl.'/images/admin-ui/'.($data->suspend == 0 ? 'suspend' : 'enabled').'jpg'

这个按钮我是在zii.widgets.grid.CGridView的widget里的(拿blog的user/admin改的=_=|||),$data->suspend不加单引号会报Undefined variable: data,但是加上……判断那里怎么改都是true。

如你前面所讲的

生成后的图片是


<img src="$data-&gt;suspend==0 ?&quot;/admin-main/images/admin-ui/suspend.jpg&quot;:/admin-main/images/admin-ui/enabled.jpg" alt="suspend">

表达示都没执行 判断怎么会是true呢?

之前做过一个这个:




array(

      'header'=>'状 态',

      'value'=>'$data->active==0 ? "未验证" : ""',

      'filter' => false,

),



是可以被执行的,官方例子:




$this->widget('zii.widgets.grid.CGridView', array(

    'dataProvider'=>$dataProvider,

    'columns'=>array(

        'title',          // display the 'title' attribute

        'category.name',  // display the 'name' attribute of the 'category' relation

        'content:html',   // display the 'content' attribute as purified HTML

        array(            // display 'create_time' using an expression

            'name'=>'create_time',

            'value'=>'date("M j, Y", $data->create_time)',

        ),

        array(            // display 'author.username' using an expression

            'name'=>'authorName',

            'value'=>'$data->author->username',

        ),

        array(            // display a column with "view", "update" and "delete" buttons

            'class'=>'CButtonColumn',

        ),

    ),

));



其中’value’=>‘date(“M j, Y”, $data->create_time)’,执行了php的date()。

我把代码改写成下面这样,visible的判断始终为true,所以不管值是0或者1,都显示第一个按钮




array(

      'header'=>'禁 用',

      'class'=>'CButtonColumn',

      'template'=>'{suspend}{enabled}',

      'buttons' => array(

               'suspend'=>array(

                        'imageUrl' => Yii::app()->request->baseUrl.'/images/admin-ui/suspend.jpg',

                        'url' => 'Yii::app()->createURL("p/operator/suspend",array("id"=>$data->id))',

                        'visible' =>'$data->suspend'==0?NULL:'', 

                ),

               'enabled'=>array(

                        'imageUrl' => Yii::app()->request->baseUrl.'/images/admin-ui/enabled.jpg',

                        'url' => 'Yii::app()->createURL("p/operator/enabled",array("id"=>$data->id))',

                        'visible' =>'$data->suspend'==1?NULL:'', 

                        ),

       ),

),



改成这样试试




'visible' =>'$data->suspend==0', 




'visible' =>'$data->suspend==1', 

成功了~~谢谢嗷~~

还想问一下,直接给visible赋true或者false会报错(我都是用NULL和’’),但是用你说的这个方法却不会,为什么呢?

因为这里的 visible对应的值是一个 php expression