CGridView

[font="Tahoma"][right]سلام

من میخوام از این ویجت به عنوان یک

helper

در برنامم استفاده کنم که هر جا خواستم بتونم ازش به راحتی استفاده کنم ، بدون زدن کدهای تکراری

در فولدر کامپوننت یک فایل ساختم به ساختار زیر :[/right][/font]


class Helpers

{


	public function dataList($tbl_name)

	{

		$dataProvider=new CActiveDataProvider($tbl_name);

		

		$this->widget('zii.widgets.grid.CGridView', array(

			    'dataProvider'=>$dataProvider,

			    'columns'=>array(

				'id',

				'name',

				'ordering',

				'position',

				'published',

					array(

				'class'=>'CButtonColumn',

				'template'=>'{update}',

				'buttons'=>array(

					'update'=>array(

							'url'=>'$this->grid->controller->createUrl("default/editForm", array("id"=>$data->id))',

							'click'=>'function(){$("#cru-frame").attr("src",$(this).attr("href")); $("#cru-dialog").dialog("open");  return false;}',

								'visible'=>'($data->id===null)?false:true;'

							),

					

		 

				),

			),

		)

		)

		);

	}

}

[font="Tahoma"][right]بعد اگر بخوام تو هر ویو از این استفاده کنم به این شکل استفاده میکنم :[/right][/font]


Helpers::dataList('Users'); // مدل یوزرمو با تمام دیتا ها و .. نمایش میده

[font="Tahoma"][right]

مشکل اینجاس که در کلاس

Helpers

و اون تابعی که نوشتم یک آرایه وجود داره که نام فیلد اون مدلی که قرار نمایش داده بشه رو باید بنویسیم

که مشکل اینجاست که احتمال یکی نبودن نام فیلد های یک جدول خیلی خیلی زیاد است.

راه حلی برای این کار میخواستم

ممنون یشم راهنمایی کنید.[/right][/font]

[font="Tahoma"]

[rtl]

شما این helper رو برای جدولی نوشتید که فیلدهاش توی helper تعریف شده آیا می خواید این helper رو عمومیت ببخشید و برای هر جدول دیگه ای از همین استفاده کنید با مشکل چیز دیگه ای هست؟

[/rtl]

[/font]

مرسی

من میخوام این helper رو برای تمامیه مدل هام استفاده کنم و عمومیش کنم

و الان هم در این helper اسم مدل رو برای نمایش دادن به عنوان پارامتر دریافت مینکه اما باید فیلدهایی هم که در هر مدلی برای نمایش لازم دارم به این helper بدم

و مشکل دادن همین فلید ها به این بخش از helper است :


$this->widget('zii.widgets.grid.CGridView', array(

                            'dataProvider'=>$dataProvider,

                            [b]'columns'=>array(

                                'id',

                                'name',

                                'ordering',

                                'position',

                                'published',[/b]



[rtl]خوب میتونی column ها رو به صورت پارامتر دوم بفرستی به متدت[/rtl]

[rtl]ولی من ترجیح میدم تز همون widget استفاده کنم چون config هایی بیشتری رو داره که میتنونی گریدت رو کاستومایز کنی[/rtl]




class Helpers

{


        public function dataList($tbl_name, $columns=array())

        {

                $dataProvider=new CActiveDataProvider($tbl_name);

                

                $this->widget('zii.widgets.grid.CGridView', array(

                            'dataProvider'	=> $dataProvider,

                            'columns'		=> $columns

                            

                );            

        }

}