zoukankan      html  css  js  c++  java
  • GridView联表搜索,排序

    kartik-v/yii2-grid

    文档http://demos.krajee.com/grid

    在win7下

     composer  require kartik-v/yii2-grid "@dev"

    在vender下多了kartik-v,kartik-v下yii2-export,yii2-grid,yii2-krajee-base,yii2-mpdf

    还修改了,vendoryiisoftextensions.php

     'kartik-v/yii2-krajee-base' => 
      array (
        'name' => 'kartik-v/yii2-krajee-base',
        'version' => '1.8.1.0',
        'alias' => 
        array (
          '@kartik/base' => $vendorDir . '/kartik-v/yii2-krajee-base',
        ),
      ),
      'kartik-v/yii2-grid' => 
      array (
        'name' => 'kartik-v/yii2-grid',
        'version' => '2.7.0',
        'alias' => 
        array (
          '@kartik/grid' => $vendorDir . '/kartik-v/yii2-grid',
        ),
      ),
      'kartik-v/yii2-export' => 
      array (
        'name' => 'kartik-v/yii2-export',
        'version' => 'v1.2.0',
        'alias' => 
        array (
          '@kartik/export' => $vendorDir . '/kartik-v/yii2-export',
        ),
      ),
      'kartik-v/yii2-mpdf' => 
      array (
        'name' => 'kartik-v/yii2-mpdf',
        'version' => 'v3.3.0',
        'alias' => 
        array (
          '@kartik/mpdf' => $vendorDir . '/kartik-v/yii2-mpdf',
        ),
      ),

    但是当保存文件为PDF还会提示错误,它还需要mpdf

    去github下载,mpdf,放到vender下

    在vendorcomposerautoload_namespaces.php添加

    'mPDF' => array($vendorDir . '/mpdf'),

    (1)在在配置文件main.php(使用的是yii advance)添加

    'modules' => [
            'gridview'=>[
                'class' => 'kartikgridModule',
                'downloadAction' => 'gridview/export/download',
                'i18n'=>[    
                        'class' => 'yiii18nPhpMessageSource',
                        'basePath' => '@kvgrid/messages',
                        'forceTranslation' => true
                    ]
                ]
            ],

    (2)使用

    Orders、Custom通过uid关联

    在Orders中

    public function getCustom() {
            return $this->hasOne(Custom::className(), ['id' => 'uid']);
    }

    去写OrderSearch去继承Orders表

    class OrderSearch extends Orders
    {
        public $tel,$trade_type,$pay_type;
        public function rules()
        {
            return [
                //省略
                ['tel','safe']  //添加后才能搜索
            ];
        }
      //省略
        public function search($params)
        {
            $query = Orders::find();
            $query->joinWith(['custom']);//添加
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);
            $dataProvider->setSort([   //添加-----排序
                'attributes' => [
                    'tel' => [
                        'asc' => [Custom::tableName().'.tel' => SORT_ASC],
                        'desc' => [Custom::tableName().'.tel' => SORT_DESC],
                        'label' => '手机号'
                    ],'create_time'=>[],
                ]
            ]);
            $this->load($params);
    
            if (!$this->validate()) {
    return $dataProvider; } $query->andFilterWhere([ 'id' => $this->id, 'uid' => $this->uid,'create_time' => $this->create_time, ]);      //省略 $query->andFilterWhere(['like', Custom::tableName().'.tel', $this->tel]) ;//搜索 return $dataProvider; } }

    Controller代码

    public function actionIndex()  
    {  
           $searchModel = newOrderSearch();
        $dataProvider
    = $searchModel->search(Yii::$app->request->queryParams);
        return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]);
    }

    View中

    <?php
    use yiihelpersHtml;
    use kartikgridGridView;?>
    <div class="user-index">
        <?= GridView::widget([
            'panel'=>['type'=>'primary', 'heading'=>'表头'],
            'dataProvider' => $dataProvider,
            'filterModel'=>$searchModel,
            'showPageSummary'=>true,   //显示统计
            'columns' => [
                ['class'=>'kartikgridSerialColumn'],
                [
                    'attribute' => 'tel',  
                    'value' => 'custom.tel',
                    'filter'=>Html::activeTextInput($searchModel, 'tel',['class'=>'form-control']),//添加搜索框
                    'label'=>'手机号',
                    'pageSummary'=>'总计',    
                    'pageSummaryOptions'=>['class'=>'text-right text-warning'],
                ],
                [
                    'attribute'=>'paid',
                    'format'=>['decimal', 2],
                    'pageSummary'=>true,
                ],
                
            ],
            'tableOptions'=>['class' => 'table table-hover'],
            'toolbar'=>[
                '{toggleData}',
                '{export}',
            ],
            'exportConfig'=>[
                GridView::HTML => [],
                GridView::PDF => [],
           GridView::CSV => [],
    ], ]); ?> </div>

    (3)PDF下载乱码问题

    修改vendorkartik-vyii2-gridcontrollers下ExportController.php

    protected function generatePDF($content, $filename, $config = [])
        {
            unset($config['contentBefore'], $config['contentAfter']);
            $config['filename'] = $filename;
            $config['mode']=Pdf::MODE_UTF8;//需要核心字库
            $config['methods']['SetAuthor'] = ['Krajee Solutions'];
            $config['methods']['SetHeader']=['页眉'];
            $config['methods']['SetFooter']=['页'];
            $config['methods']['SetCreator'] = ['Krajee Yii2 Grid Export Extension'];
            $config['content'] = $content;
            $config['options']=['title' => '中文',
            'autoLangToFont' => true,    //这几个配置加上可以显示中文
            'autoScriptToLang' => true,  //这几个配置加上可以显示中文
            'autoVietnamese' => true,    //这几个配置加上可以显示中文
            'autoArabic' => true,        //这几个配置加上可以显示中文
            ];
            $pdf = new Pdf($config);
            echo $pdf->render();
        }

    核心字库在vendormpdf tfonts下

    (3)CSV下载乱码问题

    public function actionDownload()
    {
        $type = empty($_POST['export_filetype']) ? 'html' : $_POST['export_filetype'];
      //省略
    if($type=='csv'){ $content="xEFxBBxBF".$content; //添加BOM头 }   //省略   return $content; }
  • 相关阅读:
    spring boot 启动报错(spring-boot-devtools热部署后):The elements [spring.resources.cache-period] were left unbound. Update your application's configuration
    一分钟搞定:spring boot 热部署 (基于Idea)
    如何将新项目添加到github仓库中?只需简单几步~即可实现
    spring boot 日志文件配置(logback-spring.xml)亲测可用!
    java后台读取/解析 excel表格
    String字符串存入数据库中超出最大长度(oracle varchar2 4000)?应合理分条存储(java实现-工具/方法)
    笔试题-sql语句
    总结--看帖收“货”
    Oracle-1
    蓝桥杯- 基础练习: 字母图形
  • 原文地址:https://www.cnblogs.com/baby123/p/5090725.html
Copyright © 2011-2022 走看看