zoukankan      html  css  js  c++  java
  • 用数组array代替CActiveRecord构建CArrayDataProvider

    当需要构建 GridView的时候;

    常常用 CArrayDataProvider 或者 CActiveDataProvider
    这是就需要一个CActiveRecord

    比如:
     857         $sql = "SELECT * FROM zhuanli_applicantCount where kId=:kId order by percentage desc";
     858           $rawData= model_applicant::model()->findAllBySql($sql,array('kId'=>$KDValue));
     859         $IDARRAY = array();
     860         
     861         $paginationTop = new CPagination(sizeof($rawData));
     862         $paginationTop->pageVar = 'page';
     863         $paginationTop->pageSize= 10;
     864         $paginationButtom = clone $paginationTop;
     865         $dataProvider =   new CArrayDataProvider($rawData, array(
     866             'keyField'=>false,
     867         ));
     868         $this->render('applicantListMore', array(
     869             'dataProvider'=>$dataProvider,
     870             'paginationTop'=>$paginationTop,
     871             'totalItemCount'=>sizeof($rawData),
     872             'paginationButtom'=>$paginationButtom,
     873         ));





    如果需要展示的数据主题并不在一个数据表中,而是我们用Coreseek得到的一个数组,或者就是一个普通的数组
    如何用数组数据来展现 GridView视图呢?

    首先可以去看下$dataProvider =   new CArrayDataProvider($rawData, array(
    的数据结构
    object(CArrayDataProvider)#37 (10) {
      ["keyField"]=>
      bool(false)
        ["rawData"]=>
      array(24) {
        [0]=>
        array(2) {
          ["provinceId"]=>
          string(2) "11"
          ["provinceName"]=>
          string(9) "江苏省"
        }
    ……
    ……
        [23]=>
        array(2) {
          ["provinceId"]=>
          string(2) "15"
          ["provinceName"]=>
          string(9) "江西省"
        }
      }
      ["_id":"CDataProvider":private]=>
      NULL
      ["_data":"CDataProvider":private]=>
      NULL
      ["_keys":"CDataProvider":private]=>
      NULL
      ["_totalItemCount":"CDataProvider":private]=>
      NULL
      ["_sort":"CDataProvider":private]=>
      NULL
      ["_pagination":"CDataProvider":private]=>
      NULL
      ["_e":"CComponent":private]=>
      NULL
      ["_m":"CComponent":private]=>
      NULL
    }
    好,那我们想要的结果是最后能够
      $dataProvider = new CArrayDataProvider($IDARRAY, array(
    那就来构建这个数组

     734         $IDARRAY = array();
     735         $total =0;
     736         $totalItemCount = 0;
     737         if($result['total'])
     738         {
     739             foreach($result['matches'] AS $k=>$v)
     740             {
     741                 $IDARRAY[] = array('site_name'=>$v['attrs']['site_name'],'count'=>$v['attrs']['@count']);
     742                 $total+= $v['attrs']['@count'];
     743             }
     744             $totalItemCount = $result['total'];
     745             $this->sourceMoreIDARRAY=$IDARRAY;
     746             $this->sourceMoreNum=$total;
     747         }       
     748                 
     749         $paginationTop = new CPagination($totalItemCount);
     750         $paginationTop->pageVar = 'page';
     751         $paginationTop->pageSize= 10;
     752         $paginationButtom = clone $paginationTop;
     753          $dataProvider = new CArrayDataProvider($IDARRAY, array(
     754             'keyField'=>false,
     755         ));
     756         
     757         $this->render('sourceListMore', array(
     758             'dataProvider'=>$dataProvider,
     759             'paginationTop'=>$paginationTop,
     760             'totalItemCount'=>$totalItemCount,
     761             'paginationButtom'=>$paginationButtom,
     762         ));
    来看下
    $dataProvider = new CArrayDataProvider($IDARRAY, array(
    object(CArrayDataProvider)#37 (10) {
      ["keyField"]=>
      bool(false)
      ["rawData"]=>
      array(456) {
        [0]=>
        array(2) {
          ["site_name"]=>
          string(0) ""
          ["count"]=>
          int(3046)
        }
        [1]=>
        array(2) {
          ["site_name"]=>
          string(9) "易车网"
          ["count"]=>
          int(904)
        }
        [455]=>
        array(2) {
          ["site_name"]=>
          string(9) "科技讯"
          ["count"]=>
          int(1)
        }
      }
      ["_id":"CDataProvider":private]=>
      NULL
      ["_data":"CDataProvider":private]=>
      NULL
      ["_keys":"CDataProvider":private]=>
      NULL
      ["_totalItemCount":"CDataProvider":private]=>
      NULL
      ["_sort":"CDataProvider":private]=>
      NULL
      ["_pagination":"CDataProvider":private]=>
      NULL
      ["_e":"CComponent":private]=>
      NULL
      ["_m":"CComponent":private]=>
      NULL
    }
    OK ,成功,其实用着样的方法,比用SQL 是不是要方便很多?


     

    但是应该适用于,GridView中 column没几个的情况。
    如果有很多Column,一般都是某个数据表的数据要展示,当然就用CActiveRecord
    $rawData= model_applicant::model()->findAllBySql($sql,array('kId'=>$KDValue));


  • 相关阅读:
    SCOI2020游记
    关于我
    WC2020游记
    CSP-S 2019 游记
    回文自动机学习笔记
    全自动数字论证机(迫真)
    树状数组上二分
    《伊豆的舞女》 读书小记
    雅礼集训2019 Day5
    雅礼集训2019 Day4
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3162862.html
Copyright © 2011-2022 走看看