2014-10-23 2 views
1

У меня есть страница, содержащая CGridView в моем приложении. Пользователи могут искать данные, заполняя форму и нажав кнопку «Отправить». Функция поиска работает, и CGridView успешно обновлен. Проблема в том, что это невозможно сделать через ajax, Yii продолжает делать это через параметры в URL.Yii GridView Обновление Ajax не работает

Я хочу обновить CGridView через ajax, чтобы URL по-прежнему выглядел приятным. Вот мой код.

Просмотр файла

<?php 
Yii::app()->clientScript->registerScript('search', " 
    $('.btn-link').click(function(){ 
      $('.section').toggle(); 
      return false; 
    }); 

    $('.section form').submit(function(){ 
    $('#customer2-grid').yiiGridView('update', { 
     data: $(this).serialize() 
    }); 

    return false; 
    }); 
"); 
?> 

<?php echo CHtml::link('Advanced Search','#',array('class'=>'btn-link')); ?> 

<div class="section" style="display:none"> 
    <?php $this->renderPartial('_search',array(
     'model'=>$model, 
    )); ?> 
</div><!-- search-form --> 

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'customer2-grid', 
    'dataProvider'=>$model->search(), 
    'htmlOptions'=>array('style'=>'font-weight:bold'), 
    'filter'=>$model, 
    'columns'=>array(

     'NAME', 
     'BIRTHDATE', 
     'ADDRESS', 
     'EMAIL', 

     array(
      'header'=>'Action', 
         'class'=>'CButtonColumn', 
         'template' => '{add} {updates}', 
         'buttons' => array(
            'add' => array(
             'label' => '', 
             //'imageUrl' => Yii::app()->request->baseUrl.'/images/icon/add.png', 
             'url' => 'Yii::app()->createUrl("/goods/create/",array("id"=>$data->ID))', 
             'options'=>array('class'=>'btn btn-info', 'style'=> 'margin-bottom:2px '), 
             ), 

             'updates' => array(
              'label' => 'Update Profil', 
             // 'imageUrl' => Yii::app()->request->baseUrl.'/images/icon/update.png', 
              'url' => 'Yii::app()->createUrl("/customer/update/",array("id"=>$data->ID))', 
              'options'=>array('class'=>'btn btn-info'), 
             ),  


         ), 
     ), 
    ), 
)); 
?> 

Вот мой _search.php код

<div class="form-horizontal"> 

<?php $form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl($this->route), 
    'method'=>'get', 
)); ?> 



    <div class="form-group"> 
     <?php echo $form->labelEx($model,'NAME',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'NAME',array('size'=>60,'maxlength'=>128,'class'=>'form-control')); ?> 
     </div> 
    </div> 

    <div class="form-group"> 
     <?php echo $form->labelEx($model,'BIRTHDATE',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'BIRTHDATE',array('class'=>'form-control')); ?> 
     </div> 
    </div> 

    <div class="form-group"> 
     <?php echo $form->labelEx($model,'ADDRESS',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'ADDRESS',array('size'=>60,'maxlength'=>512,'class'=>'form-control')); ?> 
     </div> 
    </div> 

    <div class="form-group"> 
     <?php echo $form->labelEx($model,'EMAIL',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'EMAIL',array('size'=>60,'maxlength'=>64,'class'=>'form-control')); ?> 
     </div> 
    </div> 

     <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
     <?php echo CHtml::submitButton('Search', array('class'=>'btn btn-primary')); ?> 
     </div> 
    </div> 


<?php $this->endWidget(); ?> 

</div><!-- search-form --> 

Вот мой код контроллера

public function actionAdmin() 
    {  
       $this->layout = '//layouts/column1'; 
     $model=new Customer('search'); 

     $model->unsetAttributes(); // clear any default values 
     if(isset($_GET['Customer'])) 
      $model->attributes=$_GET['Customer']; 

     $this->render('admin',array(
      'model'=>$model, 
     )); 
    } 

Функция переключения в JQuery работает нормально, но функция обновления не работает. Также работает функция сортировки в CGridView. Что мне здесь не хватает?

Есть ли какие-либо ограничения в CSS для jQuery/CGridView? Я полагаю, что есть что-то не так с CSS Selector

EDIT: Я нашел проблему, которая неожиданно лежит в layout/main.php Я включал три JavaScript-файлы и один из них вызывает ошибку.

<!-- JAVASCRIPTS --> 
    <!-- Placed at the end of the document so the pages load faster --> 
    <!-- JQUERY --> 
    <script src="<?php echo Yii::app()->request->baseUrl; ?>/css/default/js/jquery/jquery-2.0.3.min.js"></script> 
    <!-- JQUERY UI--> 
    <script src="<?php echo Yii::app()->request->baseUrl; ?>/css/default/js/jquery-ui-1.10.3.custom/js/jquery-ui-1.10.3.custom.min.js"></script> 
    <!-- BOOTSTRAP --> 
    <script src="<?php echo Yii::app()->request->baseUrl; ?>/css/default/bootstrap-dist/js/bootstrap.min.js"></script> 

После того как я отбросил первый скрипт, все в порядке. Однако у меня нет идеи, почему. Может, кто-нибудь может объяснить, почему. Любое объяснение будет оценено. Извините, если этот вопрос выходит из темы

+0

Почему вы не использовали свойство фильтра CGridView? – Panoptik

+0

фильтр свойство тоже не работает. Понятия не имею почему. Это имеет какое-то отношение к модели? – MCRmy

+0

необходимо указать фильтр свойство как модель «фильтр» => $ модели, – Panoptik

ответ

1

ок я пытаюсь описать общее решение

этот код exampling с генератором GII по умолчанию сырого

пусть у вас есть модель Customer.php generetad с модулем стандарта GII

class Customer extends CActiveRecord 
{ 
    // ... 

    public function search() { 
     return new CActiveDataProvider(
      // provider properties 
      'criteria' => new CDbCriteria(), // searches and filters 
      'sort' => new CSort(), // ordering 
      'pagination' => new CPagination(), // pagging 
     ); 
    } 

    // also there are exists rules for search scneario 

    public function rules() { 
     return array(
      // ... some other rules 

      // rule for scenario search 
      array('NAME, BIRTHDATE,ADDRESS, EMAIL', 'safe', 'on'=>'search'), 
     ); 
    } 

    // ... 
} 

рядом, мы должны описать примитивный контроллер

class CustomerController extends CController 
{ 
    public function actionIndex() 
    { 
     // create model with scenario search 
     $model = new Customer('search'); 

     // check for incoming filter requests and apply filter 
     if(isset($_GET['Customer']) { 
      $model->attributes = $_GET['Customer']; 
     } 

     $this->render('index', array('model'=>$model); 
    } 
} 

теперь мы должны создать простейший вид с основными настройками CGridView

<?php $this->widget('zii.widgets.grid.CGridView', array(
      'provider' => $model->search(), 
      // this property automatically add search field above each columns 
      'filter' => $model, 

    )); 

попробуйте этот код. и вам не нужно изобретать уже существующее решение, указав пользовательскую форму поиска, конечно, если вы хотите иметь расширенные инструменты поиска, вам нужно какое-то жесткое кодирование

+0

Большое спасибо, это не решение, но после того, как вы описали и переписали какой-то код, я нашел проблема – MCRmy

Смежные вопросы