2014-10-15 2 views
12

Was ist die richtige Art, eine Reihe für Reihe css Ausdruck zu tun. In Yii 1 war rowCssClass. Ich konnte nicht herausfinden, wie dies mit Yii2 zu erreichen ist. Das hatte ich versucht, war aber nicht sicher, ob ich auf dem richtigen Weg war:Yii2 Gridview Reihe für Reihe css Ausdruck

 'rowOptions' => function($model, $key, $index, $grid){ 
     if($data->option->correct_answer == 1){ 

      return ['class' => 'danger']; 
     } 
    }, 

Ich bin nicht sicher, wo die Parameter für die Funktion von erhalten, wenn zwar mit dem Datenprovider zu tun.

+0

übrigens ist dies ein ausgezeichnetes Beispiel, wie ein Framework Ihre Arbeit blockieren kann. Dies manuell zu tun würde 5 Sekunden dauern, um herauszufinden, wie dies zu tun ist (auf eine schrecklich komplizierte Art und Weise mit Yii) hat mich zwei Stunden gekostet. Nur zu sagen :( – Sliq

+1

@Sliq Könnte klarer sein würde ich zustimmen. Ich erinnere mich, dass ich den ursprünglichen Fehler obwohl gemacht habe. Hoffentlich wird diese Antwort/Frage Menschen Zeit sparen. – Jonnny

Antwort

24

Verwenden Sie $ model anstelle von $ data.

In meiner Variante:

'rowOptions' => function ($model, $index, $widget, $grid){ 
     return ['style'=>'color:'.$model->status->color.'; background-color:'.$model->status->background_color.';']; 
    }, 

In Ihrem Fall:

'rowOptions' => function ($model, $index, $widget, $grid){ 

     if($model->option->correct_answer == 1){ 
     return ['class' => 'danger']; 
     }else{ 
     return []; 
     } 
    }, 
+0

@ useruser1852788 Ich scheine array_merge() zu bekommen: Argument # 2 ist kein Array. – Jonnny

+0

sieht aus wie Sie Array zurückgeben sollten, so habe ich die Antwort bearbeiten - sonst Teil der "if" -Anweisung mit leerem Array als Rückgabewert hinzugefügt. – user1852788

+0

Das gleiche, Stapel ist das 'foreach ($ this-> Spalten als $ i => $ Spalte) { if (is_string ($ Spalte)) { $ column = $ this-> createDataColumn ($ Spalte); } else { $ column = Yii :: create (array_merge ([ 'class' => $ this-> dataColumnClass?: DataColumn :: className(), 'Gitter' => $ this, ], $ Spalte)); } ' – Jonnny

0

Sie können auch diese versuchen

Add Klassennamen für die Reihe

'rowOptions' => ['class'=>'rowData'], 

dann manipulieren es durch css

<?php 

$css = <<< CSS 
//example 
.rowData:hover{ 

} 
CSS; 
$this->registerCss($css); 
?>