Помог мне в этом форум yiiframework.ru
И подсказаный там мануал http://www.yiiframework.com/wiki/185/clistview-ajax-filtering/
Самоу строку поиска (форму с текстовым полем для ввода и кнопкой submit) добавляю в файл Z:\home\catalog.loc\www\protected\views\assortiment\index.php
<h1> <? echo Yii::t('main-ui', 'Assortiments'); ?> </h1> <?php echo CHtml::beginForm(CHtml::normalizeUrl(array('assortiment/index')), 'get', array('id'=>'filter-form')) . CHtml::textField('string', (isset($_GET['string'])) ? $_GET['string'] : '', array('id'=>'string')) . CHtml::submitButton('Search', array('name'=>'')) . CHtml::endForm(); Yii::app()->clientScript->registerScript('search', "var ajaxUpdateTimeout; var ajaxRequest; $('input#string').keyup(function(){ ajaxRequest = $(this).serialize(); clearTimeout(ajaxUpdateTimeout); ajaxUpdateTimeout = setTimeout(function () { $.fn.yiiListView.update( // this is the id of the CListView 'ajaxListView', { url: '" . CController::createUrl('assortiment/index') . "', data: ajaxRequest } ) }, // this is the delay 300); });" );
Тут добавлена форма и javascript, который организует отсылку данных формы в нужное действие контроллера.
Теперь надо присланные данные обработать в контроллере в действии, которое выполняется (assortiment/index). В файле Z:\home\catalog.loc\www\protected\controllers\ AssortimentController.php в действии index (приведу это действие полностью)
/** * Lists all models. */ public function actionIndex($string = '') { echo $string; if(!empty($_GET['category'])) { $criteria=new CDbCriteria(array( 'condition'=> '(category_id=:id or cat_parent=:id) and t.shown_'.Yii::app()->params['region'].'=1 and category.shown_'.Yii::app()->params['region'].'=1', 'params' => array(':id'=>(int)$_GET['category']), 'with' => array('category'), )); } else { $criteria=new CDbCriteria(array( 'condition'=>'t.shown_'.Yii::app()->params['region'].'=1 and category.shown_'.Yii::app()->params['region'].'=1', 'with' => array('category'), )); } //Добавлена эта часть кода: //Просто добавляет $criteria->addSearchCondition //Если строка $string пришла if( strlen( $string ) > 0 ) { $criteria->addSearchCondition( 't.name_'.Yii::app()->language, $string,true, 'AND' ); } //Была добавлена эта часть кода. $dataProvider=new CActiveDataProvider('Assortiment',array( 'criteria'=>$criteria)); $this->render('index',array('dataProvider'=>$dataProvider, )); }И как бы всё работает :)
Продолжение следует.
Комментариев нет:
Отправить комментарий