2015-06-22 14 views
9

Dies ist das erste Mal, dass ich das Yii2 GridView Widget verwende. Ich habe versucht, die Breite einer Spalte zu setzen, nachdem ich einige Antworten hier auf stackoverflow gelesen habe, aber es wird einfach nicht für mich funktionieren und ich würde es lieben, wenn die Spalten unterschiedliche Breiten hätten (besonders die erste).Yii2 GridView kann die Spaltenbreite nicht setzen

Ich habe versucht, die Breite mit 'contentOptions' direkt für die erste Spalte und auch mit einer externen CSS-Datei für die Spalte Produktname zu setzen.

Kann mir bitte jemand sagen, ob es eine Alternative gibt oder ob ich etwas falsch mache?

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     [ 
      'class' => 'yii\grid\SerialColumn', 
      'contentOptions' => ['style' => 'max-width:20px;'], 
     ], 

     [ 
      'format' => 'raw', 
      'label' => 'Image', 
      'value' => function ($data) { 
       $url = $data->imgSrc; 
       return Html::img($url, ['width' => '40px']); 
      }, 
     ], 

     [ 
      'attribute' => 'name', 
      'format' => 'raw', 
      'label' => 'Product name', 
      'contentOptions' => function ($model, $key, $index, $column) { 
       return ['class' => 'tbl_name']; 
      }, 
     ], 
    ], 
]); ?> 

Antwort

0

Versuchen mit nur Options:

[ 
     'class' => 'yii\grid\SerialColumn', 
     'options' => ['style' => 'max-width:20px;'], 
], 
+0

Dank für die schnelle Antwort danken, aber leider wird dies für mich nicht (ich habe vergessen, ich habe zu erwähnen, versuche es vorher, probier es einfach nochmal aus und ich bekomme das gleiche ergebnis) und ich verstehe wirklich nicht was das problem sein könnte. – user2997695

+0

Es funktionierte für mich. Hast du einen Feuerwahn eingecheckt? Wird die Eigenschaft angewendet? – Chinmay

+0

Ich denke, es ist, ich habe nur die Seitenquelle angesehen, und es schien, als ob die entsprechenden Td-Tags den Stil hinzugefügt wurden. Ich habe auch bemerkt, dass es funktioniert, wenn ich den Header-Teil des Gitters entferne, aber das war nicht das, was ich brauchte, da Sie das Horder zum Sortieren verwenden können. Am Ende, während ich das CSS für die Tabelle prüfte, bemerkte ich Layout-Tabelle: behoben und ich habe gerade eine neue Klasse für die Tabelle hinzugefügt und Layout-Tabelle gesetzt: erben. Ich weiß, es ist ein Workaround, aber es scheint so zu funktionieren, wie ich es brauche. Ich weiß immer noch nicht, warum eine der anderen Lösungen nicht funktionieren wird. Danke für die Hilfe, trotzdem! – user2997695

4

Es hängt davon ab, was Sie erreichen wollen. Aber max-width mit 20 Pixel ist wahrscheinlich nicht das, was Sie eigentlich wollten. Versuchen Sie es mit width:

[ 
    'class' => 'yii\grid\SerialColumn', 
    'contentOptions' => ['style' => 'width:100px;'], // not max-width 
], 
+0

Dies funktioniert leider auch nicht. – user2997695

+0

Okay. Dann erzähle uns bitte, was du erreichen willst und was du gerade bekommst oder siehst. Welche Breite hast du? Haben Sie eine öffentliche URL? – robsch

+0

Ich schaffte schließlich, was ich tun wollte, indem ich einen Workaround benutzte: beim Überprüfen der CSS für die Tabelle, bemerkte ich Layout-Tabelle: behoben und ich habe gerade eine neue Klasse für die Tabelle und legen Sie Layout-Tabelle: erben. Was ich vorher gesehen habe, war, dass alle Spalten die gleiche Breite haben, also wenn ich 2 Spalten sagen würde, 50% Breite für jeden, für 3 Spalten - 33% und mach weiter. – user2997695

6

Wenn Sie setzen Breite wollen für einzelne Spalte können Sie headerOptions verwenden:

[ 
    'attribute' => 'attribute_name', 
    'headerOptions' => ['style' => 'width:20%'], 
], 
3

Dies ist das Ergebnis von white-space CSS-Eigenschaft sein könnte, das wird die Tabelle Zellenbreite beeinflussen je auf Inhalt darin. In meinem Yii2 Projekt hatte ich:

.grid-view td { 
    white-space: nowrap; 
} 

Niemand von den hier angegebenen Ratschlägen war nicht nützlich für mich. Aber das war sehr nützlich:

.grid-view td { 
    white-space:pre-line; // or just 'normal' 
} 
+0

Ohh Mann, du bist Meister! Die einzige Lösung, die das Problem vollständig gelöst hat. – Rev

4

Sie haben es wie folgt festgelegt:

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 
      [ 
       'attribute'=>'title', 
       'contentOptions' => ['style' => 'width:200px; white-space: normal;'], 
      ], 
     ] 
    ] 
); 
?> 

Mit contentOptions Sie Optionen für alle td für die Spalte „Titel“ eingestellt werden. In Site.css ist der Leerraum standardmäßig auf nowrap eingestellt.

Aber wenn Ihr Inhalt länger als 200px zum Beispiel ist, wird die Spalte nach Inhalt erweitert und ignoriert Ihre mit.

0

ich einfache, aber funktionale Lösung ist eine CSS-Einstellung einer max-width für die zu schaffen Säulen. Das Flag !important soll sicherstellen, dass diese Eigenschaft nicht überschrieben wird.

td { 
    max-width: 800px; 
    white-space: normal !important; 
} 

Dann registrieren Sie es einfach in Ihrer Sicht.

$this->registerCssFile('css/tableColumnMaxWidht.css'); 

Wir haben und Beispiel dieser Tabelle in diesem Bild arbeiten here.

1

Erste Add Option wie

GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'options' => [ 'style' => 'table-layout:fixed;' ], 

danach unter Zeilen hinzufügen

[ 
    'attribute' => 'news_description', 
    'contentOptions' => [ 'style' => 'width: 25%;' ], 
], 
Verwandte Themen