2014-01-15 38 views
1
  '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中的按钮设置不同的图标,如果设置了值或不是。 我已经尝试了不同的事情,如下所有白衣相同的结果。确定模型属性是否为空yii

   '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", 

它是geting非常令人沮丧,所以请帮助我出去的家伙。 THX提前

+0

尝试is_null($数据 - >属性) –

+0

它返回的一切,我丝毫其他企图为真。如果我在“可见”数组元素上执行任何检查,它们都可以正常工作,但在'imageurl'元素中,它们都返回true或false。我很困惑,他们只解释我能找到的是,yii不能在那里做检查。 – Tavi

回答

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"', 
    ... 
+0

是的,这是我测试过的正确方法。 – Tavi

0

我想你应该试试这个现在

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

总结引号内您的代码,那么就应该为你

+0

我觉得人们必须用单引号,双击它! – tinybyte

+0

@tinyByte也许你是对的兄弟,但我从来没有遇到过这样的问题。 –

+0

试过报价,没有工作 – Tavi

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; 
    } 
+0

我已经尝试过空,isset,is_null,strlen,!$ data->属性。没有任何工作,它会在所有实例上返回true或false。亚历杭德罗的方式最适合我需要的方式。在我看到他的答案之前,我实际上已经做到了,但答案给了我更好的视角 – Tavi