2

予約用のバウチャーを含む PDF ドキュメントを生成しています。ポイントは、顧客が複数の人の部屋を予約できるということです。そのため、顧客が 1 つのバウチャーに依存しないように、2 つのバウチャーが必要です。

mpdf と html2pdf を使用する Yii の ePDF 拡張機能を使用しています。これは、単一のpdfを生成するための私のコードです:

//foreach voucher generate a pdf
    foreach($rhrs as $rhr) {
                $this->generatePDF($reservation, $rhr);
            }

PDF生成機能:

private function generatePDF($reservation, $rhr)
{

    $pdf = Yii::app()->ePdf->mpdf('','', 0, '', 0, 0, 0, 0, 0, 0, 'P');
    $pdf->WriteHTML( $this->renderPartial('voucher', array(
            'rhr'=>$rhr,
            'reservation'=>$reservation
        ), true) );

    $this->sendMailWithPDF($pdf, $reservation);
}

sendmailWithPDF 関数:

private function sendMailWithPDF($pdf, $reservation)
    {

        $content = $pdf->Output('', 'S');

        $content = chunk_split(base64_encode($content));
        $mailto = $reservation->emailaddress;
             ....

            $is_sent = @mail($mailto, $subject, "", $header);

問題は、これが 1 つの PDF で複数の電子メールを送信することです。複数のPDFを含む1つの電子メールを送信しようとしています。アレイを作ろうと思っていたのですが、最初は皆さんにお聞きしたかったのですが、これを適切に処理する方法についてどう思いますか?

前もって感謝します、

4

1 に答える 1

1

generatePDF()個人的には、関数を から切り離して、sendMailWithPDF()両方を個別に呼び出すことができるようにします。技術的には、PDF を生成するためだけに電子メールを送信する必要がある理由はありません。

代わりに、generatePDF()関数が単に PDF オブジェクトを返す場合は、関数に渡すことができるそれらの配列を作成できますsendMailWithPDF()

このようなもの:

//foreach voucher generate a pdf
$generatedPDFs = array();
foreach($rhrs as $rhr) {
        $generatedPDFs[] = $this->generatePDF($reservation, $rhr);
}
// Call the mail function outside of the pdf generator, but pass in the array instead
$this->sendMailWithPDF($generatedPDFs, $reservation);


private function generatePDF($reservation, $rhr)
{

    $pdf = Yii::app()->ePdf->mpdf('','', 0, '', 0, 0, 0, 0, 0, 0, 'P');
    $pdf->WriteHTML( $this->renderPartial('voucher', array(
            'rhr'=>$rhr,
            'reservation'=>$reservation
        ), true) );

    return $pdf;
}


private function sendMailWithPDF($pdf, $reservation)
{

    //Update this section to handle $pdf being an array
    $content = $pdf->Output('', 'S');

    $content = chunk_split(base64_encode($content));
    $mailto = $reservation->emailaddress;
    ....

    $is_sent = @mail($mailto, $subject, "", $header);
}

このコードは、あなたのシステムに基づいて私が書いたとおりには機能しないかもしれませんが、機能を分離して柔軟性を追加することで、私が何を意味するかを理解する必要があります。

于 2012-12-21T14:44:29.280 に答える