2016-10-17 82 views
1

我想要SORT我的數據在基於字母表的gridview中,當ID包含數字時,如果按ID排序,例如1-100或100-1,我的代碼就可以工作。 如何從A-Z或Z-A獲得sort?是否可以自定義Yii2 sortPHP YII 2 - 如何從A-Z或Z-A中排序數據?

我有在控制器中的代碼:

public function actionItemreport() 
{ 
    $modelFunctions = new functions; 
    $modelFunctions->checkingUser($this, Yii::$app->controller->id, Yii::$app->controller->action->id); 

    $this->transfield = array('icitem' => $modelFunctions->getFieldTranslationTable('icitem'), 'iclink' => $modelFunctions->getFieldTranslationTable('iclink')); 

    $arrDays = array('0' => $this->arrtrans[134], '1' => $this->arrtrans[135], '2' => $this->arrtrans[136], '3' => $this->arrtrans[137], '4' => $this->arrtrans[138], '5' => $this->arrtrans[139], '6' => $this->arrtrans[140]); 
    $arrSchedule = $this->getItemReportScheduler(); 

    $ftpSql = "SELECT * FROM icenvinit"; 
    $a_icenvinit = Yii::$app->db->createCommand($ftpSql)->queryOne(); 

    if($a_icenvinit['hostaddr1'] != "") 
    { 
     $arr_ftp['FTP1'] = $this->arrtrans[141]; 
    } 

    if($a_icenvinit['hostaddr2'] != "") 
    { 
     $arr_ftp['FTP2'] = $this->arrtrans[142]; 
    } 

    switch (intval($arrSchedule['type'])) 
    { 
     case 1 : $listSchedule = "[ " . $this->arrtrans[143] . " ] : {$arrSchedule['hour']}:{$arrSchedule['minute']}"; 
        break; 
     case 2 : $days = $arrDays[$arrSchedule['day']]; 
        $listSchedule = "[ " . $this->arrtrans[144] . " ] : {$days} {$arrSchedule['hour']}:{$arrSchedule['minute']}"; 
        break; 
     case 3 : $date = $arrSchedule['date']; 
        $listSchedule = "[ " . $this->arrtrans[145] . " ] : {$date} {$arrSchedule['hour']}:{$arrSchedule['minute']}"; 
        break; 
     case 4 : $listSchedule = "[ " . $this->arrtrans[146] . " ] : Every {$arrSchedule['interval']} Hour(s)"; 
        break; 
     default : $listSchedule = $this->arrtrans[147]; 
        $listTarget = ""; 
        break; 
    } 

    $sql = "SELECT * FROM icdbval"; 

    $count = Yii::$app->db->createCommand("select count(1) from icdbval")->queryScalar(); 


    $arrsort['attributes'] = array('id' => array('label' => $this->arrtrans[148])); 
    $arrsort['attributes'] += array('orgfield' => array('label' => $this->arrtrans[149])); //, 'asc' => array('orgfield' => SORT_ASC) 
    $arrsort['attributes'] += array('status' => array('label' => $this->arrtrans[91])); 
    $arrsort['defaultOrder'] = array('id' => SORT_ASC); 

    $sort = $arrsort; 

    $a = 0; 
    $arrview = array(); 

    $arrview[$a]['attribute'] = 'id'; 
    $arrview[$a]['label'] = $this->arrtrans[148]; 
    $arrview[$a]['encodeLabel'] = false; 
    $arrview[$a++]['value'] = function ($data) 
    { 
     return $data['id']; 
    }; 

    $arrview[$a]['attribute'] = 'orgfield'; 
    $arrview[$a]['label'] = $this->arrtrans[149]; 
    $arrview[$a]['encodeLabel'] = false; 
    $arrview[$a++]['value'] = function ($data) 
    { 
     return $this->get_trans_field($data['orgfield']); 
    }; 

    $arrview[$a]['attribute'] = 'status'; 
    $arrview[$a]['label'] = $this->arrtrans[91]; 
    $arrview[$a]['encodeLabel'] = false; 
    $arrview[$a]['format'] = 'raw'; 
    $arrview[$a++]['value'] = function ($data) 
    { 
     if($data['status'] == "0") 
     { 
      $select0 = "selected"; 
      $select1 = ""; 

     } 
     else 
     { 
      $select1 = "selected"; 
      $select0 = "";  
     } 

     $id = $data['id']; 

     $ni = $this->arrtrans[150]; 
     $in = $this->arrtrans[151]; 

     $html = <<< "SCRIPT" 
      <select class="_statusselect" theval="$id"> 
       <option value="0" $select0>$ni</option> 
       <option value="1" $select1>$in</option> 
      </select> 
SCRIPT; 
     // return $data['status']; 
     return $html; 
    }; 

    $collumnview = $arrview; 

    $dataProvider = new SqlDataProvider([ 
     'sql' => $sql, 
     'totalCount' => $count, 
     'sort' => $sort, 
     'pagination' => [ 
      'pageSize' => Yii::$app->db->createCommand("SELECT rowpage from icenvinit")->queryScalar(), 
     ], 
    ]); 

    return $this->render('itemreport', ['error' => $error, 'success' => $success, 'collumnview' => $collumnview, 'dataProvider' => $dataProvider, 'sql' => $sql, 'count' => $count, 'listSchedule' => $listSchedule, 'arr_ftp' => $arr_ftp]); 
} 

和在視圖中:

<div class="table-responsive"> 
    <?php Pjax::begin(['id' => 'item-report', 'timeout' => false]) ?> 
     <? 
      $js = <<< 'SCRIPT' 
       function changestatus(obj) 
       { 
        $('#successalert').css('display', 'none'); 
        $('#erroralert').css('display', 'none'); 
        $.ajax({ 
         type  :'POST', 
         dataType : 'json', 
         data : ({xval: obj.val(), id: obj.attr('theval')}), 
         url : 'updateitemreport', 
         success : function(response) 
         { 
          if(response.error) 
          { 
           // $('#successalert').css('display', 'none'); 
           // $('#erroralert').html(response.html); 
           // $('#erroralert').css('display', 'block'); 
          } 
          else 
          { 
           // $('#erroralert').css('display', 'none'); 
           // $('#successalert').html(response.html); 
           // $('#successalert').css('display', 'block'); 
          } 
         } 
        }); 
       } 

       $('._statusselect').change(function() { 
        changestatus($(this)); 
       }); 
SCRIPT; 

$this->registerJs($js, yii\web\View::POS_READY); 
?> 
     <?= GridView::widget([ 
      'dataProvider' => $dataProvider, 
      'columns' => $collumnview, 
     ]); ?> 
    <?php Pjax::end(); ?> 
</div> 

回答

0

添加在例如在您的orgfield屬性的屬性的選項ASC和DESC;

..... 
$arrsort['attributes'] = array('id' => array('label' => $this->arrtrans[148])); 
$arrsort['attributes'] += array( 
     'orgfield' => array('label' => $this->arrtrans[149], 
          'asc' => array('orgfield' => SORT_ASC), 
          'desc' => array('orgfield' => SORT_DESC), 
          )); 

..... 
+0

仍然無法工作bro – yosafat

+0

單擊網格視圖中的標題標籤時會發生什麼? – scaisEdge