Yii2以适当的安排显示数据

时间:2017-05-29 05:23:27

标签: yii2-advanced-app

我有一个报告表和列report_id, reference_numberreport_name。有些数据具有相同的reference_number。它通过视图按钮显示在gridview中。

我想要的是当我单击特定行的视图按钮时,将显示该行的数据以及具有相同reference_number个i的行。截至目前,我可以显示具有相同reference_number的所有记录,但我想要的是当我点击特定行时,它将显示在顶部,其他详细信息将在其下方。

    $gridColumns = [
            ['class' => 'yii\grid\SerialColumn'],
            'report_id',
            'reference_no',
            'subject',
            'doc_date', 
            [
                'label' => 'For',
                'value' => 'namefor.fullName',
            ],
            [
                'label' => 'From',
                'value' => 'namefrom.fullName',
            ],
            'drawer_id',
            'user_id',
            'doc_name',
            [
                'class' => 'yii\grid\ActionColumn',
            ],
            [
                'attribute' => '',
                'format' => 'raw',
                'value' => function($data)
                {
                    return Html::a('', ['report/download', 'id' => $data->reference_no],['class' => 'fa fa-download']);
                }
            ],
        ];
    echo   

    // ExportMenu::widget([
    //     'dataProvider' => $dataProvider,
    //     'columns' => $gridColumns
    // ]);

    GridView::widget([
        'dataProvider'=> $dataProvider,
        'filterModel' => $searchModel,
        'columns' => $gridColumns,
        'responsive'=> true,
        'hover'=> true,
        'pjax'=> true,
        'pjaxSettings'=>[
            'neverTimeout'=>true,
        ]
    ]);

控制器

    public function actionIndex()
    {
    $searchModel = new reportDetailsSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
    }
    public function actionView($id)
    {   
    $dataProvider = new ActiveDataProvider([
        'query' => reportDetails::find()
                ->select('reference_no, report_id')
                ->where(['report_id' => $id]),
        'pagination' => [
            'pageSize' => 10,
        ],
    ]);
    return $this->render('view', [
        'model' => $this->findModel($id),
        'dataProvider' => $dataProvider,
    ]);
    }

1 个答案:

答案 0 :(得分:0)

我假设你有一个唯一的密钥report_id。 每个reference_number都有一个唯一的report_id。 这样填充网格并将report_id作为查询按钮中的查询字符串传递。 然后从控制器的操作中获取该值。

例如:

     <?php 
$gridColumns = [
            ['class' => 'yii\grid\SerialColumn'],
            'report_id',
            'reference_no',
            'subject',
            'doc_date', 
            [
                'label' => 'For',
                'value' => 'namefor.fullName',
            ],
            [
                'label' => 'From',
                'value' => 'namefrom.fullName',
            ],
            'drawer_id',
            'user_id',
            'doc_name',
            [
                    'class' => 'yii\grid\ActionColumn',
                    'header' => 'Actions',
                    'contentOptions'=> [ 'style' => 'vertical-align: center;width:8%!important;'],
                    'template' => '{view}',
                    'buttons' =>
                            [
                                'view' => function ($url, $model, $key) 
                                    {
                                        return Html::a('&nbsp;<span class="fa fa-download"></span>&nbsp;', ['report/download', 'id' => $model->reference_no],            
                                                 [  
                                                    'title' => Yii::t('app', 'View'),
                                                    'class' => 'btn btn-primary btn-xs',
                                                    'data-method' => 'post',

                                        ]);
                                    },
                            ],            
            ],
            /*[
                'attribute' => '',
                'format' => 'raw',
                'value' => function($data)
                {
                    return Html::a('', ['report/download', 'id' => $data->reference_no],['class' => 'fa fa-download']);
                }
            ], */
        ];
    echo   GridView::widget([
        'dataProvider'=> $dataProvider,
        'filterModel' => $searchModel,
        'columns' => $gridColumns,
        'responsive'=> true,
        'hover'=> true,
        'pjax'=> true,
        'pjaxSettings'=>[
            'neverTimeout'=>true,
        ]
    ]); 
?>

然后你的行动在Contorller中下载

<?php
public function actionDownload($id) {

        //var_dump($id); die;

        //$emodel = Yourmodel::find()->where('id="' . $id . '"')->all();

        if (Yii::$app->request->post()) {

                // var_dump(Yii::$app->request->post()); die;

                var_dump($_POST); die;
                 // Do your stuff   

            }

        }
        return $this->render('download');
        ]);
    }
 ?>