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; }
原文地址:https://www.cnblogs.com/baby123/p/5090725.html