Yii Framework Forum: مشکل در فیلتر Grid View - Yii Framework Forum

Jump to content

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

مشکل در فیلتر Grid View

#1 User is offline   fazel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 30-April 13

Posted 17 March 2014 - 03:54 PM

با سلام خدمت همه اساتید
من یک گراید ویو دارم که از دوتا جدول اصلاعات میگیره
مثلا نام و نام خانوادگی از جدول یوزر
و نمره ها از جدول نمره
برای نمایش مشکلی ندارم
اما هنگام فیلتر مشکل داره و فیلتر نمیشه.
بی زحمت کسی در این رابطه آموزش یا مثالهایی داره لطف کنه و من رو راهنمایی کنید

0

#2 User is offline   Hesam K 

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

Posted 18 March 2014 - 05:59 AM


سلام
شما باید تابع search مدل یوزر رو تغییر بدید

من یک مثال میزنم که در اون لیست خبرها در گریدویو نشون داده میشه و دسته خبرها هم از یک جدول دیگه خونده میشه و تو جدول نشون داده میشه
قبل از هرچیز relation بین خبر و دسته خبر رو ایجاد میکنیم

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		return array(
			'category' => array(self::BELONGS_TO, 'Category', 'category_id'),
		);
	}


بعدش توی گریدویو به این صورت عنوان دسته خبر رو در سطر خبر نمایش میدیم. البته فکر کنم تا این مرحله رو انجام دادید
باید کد زیر رو به عنوان یکی از سطر های گریدویو به array سطر ها اضافه کنید

array(
	'name' => 'category_id',
	'value' => '$data->category->title',
	),


تا الان عنوان دسته به صورت صحیح نمایش داده میشه اما سرچ به درستی کار نمیکنه
کار اصلی در تابع search مدل خبر انجام میگیره:

	public function search()
	{
		$criteria=new CDbCriteria();
		$criteria->with = array('category');
		$criteria->compare('t.title', $this->title, true);
		$criteria->compare('category.title',$this->category_id);
		
		return new CActiveDataProvider(get_class($this), array(
			'criteria'=>$criteria,
		));
	}


اینجوری باید کار کنه
حالا خودتون این مثال رو تبدیل کنید به مورد کاربران و نمره که سوال شماست ;)

2

#3 User is offline   fazel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 30-April 13

Posted 20 March 2014 - 12:57 AM

من انجام دادم متاسفانه نمیشه
public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
                    'user'=>array(self::BELONGS_TO,'Users','code_personeli')
		);
	}



بعد تابع
public function allHokm()
        {
            $users= $this->userData();
            $criteria=new CDbCriteria;
			$criteria->compare('noe_hokm',$this->noe_hokm,true);
			$criteria->compare('tarikh_ejra',$this->tarikh_ejra);
			$criteria->compare('tarikh_sodoor',$this->tarikh_sodoor);
			$criteria->compare('shomare_hokm',$this->shomare_hokm);
            if(Yii::app()->user->getState('level')==100)
            {
                $criteria->compare('code_personeli',$this->code_personeli);
            }
            else
            {
                $criteria->condition='user.code_personeli=:P';
                $criteria->params=array(':P'=> $users->code_personeli);
            }
            $criteria->with=array('user');//*/
            $criteria->compare('user.name',$this->code_personeli,true);
			$criteria->compare('user.name_khanevadegi',$this->code_personeli,true);
			$criteria->compare('user.name_pedar',$this->code_personeli,true);
		
            //return Hokm::model()->findAll('code_personeli=:id',array(':id'=>$users->code_personeli));
            return new CActiveDataProvider(get_class($this), array(
			'criteria'=>$criteria,
						'sort'=>array(
							'defaultOrder'=>'t.tarikh_ejra DESC',
						),
                        'pagination'=>array(
                            'pageSize'=>20,),
		)); //*/
        }


