diff --git a/src/Column/DataColumn.php b/src/Column/DataColumn.php index 84e1fabad..b1631e59c 100644 --- a/src/Column/DataColumn.php +++ b/src/Column/DataColumn.php @@ -57,6 +57,9 @@ public function __construct( public readonly array|RuleInterface|null $filterValidation = null, bool|callable|null $filterEmpty = null, private readonly bool $visible = true, + public readonly ?string $columnClass = null, + public readonly ?string $headerClass = null, + public readonly ?string $bodyClass = null, ) { $this->filterEmpty = $filterEmpty; } diff --git a/src/Column/DataColumnRenderer.php b/src/Column/DataColumnRenderer.php index 7365e7591..eb79982ee 100644 --- a/src/Column/DataColumnRenderer.php +++ b/src/Column/DataColumnRenderer.php @@ -58,15 +58,21 @@ public function __construct( public function renderColumn(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell { $this->checkColumn($column); - return $cell->addAttributes($column->columnAttributes); + /** @var DataColumn $column This annotation is for IDE only */ + + return $cell + ->addAttributes($column->columnAttributes) + ->addClass($column->columnClass); } public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext $context): Cell { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ $cell = $cell ->addAttributes($column->headerAttributes) + ->addClass($column->headerClass) ->encode(false); if ($column->header === null) { @@ -91,6 +97,7 @@ public function renderHeader(ColumnInterface $column, Cell $cell, HeaderContext public function renderFilter(ColumnInterface $column, Cell $cell, FilterContext $context): ?Cell { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ if ($column->property === null || $column->filter === false) { return null; @@ -127,6 +134,8 @@ public function renderFilter(ColumnInterface $column, Cell $cell, FilterContext public function makeFilter(ColumnInterface $column, MakeFilterContext $context): ?FilterInterface { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ + if ($column->property === null) { return null; } @@ -199,6 +208,7 @@ public function renderBody(ColumnInterface $column, Cell $cell, DataContext $con return $cell ->addAttributes($attributes) + ->addClass($column->bodyClass) ->content($content) ->encode(false); } @@ -206,6 +216,7 @@ public function renderBody(ColumnInterface $column, Cell $cell, DataContext $con public function renderFooter(ColumnInterface $column, Cell $cell, GlobalContext $context): Cell { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ if ($column->footer !== null) { $cell = $cell->content($column->footer); @@ -263,6 +274,7 @@ private function checkColumn(ColumnInterface $column): void public function getOverrideOrderFields(ColumnInterface $column): array { $this->checkColumn($column); + /** @var DataColumn $column This annotation is for IDE only */ if ($column->property === null || $column->field === null diff --git a/tests/Column/DataColumnTest.php b/tests/Column/DataColumnTest.php index 2a5e99dce..3ed78e69b 100644 --- a/tests/Column/DataColumnTest.php +++ b/tests/Column/DataColumnTest.php @@ -5,6 +5,7 @@ namespace Yiisoft\Yii\DataView\Tests\Column; use PHPUnit\Framework\TestCase; +use Yiisoft\Data\Reader\Iterable\IterableDataReader; use Yiisoft\Definitions\Exception\CircularReferenceException; use Yiisoft\Definitions\Exception\InvalidConfigException; use Yiisoft\Definitions\Exception\NotInstantiableException; @@ -494,4 +495,57 @@ public function testValueClosure(): void ->render() ); } + + public function testColumnClasses(): void + { + Assert::equalsWithoutLE( + << + + + + + + + + + + + + + + + + + +
Name
John
Mary
+
Page 1 of 1
+ + HTML, + GridView::widget() + ->columns( + new DataColumn( + 'name', + columnAttributes: [ + 'custom' => 'columnAttributes', + 'class' => 'columnClassAttr', + ], + headerAttributes: [ + 'custom' => 'headerAttributes', + 'class' => 'headerClassAttr', + ], + bodyAttributes: [ + 'custom' => 'bodyAttributes', + 'class' => ['bodyClassAttr'], + ], + columnClass: 'columnClass', + headerClass: 'headerClass', + bodyClass: 'bodyClass' + ), + ) + ->columnGroupEnabled() + ->dataReader(new IterableDataReader($this->data)) + ->render() + ); + } }