2016-11-10 43 views
1

我一直试图通过Yii2高级模板的搜索功能实现MPDF,但似乎没有给出我想要的结果。如何使用Yii2和mpdf将当前搜索条件打印/显示为PDF?

我想要的是,当我把值放入textField(sales_id)时,我应该能够使用MPDF扩展来操作打印按钮,其条件是mpdf中显示的数据应该只在其字段中包含类似的sales_id值,像这样图像下方:

view example

我在我的控制器进行的方法,像这样:

public function actionPrintPerSales() 
    { 
     // trying to get the sales_id post value 
     $request = Yii::$app->request; 
     $sales_id = $request->post('sales_id'); 
     $model = new PiutangCustomer(); 



    // Your SQL query filter here 
    $dataProvider = new ActiveDataProvider([ 
     'query' => PiutangCustomer::find() 
      ->where(['status_piutang' => '0']) 
      ->andWhere(['sales_id'] => $sales_id) 
      ->orderBy(['customer_id' => SORT_ASC]) 
    ]); 

    $content = $this->renderPartial('_print-per-sales', ['model', 'dataProvider' => $dataProvider]); 

    // setup kartik\mpdf\Pdf component 
    $pdf = new Pdf([ 
    // set to use core fonts only 
    'mode' => Pdf::MODE_CORE, 
    // A4 paper format 
    'format' => Pdf::FORMAT_A4, 
    // portrait orientation 
    'orientation' => Pdf::ORIENT_PORTRAIT, 
    // stream to browser inline 
    'destination' => Pdf::DEST_BROWSER, 
    // your html content input 
    'content' => $content, 
    // format content from your own css file if needed or use the 
    // enhanced bootstrap css built by Krajee for mPDF formatting 
    'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css', 
    // any css to be embedded if required 
    'cssInline' => '.kv-heading-1{font-size:18px}', 
    // set mPDF properties on the fly 
    'options' => ['title' => 'Cetak Laporan Piutang Menurut Customer'], 
    // call mPDF methods on the fly 
    'methods' => [ 
    'SetHeader'=>['Laporan Piutang - NAMA TOKO/PERUSAHAAN/CV'], 
    'SetFooter'=>['Powered by PFSOFT | {PAGENO}'], 
    ] 
    ]); 

    /*------------------------------------*/ 
    Yii::$app->response->format = \yii\web\Response::FORMAT_RAW; 
    $headers = Yii::$app->response->headers; 
    $headers->add('Content-Type', 'application/pdf'); 
    /*------------------------------------*/ 

    // return the pdf output as per the destination setting 
    return $pdf->render(); 
    } 

对于我做了这样的事情查看:

<?php echo $this->render('_search-per-sales', ['model' => $searchModel]); ?> 

和子窗体_search每销售查看:

<?php $form = ActiveForm::begin([ 
     'action' => ['print-per-sales'], 
     'method' => 'post', 
    ]); ?> 

<?= $form->field($model, 'sales_id')->textInput() ?> 

<div class="form-group"> 
    <?= Html::submitButton(Yii::t('app', 'PRINT'), ['class' => 'fa fa-print btn btn-warning']) ?> 
</div> 

<?php ActiveForm::end(); ?> 

至于从actionPrintPerSales(_print每销售)渲染视图:

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     //'filterModel' => $searchModel, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      // 'customer_id', 
      [ 
       'label' => 'Nama Customer', 
       'value' => 'customer.first_name', 
      ], 
      [ 
       'attribute' => 'nilai_piutang', 
       'contentOptions' => ['style' => 'text-align:right'], 
       'format'=>['decimal',0], 
      ], 
      [ 
       'attribute' => 'total_bayar', 
       'contentOptions' => ['style' => 'text-align:right'], 
       'format'=>['decimal',0] 
      ], 
      [ 
       'attribute' => 'sisa_piutang', 
       'contentOptions' => ['style' => 'text-align:right'], 
       'format'=>['decimal',0] 
      ], 
      'faktur', 
      [ 
       'attribute' => 'tanggal_jatuh_tempo', 
       'contentOptions' => ['style' => 'text-align:center'], 
       'format' => ['date', 'php:d-M-Y'] 
      ], 
      'sales_id', 
      [ 
       'label' => 'Nama Sales', 
       'value' => function ($data){ return $data->kodeSales->nama; }, 
      ], 
     ], 
    ]); ?> 

有我的SQL查询过滤器,内部控制器有问题。我可以告诉我的MPDF工作,因为当我注释掉where子句:

// ->andWhere('sales_id' = $sales_id) 

PDF格式的工作,只有它显示了没有过滤sales_id的所有数据。

回答

1

尝试使用

->andFilterWhere(['sales_id' => $model->sales_id ]) 

可能是您$sales_id = $request->post('sales_id');不加载值作为你的预期..

+0

感谢您的帮助,但我通过修复where子句 - >和Where(['sales_id'] => $ model-> sales_id)到 - >和Where(['sales_id'=> $ model- > sales_id]) – JoenMarz

+0

@JoenMarz。是我的答案是正确的然后标记为接受..否则,如果是有用的标记作为有用.. – scaisEdge

+0

数组支架应该是 - > andFilterWhere(['sales_id'=> $ model-> sales_id]) – JoenMarz

0

由于使用了ActiveForm,因此该变量作为modelName[salesid]传递到您的帖子中,而不是sales_id。您可以填充模型中使用load从表单属性:

$model->load(Yii::$app->request->post()); 

然后,您可以通过筛选值:

$dataProvider = new ActiveDataProvider([ 
    'query' => PiutangCustomer::find() 
     ->where(['status_piutang' => '0']) 
     ->andWhere(['sales_id'] => $model->sales_id) 
     ->orderBy(['customer_id' => SORT_ASC]) 
]); 

你需要传递$modelrenderPartial

$content = $this->renderPartial('_print-per-sales', ['model' => $model, 'dataProvider' => $dataProvider]); 

而且然后通过$model到您的窗体中:

<?php echo $this->render('_search-per-sales', ['model' => $model]); ?> 
+0

,你可以在我的控制器看,我已经做到了。我的mpdf正常显示。我上面的问题是,如何显示mpdf,其中sales_id值等于我的textField值。 – JoenMarz

+0

您正在传递字符串“model”而不是对象'$ model',即'['model',...]'而不是'['model'=> $ model']。我已经用其他问题更新了答案。 – topher

+0

感谢您的帮助,但我通过修复where子句 - >和Where(['sales_id'] => $ model-> sales_id)到 - >和Where(['sales_id'=> $ model-> sales_id ]) – JoenMarz