Правильный вывод через CGridView и нужные данные из CActiveDataProvider?

Всем привет, нужен совет по этим двум штукам.

1. CGridView.

Мне нужно в таблице, которую он формирует, сделать не одну строку а 2, так как данных много, пробовал разные извращения с js и Html остановился на таком варианте.
array(
            'headerHtmlOptions' => array(
                'style' => 'display: none'
            ),
            'filterHtmlOptions' => array(
                'style' => 'display: none'
            ),
            'htmlOptions' => array(
                'style' => 'display: none'
            ),
            'value' => array($this, 'gridPropertyData'),
),

в контроллере сделал метод,
public function gridPropertyData($data, $row){
        return $this->renderPartial("//common/property_info", array("data" => $data), false);
}


который генерит нужный мне html, и во вьюхе в самом начале закрываю открытый тр и тд:

</td></tr><tr>

а далее пишу все что надо. На сколько это изврат и можно ли сделать, более корректно?

2. CActiveDataProvider.

Мне нужно чтобы поиск был по значению связанной таблицы
я предполагал, что надо сделать так, но это не работает.

$criteria->compare('city',$this->_city->name);


Связка естественно есть.
Предполагаю, что надо сделать еще что-то тут:

return new CActiveDataProvider($this, array(
	'criteria'=>$criteria,        
));


Но вот что, без понятия, подскажите хотябы куда копать.
  • Вопрос задан
  • 3560 просмотров
Решения вопроса 1
@LastDragon

1. Только расширив класс CGridView и переопределив метод renderTableRow()

2. См http://www.yiiframework.com/doc/guide/1.1/ru/database.arr


$criteria=new CDbCriteria();
$criteria->with = ['city']; // название отношения, используется как префикс
$criteria->compare('city.name', $this->_city->name);
...

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
justyork
@justyork Автор вопроса

Модель

$criteria->with = ['_city'];
$criteria->compare('_city.name', $this->_city->name);

Грид

array(
    'name'=>'_city.name', 
)

Вопрос: отображается то норм, но как теперь прикрутить поиск, чтобы работал как и остальные на аяксе и сортировку, ведь в th отображается только Name, без ссылок, через header прикручивать в ручную или есть способ?

Ответ написан
Сортировка:
$dataProvider=new CActiveDataProvider('Model', array(
    'Sort'=>array(
        'defaultOrder'=>'t.id DESC',
        'attributes'=>array(
            'CityName'=>array(
                'asc'=>'_city.name',
                'desc'=>'_city.name DESC',
                'label'=>'Город,
                'default'=>'asc',
             ),
            '*',
       ),
            ),


И уже в самом гриде (листе) указываешь это поле в сортировке:
...
        'sortableAttributes'=>array(
            ...
            'CityName',
            ...
        ),
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы