Здравствуйте. Подскажите, как можно вставить картинку в CGridView которая будет меняться в зависимости от отправленных данных? То есть я получаю данные, передаю их в компонент и мне в ячейке возвращается картинка. И возможно ли такое вообще?
Здравствуйте. Подскажите, как можно вставить картинку в CGridView которая будет меняться в зависимости от отправленных данных? То есть я получаю данные, передаю их в компонент и мне в ячейке возвращается картинка. И возможно ли такое вообще?
'columns'=>array(
'id',
'banner_name',
array(
'header' => 'img',
'type' => 'raw',
'value' => function($data, $row){
return $data->img != "" ? '<img src="'.$data->img.'">': null;
},
),
));
Спасибо, получилось.
Но что-то не могу понять что за переменные и функция.
Сделал вот так:
array(
'name' => 'status',
'type' => 'raw',
'value' => function ($data){
return Info::status($data->status);
},
),
(В Info::status() передаю число и в зависимости от этого мне возвращается хтмл код для вставки картинки).
Это правильно или нужно что-то изменить (нетбинс выдает что в этом коде ошибка)?
И еще пару вопросв сразу тут задам. Как можно сделать следующее:
Отделить страничную навигацию от таблицы, чтобы перенести ее в нужное мне место?
Сделать сортировку по умолчанию по какому-нибудь столбцу. Сейчас данные сортируются непонятно каким образом, видимо по айди.
Вывести данные из другой таблицы БД которая подключается через ‘with’ => array(‘table2’),.
Документацию читал, не смог решить только эти проблемы.
не знаю
точно не знаю, но вроде есть параметр, который включает сортировку
также по связям в БД, только выводишь, $data->связь-> связной
взаимное расположение пейджера и таблицы задается через CGridView::template
сортировка конфигурируется в CActiveDataProvider::sort, конкретно Вам нужно задать CSort:defaultOrder
можно например так:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
...
'category.name', // display the 'name' attribute of the 'category' relation
...
),
));
спасибо. а можно примеры с кодом сортировки, а то что-то не получается.
и как можно сделать сортировку по столбцам второй таблицы, которая подключена через with? сейчас выводится просто название столбца и если на него нажать, то данные не сортируются.
Пример с сортирокой и фильтом по полю из основной модели (Sample, сорт по id) и связанной модели (Products).
Фрагмент класса модели:
class Sample extends CActiveRecord {
...
public $product_name;//for filtering
...
public function rules() {
return array(
...
array('id, product_name, ...', 'safe', 'on'=>'search'),
);
}
public function relations() {
return array(
...
'product' => array(self::BELONGS_TO, 'Products', 'productid'),
);
}
...
public function search() {
$criteria=new CDbCriteria;
$criteria->compare('t.id', $this->id);
$criteria->compare('t.productid', $this->product_name);
...
$criteria->with = array('product');
return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'id',
'product_name'=>array(
'asc'=>'lower(product.name)',
'desc'=>'lower(product.name) DESC',
),
...
),
'defaultOrder'=>array('id'=>true),
),
));
}
...
}
Фрагмент файла вюхи:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array (
'name'=>'id',
'filter'=>CHtml::activeTextField($model, 'id', array('size'=>5)),
),
array(
'header'=>'Product',
'name'=>'product_name',
'value'=>'$data->product->name',
'type'=>'raw',
'filter'=>CHtml::listData(Products::model()->findAll(), 'id', 'name'),
),
...
),
));