2012-07-16 150 views
1

我是Yii框架中的一名新手。我想創建一個頁面。當下拉列表發生變化時,listview/gridview將通過下拉值進行更改。yii通過下拉列表更新clistview

這是我的看法

<div class="row"> 
     <?php 

     $records = Company::model()->findAll(); 
     $company_list = CHtml::listData($records, 'id', 'name'); 
     echo CHtml::dropDownList('company_id','', $company_list, 
     array(
     'onchange'=>"$.fn.yiiListView.update('ajaxListView', {url: '".Yii::app()->createUrl('department/dynamicsectionlist')."?company_id='+$('#company_id option:selected').val()})", 
     'prompt'=>'Please select a company', 
     )); ?> 
    </div> 

<?php 
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_view_section', 
    'id'=>'ajaxListView', 
)); 
?> 

這是模型

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('name',$this->name,true); 
     $criteria->compare('p_id',$this->p_id); 
     $criteria->compare('created',$this->created,true); 
     $criteria->compare('updated',$this->updated,true); 
     $criteria->compare('company_id',$this->company_id); 

     return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 
     )); 
    } 

這是控制器

public function actionDynamicsectionlist() 
    {  
     $company_id = $_POST['company_id']; 
     $criteria=new CDbCriteria(); 
     $criteria->condition .= 't.id IN (SELECT t2.id, t2.name FROM department t2 WHERE t2.company_id = :company_id)'; 

     $criteria->params[':company_id'] = $company_id; 
     $dataProvider = new CActiveDataProvider('Department', array('criteria' => $criteria,)); 
     $this->render('sectionlist', array('dataProvider' => $dataProvider)); 

    } 

但它無法正常工作。請幫幫我。

Regads Tharsoe

+0

如果你改變什麼'$ COMPANY_ID = $ _POST ['company_id'];'到'$ company_id = $ _GET ['company_id'];'在控制器中? – dInGd0nG 2012-07-16 07:42:26

+0

檢查螢火蟲中的網絡標籤以查看發送到服務器的內容和/或嘗試回顯'$ _POST'和'$ _GET'的內容。同時檢查js/php錯誤。 – adamors 2012-07-16 08:32:49

+0

我已經試過了。但不工作。當我使用螢火蟲追蹤時,company_id 沒有參數GET http://localhost/mmaig_ceo/ceo-control-system/index.php?r =&ajax = ajaxListView。 – 2012-07-16 08:35:55

回答

1

我解決它。

這是控制器

// Initial view (department/depatmentlist) 
public function actionDepartmentlist() 
    { 
     $model=new Department('search');   
     $model->unsetAttributes(); // clear any default values  
     $model->p_id = 0; 

     // $dataProvider->getData() will return a list of Post objects 
     // $dataProvider=new CActiveDataProvider('Department'); 
     $this->render('list_department',array(
      'model'=>$model, 
     )); 

    } 

// when the user selected the company from dropdown list 
public function actionDynamicsectionlist() 
    { 
     $model=new Department('dsearch'); 
     $model->unsetAttributes(); // clear any default values 
     $model->p_id = 0; 
     if(isset($_GET['company_id'])) 
      $model->company_id = $_GET['company_id']; 

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

這是模型(沒有變化)

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('name',$this->name,true); 
     $criteria->compare('p_id',$this->p_id); 
     $criteria->compare('created',$this->created,true); 
     $criteria->compare('updated',$this->updated,true); 
     $criteria->compare('company_id',$this->company_id); 

     return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 
     )); 
    } 

這是視圖(list_department.php)

<h1>Departments List</h1> 
<div class="row"> 
Company<br /> 
    <?php   
    $records = Company::model()->findAll(); 
    $company_list = CHtml::listData($records, 'id', 'name'); 
    echo CHtml::dropDownList('company_id','', $company_list, 
    array('prompt'=>'Please select a company',)); ?> 
</div> 
<?php 
/* 
for ListView 
$this->widget('zii.widgets.CListView', array(
    //'dataProvider'=>$dataProvider, 
    'dataProvider'=>$model->search(), 
    'itemView'=>'_view_section', 
    'id'=>'ajaxListView', 
)); 
*/ 
?> 


<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'department-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 
    'columns'=>array(
     'id', 
     'name', 
     //'p_id', 
     'created', 
     'updated', 
     //'company_id', 

    ), 
)); 
?> 


<?php  
Yii::app()->clientScript->registerScript('search', 
    "$('#company_id').change(function(){ 
    var companyId = $('#company_id option:selected').val();        
    $.fn.yiiGridView.update(
    'department-grid', 
    { type: 'GET', 
    url: 'http://localhost/mmaig_ceo/ceo-control-system/index.php?r=department/dynamicdepartmentlist&ajax=department-grid&company_id=' + companyId 

    } 
    ); 
    }); 
") 
?> 
+0

你的解決方案有效,但對我來說這不是很舒服。我會說在你的dropdownmenu輸入的'HTMLoption'屬性中放入一個'ajax'對象,並且向'dynamicDeparatmentList'動作發出ajax請求,這個動作只是回傳'DataProvider'。在這個caes你會擺脫所有jquery。 – 2013-12-28 14:50:48