确定yii中的模型属性是否为空

时间:2014-01-15 22:12:57

标签: php yii cgridview

            'buttons'=>array(
            'catalog'=>array(
                'label'=>'Catalog tehnic',
                'imageUrl' => strlen($data->catalog) > 1 ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png",
                'url'=>'$data->catalog',
            ),

如果设置了值,我试图为cgridview buttoncollumn中的按钮设置不同的图标。 我已经尝试了不同的东西,因为所有相同的结果。

                'imageUrl' => strlen($data->catalog) > 1 ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png",
                'imageUrl' => isset($data->catalog)  ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png",
                'imageUrl' => !empty($data->catalog) ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png",
                'imageUrl' => $data->catalog == '' ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png",
                'imageUrl' => !$data->catalog ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png",

它非常令人沮丧,所以请帮助我。 thx提前

3 个答案:

答案 0 :(得分:1)

我认为你可以这样做:

   'imageUrl' => '!empty($data->catalog) ?  Yii::app()->baseUrl . "/images/pdf.jpg" : Yii::app()->baseUrl . "/images/bw.png"'

或者你可以这样做:

   'imageUrl' => function($data){
          $url = '';
          if(strlen($data->catalog > 1 ){
             // do stuff
             $url = $data->catalog; // assign url here
          elseif(){
              // implement your logcic here
          }
          elseif{

          }
          return $url;
   }

答案 1 :(得分:1)

CButtonColumn类渲染按钮默认生成zii.widgets.grid.CGridView

阅读课程代码,仅urlvisible属性can be evaluated as PHP expression

此类中的

imageUrl属性被处理为纯字符串(不是PHP表达式)。

我做了这个实验。建议非常受欢迎。我希望它对你有所帮助:

protected/components中创建一个新类:例如ExtCButtonColumn.php。该类应继承类CButtonColumn

class ExtCButtonColumn extends CButtonColumn
{
...
}

在类代码中,重写渲染方法,保留原始概念并避免破坏其他CGridViews上的现有或遗留实现:

protected function renderButton($id,$button,$row,$data)
{
    if (isset($button['visible']) && !$this->evaluateExpression($button['visible'],array('row'=>$row,'data'=>$data)))
            return;
        $label=isset($button['label']) ? $button['label'] : $id;
        $url=isset($button['url']) ? $this->evaluateExpression($button['url'],array('data'=>$data,'row'=>$row)) : '#';
        $options=isset($button['options']) ? $button['options'] : array();
        if(!isset($options['title']))
           $options['title']=$label;

            $imageUrl = isset($button['imageUrl']) ? $this->evaluateExpression($button['imageUrl'],array('data'=>$data,'row'=>$row)) : '';
            if ( $imageUrl == '')
               $imageUrl = isset($button['imageUrl']) ? $button['imageUrl'] : '#';
        if( $imageUrl != '#' )
           echo CHtml::link(CHtml::image($imageUrl,$label),$url,$options);
        else
           echo CHtml::link($label,$url,$options);
    }

最后在您的视图代码中,在小部件定义($this->widget数组)中,在columns数组中,添加一个类似的按钮定义(这是一个带有自定义按钮的示例)。现在可以在所有imageUrl属性中使用PHP表达式,如urlvisible属性:

array(
    'class'    => 'ExtCButtonColumn',
    'template' => '{process}{view}{update}{close}{back}',
    'buttons'  => array
     (
        'process' => array
        (
           'label'    => 'Procesar',
           'imageUrl' => 'strlen($data->catalog) > 1  ? Yii::app()->request->baseUrl . "/images/icons/myicon1.png" : Yii::app()->request->baseUrl . "/images/icons/myicon2.png"',   
     ...

答案 2 :(得分:0)

我想你现在应该试试这个

    'imageUrl' => 'strlen($data->catalog) > 1 ?  Yii::app()->baseUrl . "/images/pdf.jpg" :
 Yii::app()->baseUrl . "/images/bw.png"',

将代码包含在引号内,然后它应该适合你