Yii Framework Forum: Cgridview Поиск - Yii Framework Forum

Jump to content

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

Cgridview Поиск Не работает поиск Rate Topic: -----

#1 User is offline   Traveller_ 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 20
  • Joined: 22-March 13

Posted 19 April 2013 - 11:41 AM

Есть вьюшка на CGridView
<?php
	echo Chtml::form();
	echo Chtml::submitButton(Yii::t("main", "Show"), array('name'=>'approve'));
	echo Chtml::submitButton(Yii::t("main", "Hide"), array('name'=>'disapprove'));
?>
<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'comment-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		array(
			'class'=>'CCheckBoxColumn',
			'id'=>'commentId',
		),
		'id'=>array(
			'name'=>'id',
			'headerHtmlOptions'=>array('width' => 20),
		),
		'status'=>array(
			'name'=>'status',
			'value'=>'($data->status==0)?Yii::t("main", "visible"):Yii::t("main", "blocked")',
			'filter'=>array(1=>Yii::t("main", "blocked"),0=>Yii::t("main", "visible")),
		),
		'content'=>array(
			'name'=>'content',
			'filter'=>false,
			'headerHtmlOptions'=>array('width' => 250),
		),
		'event_id'=>array(
			'name'=>'event_id',
			'value'=>'$data->event->title',
			'filter'=>Page::allEvents(),
		),
		'created'=>array(
			'name'=>'created',
			'filter'=>false,
		),
		'user_id'=>array(
			'name'=>'user_id',
			'value'=>'($data->user_id)?$data->user->username:""',
			'filter'=>User::allUsers(),
		),
		'guest',
		
		array(
			'class'=>'CButtonColumn',
			'updateButtonOptions'=>array('style'=>'display:none'),
		),
	),
)); ?>
<?php
	echo Chtml::endForm();
?>



Модель:

public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('content, guest', 'required', 'on'=>'guest'),
			array('content', 'required'),
			array('event_id, created, user_id', 'numerical', 'integerOnly'=>true),
			array('guest', 'length', 'max'=>255),
			array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(), 'on'=>'guest'),
			
			
			array('id, status, content, event_id, created, user_id, guest', 'safe', 'on'=>'search'),
		);
	}

...

public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;
		
		$criteria->compare('id',$this->id);
		$criteria->compare('status',$this->status);
		$criteria->compare('event_id',$this->event_id);
		$criteria->compare('created',$this->created);
		$criteria->compare('user_id',$this->user_id);
		$criteria->compare('guest',$this->guest);
		
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
			'pagination'=>array(
				'pageSize'=>11,
			)
		));
		
	}
...


Проблема в том, что в CGridView не срабатывает поиск по "id" и "guest"
Оба эти поля относятся к таблице данной модели

Подскажите пожалуйста что тут не так
0

#2 User is offline   Charger 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 317
  • Joined: 03-September 11

Posted 22 April 2013 - 01:21 AM

А что, по другим полям фильтр срабатывает?
Добавьте вывод в лог в <cintroller>/index и убедитесь, что у вас он вызывается, может у вас даже AJAX запрос не уходит...
0

#3 User is offline   Traveller_ 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 20
  • Joined: 22-March 13

Posted 22 April 2013 - 08:19 AM

Что именно я должен увидеть в логах ?
Я в конфиг добавил
'log'=>array(
			'class'=>'CLogRouter',
			'routes'=>array(
				array(
					'class'=>'CFileLogRoute',
					'levels'=>'error, warning',
				),
				// uncomment the following to show log messages on web pages
				
				array(
					'class'=>'CWebLogRoute',
				),
				
			),

Получил вывод в браузер. Что искать ?
0

#4 User is offline   Charger 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 317
  • Joined: 03-September 11

Posted 24 April 2013 - 03:35 AM

CGridView обновляет свои данные когда в фильтре(в заголовке столбцов) изменяются значения, делает он это с помощью AJAX запроса. Вам надо убедится что этот запрос действительно отправляется на action "index" вывод логов в браузер вам не поможет, потому что AJAX.
В "index" сделайте вывод $_REQUEST параметров в текстовый лог. Должно быть:
1. открыли страницу, есть запись в логе
2. изменили фильтр столбца "status", он применился, есть запись в логе
3. изменили фильтр столбца "id", он не применяется (по вашим словам), но есть ли запись в логе? И если есть, то какая?
0

#5 User is offline   Traveller_ 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 20
  • Joined: 22-March 13

Posted 25 April 2013 - 07:49 AM

Проверил $_REQUEST - запрос приходит.
Однако Я закомментировал фильтры
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

И поиск заработал.
Но я думаю что удаление их - не самый лучший вариант. Что-то не так в них
0

#6 User is offline   Charger 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 317
  • Joined: 03-September 11

Posted 25 April 2013 - 08:10 AM

Проблема именно в обоих фильтрах? Или в accessControl?
0

#7 User is offline   Traveller_ 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 20
  • Joined: 22-March 13

Posted 25 April 2013 - 08:52 AM

В обоих
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