Как вставить картинку в 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’),.

Документацию читал, не смог решить только эти проблемы.

  1. не знаю

  2. точно не знаю, но вроде есть параметр, который включает сортировку

  3. также по связям в БД, только выводишь, $data->связь-> связной

  1. взаимное расположение пейджера и таблицы задается через CGridView::template

  2. сортировка конфигурируется в CActiveDataProvider::sort, конкретно Вам нужно задать CSort:defaultOrder

  3. можно например так:




$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'),

			),


			...

		),

	));