Насколько понимаю надо будет писать свое расширение таки CGridView, но все-таки, может кто сталкивался?
Есть такая задача:
CGridView:
Строка титла+сортировка
Категория: BMW (возможность свернуть категорию)
Строка описания, к примеру, 5 полей;
Строка описания;
Строка описания;
Категория: Audi (возможность свернуть категорию)
Строка описания;
Строка описания;
Строка описания;
Т.е. соответственно это что-то похожее на Nested насколько понимаю, но насколько правильно для этого использовать CGridView, да и вообще интересно, насколько корректно использовать этот грид для отображения информации в фронтенде? Или лучше использовать для этого собственное отображение какое-то?
Блин, чем больше работаю с Yii, тем больше он мне нравится…
Решение сырое, наспех написанное, но функцию группировки решает, немного позже добавлю расширение для сворачивания группы, убирание из вывода колонок по которым произвелась группировка, а также расширения массива входных колонок, чтобы можно было группировать по идентификаторам, и подставлять принятые другие значения.
На вход подаем массив колонок по которым необходимо сделать группировку, например: array(‘brand’, ‘mark’);
class VGroupedGridView extends CGridView
{
public $groupColumns = array();
public $currentGroupColumns = false;
public function renderTableRow($row)
{
$data=$this->dataProvider->data[$row];
$currentGroupColumns = "";
foreach($this->groupColumns as $key => $column) {
$currentGroupColumns .= ($key==0) ? $data->{$column} : ", ".$data->{$column};
}
if ( $this->currentGroupColumns === false || $this->currentGroupColumns != $currentGroupColumns)
{
print "<tr><td colspan='".count($this->columns)."'>".$currentGroupColumns."</td></tr>";
$this->currentGroupColumns = $currentGroupColumns;
}
parent::renderTableRow($row);
}
}