و در نهایت قسمت ویو
$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'hokm-grid',
	'dataProvider'=>$model->allHokm(),
	'filter'=>$model,
        'blankDisplay'=>'مشاهده حکم',
     
	'columns'=>array(
		   array(
                        'type'=>'raw',
                        'value'=>'CHtml::link(($row+1), array("#", "id"=>$data->id));',
                        'header'=>'ردیف',
                        ),
		'code_personeli',
		//'user.name',
		array(
        'name' => 'code_personeli',
        'value' => '$data->user->name',
		'header'=>'نام',
        ),
		
		//'user.name_khanevadagi',
		array(
        'name' => 'code_personeli',
        'value' => '$data->user->name_khanevadagi',
		'header'=>'نام خانوادگی',
        ),
		
		//'user.name_pedar',
		array(
        'name' => 'code_personeli',
        'value' => '$data->user->name_pedar',
		'header'=>'نام پدر',
        ),
		
        'noe_hokm',
        'tarikh_ejra',
		'tarikh_sodoor',
		'shomare_hokm',


                   array(
                            'class'=>'CButtonColumn',
                            'template'=>'{view}',
                            'viewButtonUrl'=> //'CHtml::link("", array("/hokm/view", "id"=>$data->id), array("target"=>"_blank"))',
                                            'Yii::app()->createUrl("/hokm/view", array("id" => $data["id"]))',
                             'viewButtonOptions'=>array("target"=>"_blank"),
                            //'deleteButtonUrl'=>'Yii::app()->createUrl("/hokm/delete", array("id" =>  $data["id"]))',
                            //'updateButtonUrl'=>'Yii::app()->createUrl("/hokm/update", array("id" =>  $data["id"]))',
                          ),
	),
)); ?>



نمایش داده میشه به خوبی هم نشون میده
اما فیلترش کار نمیکنه
هرچی میزنم هیچی زی فیلتر نمیکنه
لطفا راهنمایی کنید ممنون
0

#4 User is offline   Hesam K 

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

Posted 20 March 2014 - 03:01 AM


مشکل اینجاست شما اومدی برای نام و نام خانوادگی و نام پدر از code personeli به عنوان name استفاده کردی
باید سه تا attribute مختلف ست بشه تا کار کنه

                //'user.name',
                array(
        'name' => 'user_name',
        'value' => '$data->user->name',
                'header'=>'نام',
        ),
                
                //'user.name_khanevadagi',
                array(
        'name' => 'user_lastname',
        'value' => '$data->user->name_khanevadagi',
                'header'=>'نام خانوادگی',
        ),
                
                //'user.name_pedar',
                array(
        'name' => 'user_fathername',
        'value' => '$data->user->name_pedar',
                'header'=>'نام پدر',
        ),

            $criteria->with=array('user');//*/
            $criteria->compare('user.name',$this->user_name,true);
            $criteria->compare('user.name_khanevadegi',$this->user_lastname,true);
            $criteria->compare('user.name_pedar',$this->user_fathername,true);


فقط باید اون سه تا attrbute ک من نوشتم رو توی مدل تون تعریف کنید. کافیه بعد از تعریف کلاس بنویسید public $user_name و ...
اگه بازم مشکل داشت یا ارور داد بگید

1

#5 User is offline   fazel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 30-April 13

Posted 20 March 2014 - 05:56 AM

دوست عزیز دستتون درد نکنه
انجام دادم همه ی فیلتر ها به درستی کار کرد ولی فقط سه فیلتر
نام و نام خانوادگی و نام پدر کار نمیکنه
!!!!!!!!!!!!!!!

در ضمن sort برای همه موارد به خوبی کار میکنه به جز این سه مورد
sort: زمانی که روی هدر کلیک میکنیم منظورم هستش


