2016-04-19 1 views
4

プレスタホップの内部構造を深く理解し、いくつかの部分を修正したいと思います。私はPDFで中止されています。私は私が内部のプロセスを把握することができますAdminPdfgenerateDeliverySlipPDFprestashop PDF生成プロセスについて混乱しています。ロジックを処理するコードはどこですか?

{if $order->delivery_number} 
     <a class="btn btn-default _blank" href="{$link->getAdminLink('AdminPdf')|escape:'html':'UTF-8'}&amp;submitAction=generateDeliverySlipPDF&amp;id_order={$order->id}"> 
     <i class="icon-truck"></i> 
    </a> 
    {/if} 

を処理するために使用されるコントローラを見つけることができませんしたいですか?私はgenerateDeliverySlipPDFを処理するメソッドを見つけることができません。

答えて

4

AdminPdfControllerは、/controllers/admin/AdminPdfController.phpに位置する。

URLのsubmitAction=generateDeliverySlipPDF部分は、このコントローラー内でメソッドprocessGenerateDeliverySlipPDF()を呼び出します。

public function processGenerateDeliverySlipPDF() 
{ 
    if (Tools::isSubmit('id_order')) { 
     $this->generateDeliverySlipPDFByIdOrder((int)Tools::getValue('id_order')); 
    } elseif (Tools::isSubmit('id_order_invoice')) { 
     $this->generateDeliverySlipPDFByIdOrderInvoice((int)Tools::getValue('id_order_invoice')); 
    } elseif (Tools::isSubmit('id_delivery')) { 
     $order = Order::getByDelivery((int)Tools::getValue('id_delivery')); 
     $this->generateDeliverySlipPDFByIdOrder((int)$order->id); 
    } else { 
     die(Tools::displayError('The order ID -- or the invoice order ID -- is missing.')); 
    } 
} 

このコントローラで使用すると、請求書、注文、...およびその他のPDFを生成するには、この1のような他の方法を見つけることができます:ここで

がこの方法です。

詳細が必要な場合はお気軽にお問い合わせください。


EDIT:

あなたはこれらのクラスをオーバーライドする必要があります適切な方法で書式を変更する場合:

/override/classes/pdf/PDFGenerator.php

<?php 

/** 
* @since 1.5 
*/ 
class PDFGenerator extends PDFGeneratorCore 
{ 

    /** 
    * @param bool $use_cache 
    * @param string $orientation 
    * @param string $format 
    */ 
    public function __construct($use_cache = false, $orientation = 'P', $format = 'A4') 
    { 
     TCPDF::__construct($orientation, 'mm', $format, true, 'UTF-8', $use_cache, false); 
     $this->setRTL(Context::getContext()->language->is_rtl); 
    } 
} 

/override/classes/pdf/PDF.php

<?php 

/** 
* @since 1.5 
*/ 
class PDF extends PDFCore 
{ 

    /** 
    * @param $objects 
    * @param $template 
    * @param $smarty 
    * @param string $orientation 
    */ 
    public function __construct($objects, $template, $smarty, $orientation = 'P', $format = 'A4') 
    { 
     parent::__construct($objects, $template, $smarty, $orientation); 
     $this->pdf_renderer = new PDFGenerator((bool)Configuration::get('PS_PDF_USE_CACHE'), $orientation, $format); 
    } 
} 

/override/controllers/admin/AdminPdfController.php

<?php 

class AdminPdfController extends AdminPdfControllerCore 
{ 
    public function generatePDF($object, $template) 
    { 
     switch($template) { 
      case PDF::TEMPLATE_DELIVERY_SLIP: 
       $format = array(210, 50000); // Replace with your desired size 
       break; 
      default: 
       $format = 'A4'; 
     } 

     $pdf = new PDF($object, $template, Context::getContext()->smarty, 'P', $format); 
     $pdf->render(); 
    } 
} 

今、あなたは、各PDFのフォーマットを指定することができます。 $formatについての情報はthis place

です。このコードはテストされていませんが、期待どおりに動作するはずです。問題が発生した場合はお知らせください。

Prestashopの内部クラスパスキャッシュをクリアするためにオーバーライドを追加した後に、/cache/class_index.phpを削除する必要があります。

+0

こんにちは、PDFをPOSロール紙に印刷するときに、ページャーのサイズをカスタマイズする方法はありますか? – Eva

+2

ページサイズとマージンについては、 '/ classes/pdf/PDFGenerator.php'の中の' writePage() 'メソッドをオーバーライドすることができます。このクラスは '/ tools/tcpdf/tcpdf.php'にあるTCPDFライブラリを拡張します。 –

+0

@FlorianLemaitreの答えに追加するだけで、生成された各PD​​Fには/ classes/pdfの独自のクラスがあります。たとえば、Delivery SlipsはHTMLTemplateDeliverySlip.phpによって制御されます。これらは変数を割り当て、結果のPDFファイルのいくつかのプロパティを制御し、もちろんテンプレートも割り当てます。また、 'PDFGenerator'クラスを変更するときにオーバーライドを使用することを忘れないでください。これにより、あなたの人生は長期的にはより簡単になります。 – Eihwaz

関連する問題