2014-01-15 2 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", 

это очень расстраивает, поэтому мне помогают ребята. ТНХ заранее

+0

попробовать с is_null ($ данных-> атрибут) –

+0

он возвращает все же верно, как йота другие мои попытки. если я выполняю какие-либо проверки в элементе «видимый», все они работают правильно, но в элементе «imageurl» все они возвращают true или false. я очень смущен, и только объяснение, которое я могу найти, это то, что yii не может сделать чек. – Tavi

ответ

1

CButtonColumn класс рендеринга по умолчанию по умолчанию zii.widgets.grid.CGridView.

Код класса только для чтения url и visible Недвижимость 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 выражения, как url и visible свойства:

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

Смежные вопросы