$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'hokm-grid',
	'dataProvider'=>$model->allHokm(),
	'filter'=>$model,
        'blankDisplay'=>'مشاهده حکم',
     
	'columns'=>array(
		   array(
                        'type'=>'raw',
                        'value'=>'CHtml::link(($row+1), array("#", "id"=>$data->id));',
                        'header'=>'ردیف',
                        ),
		'code_personeli',
//'user.name',
		array(
        'name' => 'user_name',
        'value' => '$data->user->name',
		'header'=>'نام',
        ),
		
		//'user.name_khanevadagi',
		array(
        'name' => 'user_lastname',
        'value' => '$data->user->name_khanevadagi',
		'header'=>'نام خانوادگی',
        ),
		
		//'user.name_pedar',
		array(
        'name' => 'user_fathername',
        'value' => '$data->user->name_pedar',
		'header'=>'نام پدر',
        ),



 public function allHokm()
        {
            $users= $this->userData();
            $criteria=new CDbCriteria;
			$criteria->compare('t.noe_hokm',$this->noe_hokm,true);
			$criteria->compare('t.tarikh_ejra',$this->tarikh_ejra);
			$criteria->compare('t.tarikh_sodoor',$this->tarikh_sodoor);
			$criteria->compare('t.shomare_hokm',$this->shomare_hokm);
            if(Yii::app()->user->getState('level')==100)
            {
                $criteria->compare('t.code_personeli',$this->code_personeli);
            }
            else
            {
                $criteria->condition='t.code_personeli=:P';
                $criteria->params=array(':P'=> $users->code_personeli);
            }
            $criteria->with=array('user');
            $criteria->compare('user.name',$this->user_name,true);
			$criteria->compare('user.name_khanevadagi',$this->user_lastname,true);
			$criteria->compare('user.name_pedar',$this->user_fathername,true);
		
            //return Hokm::model()->findAll('code_personeli=:id',array(':id'=>$users->code_personeli));
            return new CActiveDataProvider(get_class($this), array(
			'criteria'=>$criteria,
						'sort'=>array(
							'defaultOrder'=>'t.tarikh_ejra DESC',
						),
                        'pagination'=>array(
                            'pageSize'=>20,),
		)); //*/
        }


class Hokm extends CActiveRecord
{
	public $user_name;
	public $user_lastname;
	public $user_fathername;

0

#6 User is offline   fazel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 30-April 13

Posted 25 March 2014 - 03:32 AM

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


public function actionIndex()
	{

            $model= new Hokm('allHokm');
			$model->unsetAttributes();  // clear any default values
			if(isset($_GET['Hokm']))
                        {
                            //print_r($_GET['Hokm']);
                            $model->attributes=$_GET['Hokm'];
                            $model->user_name=$_GET['Hokm']['user_name'];
                            $model->user_lastname=$_GET['Hokm']['user_lastname'];
                            $model->user_fathername=$_GET['Hokm']['user_fathername'];
                        }
            $this->render('index',array(
			'model'=>$model,));

             
	}


0

#7 User is offline   fazel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 30-April 13

Posted 25 March 2014 - 03:39 AM


حالا فقط یه مشکل هستش اون هم قسمت sort روی تمام گزینه ها اگه قسمت هدرش کلیک کنم sort میشه ولی روی سه قسمت نام - نامخانوادگی- نام پدر غیر فعال هستش و سورت نمیشه
لطفا راهنمایی کنید.
ممنون

0

#8 User is offline   Hesam K 

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

Posted 30 March 2014 - 03:27 AM


آقا میبخشی من به اینترنت دسترسی نداشتم یه مدت
یه چیزی رو یادم رفت بگم، اشکال کار از اون جاست
این ۳ تا attribute که اضافه کردیم رو باید به متد rules کلاس هم اضافه کنیم. باید در سناریوی search به صورت safe تعریف شده باشند
این کارو ک انجام بدید دیگه به اون سه خطی که در کنترلر اضافه کردید هم نیازی نیست

امیدوارم دیگه همه چیش کار کنه :)

1

#9 User is offline   fazel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 30-April 13

Posted 30 March 2014 - 10:23 PM

خواهش میکنمدست شما هم درد نکنه عالی بود جست و جو به خوبی کار کرداما باز همون مشکل sort وجود داره و نمیشه انجام دادیعنی توی قسمت این سه تانمیشه کلیلک کرد که سورت بشن

0

#10 User is offline   Saeed Gholizadeh 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 81
  • Joined: 02-December 13

Posted 03 May 2014 - 03:08 PM

View Postfazel, on 30 March 2014 - 10:23 PM, said:

خواهش میکنمدست شما هم درد نکنه عالی بود جست و جو به خوبی کار کرداما باز همون مشکل sort وجود داره و نمیشه انجام دادیعنی توی قسمت این سه تانمیشه کلیلک کرد که سورت بشن




ببین اصولا وقتی داری از join های این شکلی استفاده می کنی که مثلا userid رو تو جدولت داری و می خوایی اسمش رو نشون بدی
پیشفرض خود yii کاری به value شما نداره میره بر اساس مثلا همون userid میچینه
مگر اینکه خودت بهش بگی رو این ستون برو این sort رو انجام بده که می گم


return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
		    'sort' => array(
			    'attributes'=>array(
				    'user_lastname'=>array(
					    'asc'=>'user.name_khanevadagi ASC',
					    'desc'=>'user.name_khanevadagi DESC',
				    ),
				    '*',
			    ),
			    'defaultOrder' => 't.tarikh_ejra DESC',
		    ),
        ));

--------------------------------
Mr. Saeed Gholizadeh
Senior PHP Developer
BS of IT

LinkedIn Profile
0

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