2014-04-16 2 views
0

YII 뷰 폴더에서 내용을 관리 할 수있는 테스트 모듈과 admin.php 파일이 있으며 여기에 양식을 렌더링합니다. 여기에 양식과 드롭 다운 코드를 입력하면 그리드 새로 고침 값을 지정합니다. 내가 선택 드롭 다운한다고 가정 의 상태 변경의 그리드보다 상태, 그것은 내가 상태Yii Refresh Grid On DropDown 변경

의 값을 선택하고이 드롭 다운 메뉴에서 양식 및 드롭 다운을 _dropdownform 포함되어

<?php 
Yii::app()->clientScript->registerScript('dropdown', " 

$('.dropdown-form form').submit(function(){ 
$('#testimonial-grid').yiiGridView('update', { 
     data: $(this).serialize() 
    }); 
    return false; 
}); 
"); 
?> 
<h1>Manage Testimonials</h1> 
<div class="dropdown-form"> 
<?php $this->renderPartial('_dropdownform',array(
    'model'=>$model, 
)); ?> 
</div><!-- search-form --> 
    <?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'testimonial-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 
    'columns'=>array(
     'id', 
     'created_by', 
     'test_name', 
     'test_email', 
     'comments', 
     'created_at', 
     /* 
     'status', 
     'approved_on', 
     'approved_by', 
     */ 
     array(
      'class'=>'CButtonColumn', 
     ), 
    ), 
)); ?> 

양식 아래에 승인 된 데이터를 표시 "승인"

<div class="wide form"> 
    <?php 
    $form = $this->beginWidget('CActiveForm', array(
     'action' => Yii::app()->createUrl($this->route), 
     'method' => 'get', 
    )); 
    ?> 
    <div class="row"> 
     <?php 
     echo CHtml::dropDownList('status', '', array(0 => 'New', 1 => 'Approved', 2 => 'Declined'), array(
      'prompt' => 'Select Status', 
      'ajax' => array(
       'type' => 'POST', 
       'url' => Yii::app()->createUrl('testimonial/loadthedata'), 
       //or $this->createUrl('loadcities') if '$this' extends CController 
       'update' => '#testimonial-grid', //or 'success' => 'function(data){...handle the data in the way you want...}', 
       'data' => array('status' => 'js:this.value'), 
     ))); 
     ?> 
    </div> 

    <div class="row buttons"> 
<?php //echo CHtml::submitButton('Search'); ?> 
    </div> 
     <?php $this->endWidget(); ?> 
</div><!-- search-form --> 

및 이 함수의 데이터를 가져올 방법을 알고 그리드보기에 전달할 데이터를 가져 DROPDOWN로 제공된 내 컨트롤러 또는 URL의 코드는 ACTION을 따르고 있지만 그나마

public function actionloadthedata() { 
    if (isset($_POST['status'])) { 
     $status = $_POST['status']; 
     if($status==0){ 
      $status='New'; 
     } 
     if($status==1){ 
      $status='Approved'; 
     } 
     if($status==2){ 
      $status='Declined'; 
     } 
     Testimonial::model()->findByAttributes(array('status'=>$status)); 


    } 
} 

답변

1

당신은 그리드 필터를 연결하는 CGridView 속성 filterCssClass을 사용할 수 있습니다 예를

