Yii Framework Forum: Cgridview Custom Filed - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Cgridview Custom Filed

#1 User is offline   Kourosh Sharifi 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 20-October 12

Posted 30 December 2012 - 02:36 AM


سلام
یه ستون اضافه کرد که نه توی جدول باشه و نه توی مدل ؟ CGridView چطور می شه به

1

#2 User is offline   Hesam K 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 128
  • Joined: 14-August 11

Posted 30 December 2012 - 03:18 AM


سلام
برای این کار باید اول یک پراپرتی دلخواه به کلاس مدل تون اضافه کنید

class YourClass extends CActiveRecord
{
	public $customField;
..
..

}


و بعد کافیه در gridView مثل یک ستون عادی باهاش برخورد کنید و مقادیر مناسب رو بهش نسبت بدید:

$this->widget( 'zii.widgets.grid.CGridView', 
		array(
			'dataProvider'=>$model->search(),
			'filter'=>$model,
			'columns' => array(
			          'title',
				  'description',  
                                  ..
				  array(
				  	'name' => 'customField',
				  	'value' => ' "whatever you want" ',
                                        'filter' => false,
				  	),  
                                  ..
			)
		); 

This post has been edited by Hesam Khaki: 30 December 2012 - 03:41 AM

3

#3 User is offline   Kourosh Sharifi 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 20-October 12

Posted 30 December 2012 - 03:25 AM


خوب مشکل من اینه که نمی خوام به پروپرتی سوری تعریف کنم
تعریف کنم image مثلا اگه من بخوام به ستون عکس اضافه کنم باید یه پروپرتی به نام مثلا
و خوب خیلی به نظرم جالب نیست

1

#4 User is offline   Hesam K 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 128
  • Joined: 14-August 11

Posted 30 December 2012 - 03:41 AM


الزاما چیز بدی نیست تعریف یه پروپرتی جدید برای کلاس active record. بعضا پیش میاد که بعضی خصایص لازم نیست در طراحی دیتابیس و ساختار جدول ها دیده شند ولی از نظر منطقی در زمان اجرا حضور دارند، و همونطور که میدونیم ActiveRecord ها فقط فیلدهای دیتابیس رو به عنوان پروپرتی های کلاس در اختیار ما میگذارند، فکر کنم یکی از بهترین روش ها برای حل این جور مسایل، تعریف این ویژگی ها در کلاس مربوط به اون هست
تو خود دموی بلاگ هم برای برخی از کلاس ها پروپرتی های جدید تعریف شده، برای همین فکر میکنم این کار نه با قواعد OOP تعارضی داشته باشه و نه با استانداردهای Yii
اما اگر دیگر دوستان راه بهتر و استاندارد تری سراغ دارند، منم خوشحال میشم یاد بگیرم :)

1

#5 User is offline   Hesam K 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 128
  • Joined: 14-August 11

Posted 30 December 2012 - 04:22 AM


یک راه دیگه هم استفاده از setter/getter ها هست که در Yii به خوبی پیاده سازی شده اند، با این کار دیگه نیازی به تعریف مستقیم پروپرتی جدید هم نیست
من برای همون مورد image که گفتید یک کد به عنوان نمونه قرار میدم:

in your Class:
class YourClass extends CActiveRecord
{
	..
	.. 

	public function getImage()
	{
		return CHtml::image('path/to/image', 'alt', array("width" => "70", "height" => "90"));
	}

	..
	..
}


in view:

$this->widget( 'zii.widgets.grid.CGridView', 
                array(
                        'dataProvider'=>$model->search(),
                        'filter'=>$model,
                        'columns' => array(
                                  'title',
                                  'description',  
                                  ..
                                  array(
                                        'name' => 'image',
                                        'type' => 'raw',
                                        'filter' => false,
                                        ),  
                                  ..
                        )
                ); 



این روش با اصول MVC هم قرابت بیشتری داره و منطق پیدا کردن و ایجاد عکس رو از view به model منتقل میکنه


3

#6 User is offline   Reza m 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 148
  • Joined: 07-March 12

Posted 30 December 2012 - 05:18 AM


برای اینکه attribute ایجاد نکنی میتونی تو تعریف ستون gridview به جای name از header استفاده کنی

'header' => 'image',

2

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users