$this->widget('CGridView', array(
    'id' => 'my-list', 
    'filterCssClass' => '#filterFormId .filter', 

그리고이 필터 형태

<?php $form = $this->beginWidget('CActiveForm', array(
    'id' => 'filter-fomr-id', 
)); ?> 

<div class="filter clearfix"> 
    <?php echo $form->dropDownList($model, 'name', [0=>'all', '1'=>'some else']); ?> 
</div> 

당신이 양식에 특정 JQuery와 선택에 #filterFormId의 .filter를 교체합니다. 즉, 필터 양식에 id 속성을 설정하고 "#THISID .row"를 사용하십시오.

+0

오류가 발생합니다.필터 입력, # testimonial-grid. # filter-fomr-id .filter – FahadAkram

+0

을 선택하여 양식을 필터링 한 다음 #THISID를 사용합니다 .row – Alex

0

감사합니다. @Alex 당신의 도움을 주셔서 감사합니다.하지만 gridd에 대한 filterdropdown을 만드는 데 성공했습니다. 코드는 다음과 같습니다. 그 표식은 상태 표시 = 새 값, 표로드 그리드 상태가 새로운 하지만 처음에는 그리드 여기 에 대한 드롭 다운 필터의 작동 코드를 붙여 표시 값은 내 admin.php 파일 여기

<?php 
$this->breadcrumbs = array(
    'Testimonials' => array('index'), 
    'Manage', 
); 
$this->menu = array(
    array('label' => 'List Testimonial', 'url' => array('index')), 
    array('label' => 'Create Testimonial', 'url' => array('create')), 
); 
?> 
<h1>Manage Testimonials</h1> 
<!-----------drop down form-------------> 
<?php 
Yii::app()->clientScript->registerScript('dropdownfilter', " 

$('.dropdown-form form #staticid').change(function(){ 
    $.fn.yiiGridView.update('testimonial-grid', { 
     data: $(this).serialize() 
    }); 
    return false; 
}); 
"); 
?> 
<div class="dropdown-form"> 
    <?php 
    $this->renderPartial('_dropdownfilter', array(
     'model' => $model, 
    )); 
    ?> 
</div><!-- search-form --> 
<?php 
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'testimonial-grid', 
    'dataProvider' => $model->search(), 
    // 'filter' => $model, 
    'columns' => array(
     'id', 
     'created_by', 
     'test_name', 
     'test_email', 
     'comments', 
     'created_at', 
     'status', 
     array(
      'class' => 'CButtonColumn', 
     ), 
    ), 
)); 
?> 

입니다 내 내가 정적 드롭을 배치 부분적인 형태 다우

렌더링
<div class="wide form"> 
<?php 
$form = $this->beginWidget('CActiveForm', array(
    'action' => Yii::app()->createUrl($this->route), 
    'method' => 'get', 
)); 
?> 
<div class="row"> 
    <?php 
    echo CHtml::dropDownList('staticid', '', array('0' => 'New', '1' => 'Approved', '2' => 'Declined'), array(
     // 'onChange' => 'this.form.submit()', 
     'ajax' => array(
      'type' => 'POST', //request type 
    ))); 
    ?> 
</div> 
<?php $this->endWidget(); ?> 

그리고 여기에 컨트롤러 내 adminaction의 코드

지금은 내가 처음 트리거 actionadmin 때이 코드를 가지고 있는지 확인, 상태 = 새 값 귀하의 gridview 파일에서
+0

actionAdmin 컨트롤러에서 $ model-> unsetAttributes(); $ model-> status = 'New'; –

0

을 보여 것을 원하는
public function actionAdmin() { 
    $model = new Testimonial('search'); 
    $model->unsetAttributes(); // clear any default values 
    if (isset($_GET['staticid'])) { 
     $getStatus = $_GET['staticid']; 
     if ($getStatus == 0) 
      $status = 'New'; 
     if ($getStatus == 1) 
      $status = 'Approved'; 
     if ($getStatus == 2) 
      $status = 'Declined'; 
     $model->status = $status; 
    } 
    if (isset($_GET['Testimonial'])) 
     $model->attributes = $_GET['Testimonial']; 
    $this->render('admin', array(
     'model' => $model, 
    )); 
} 

: CGridView 정의에서 다음

Yii::app()->clientScript->registerScript('search', " 
$('.search-button').click(function(){ 
    $('.search-form').toggle(); 
    return false; 
}); 
$('.search-form form').submit(function(){ 
    $('#ad-grid').yiiGridView('update', { 
     data: $(this).serialize() 
    }); 
    return false; 
}); 
"); 

:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'testimonial-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 
    'columns'=>array(
     ... 
     array(
      'name'=>'Status', 
      'filter'=>CHtml::dropDownList('YourModel[status]', $model->status, array(0 => 'New', 1 => 'Approved', 2 => 'Declined'), array('empty' => '--all--')), 
      'value'=>'($data->status == 0) ? "New": ($data->status == 1) ? "Approved" : "Declined"', 
      'htmlOptions' => array(
       'style' => 'width: 40px; text-align: center;', 
      ), 
     ), 
     ... 
     array(
      'class'=>'CButtonColumn', 
     ), 
    ), 
)); 
// CGridView 

'value' 섹션에 if/else를 저장하려면 모델에 정수에 연결된 문자열을 반환하는 메서드를 구현할 수 있습니다.

기본값 인 Yii admin.php view만으로도 효과가 있습니다. 원하는만큼 편집 할 수 있습니다. 구문 오류, 인식 할 수없는 표현 :. # 증명서 그리드 # 필터 - fomr-ID, 쿼리를 필터링하지 않습니다 빈 상태

업데이트
지원이 추가