Запутался в процессе создания PDF-файла prestashop. Где код для обработки логики?

Запутался в процессе создания PDF-файла prestashop. Где код для обработки логики?

19.04.2016 04:40:54 Просмотров 58 Источник

Я хочу глубоко понять prestahop внутри структуры и изменить некоторые части. Я застрял в PDF-файле. Я хочу не могу найти контроллер, используемый для обработки AdminPdf и generateDeliverySlipPDF

    {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.

У вопроса есть решение - Посмотреть?

Ответы - Запутался в процессе создания PDF-файла prestashop. Где код для обработки логики? / Confused about prestashop PDF generated process. Where is the code to handle the logic?

Является ответом!
Florian Lemaitre

19.04.2016 05:14:41

AdminPdfControllerнаходится по /controllers/admin/AdminPdfController.php.

В submitAction=generateDeliverySlipPDF часть URL-адреса будет вызывать метод 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-файлы.

Не стесняйтесь спрашивать, нужна ли вам дополнительная информация.


РЕДАКТИРОВАТЬ:

Если вы хотите изменить формат надлежащим образом, вам придется переопределить эти классы:

/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в этом месте

Этот код не был протестирован, но должен работать, как ожидалось. Дайте мне знать, если у вас возникнут какие-либо проблемы.

Вам нужно будет удалить /cache/class_index.phpпосле добавления этих переопределений очищает кэш путей внутренних классов Prestashop.

https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61030970_36721003
Привет, Вы как настроить размер пейджера при печати PDF в рулонной бумаге pos?
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61031418_36721003
Если вы говорите о размере страницы и полях, вы можете переопределить метод writePage()внутри /classes/pdf/PDFGenerator.php. Этот класс расширяет Георгиев библиотека, расположенная в /tools/tcpdf/tcpdf.php.
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61033037_36721003
Просто чтобы добавить к ответу @FlorianLemaitre, каждый созданный PDF-файл имеет свой собственный класс в /classes / pdf, например, квитанции доставки контролируются HTMLTemplateDeliverySlip.РНР. Они назначают переменные и управляют некоторыми свойствами результирующих PDF-файлов, а также назначают шаблоны, конечно. Кроме того, не забудьте использовать переопределения при изменении класса PDFGenerator- это сделает вашу жизнь намного проще в долгосрочной перспективе.
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61033916_36721003
Я пытаюсь печатать на рулонной бумаге Pos. Разрыв страницы раздражает. Можно ли отключить разрыв страницы, пока он не закончит контент.
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61059274_36721003
@Ева я отредактировал свой ответ с решением. Пожалуйста, дайте мне знать, если это работает.
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61059281_36721003
@Eihwaz как ты думаешь, это хороший путь? ;)
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61065539_36721003
@FlorianLemaitre Привет, о классе AdminPdfController. Где этот класс должен был называться? Как я понимаю, исходный проект назывался AdminPdfControllerCore. И мне нужно изменить его на AdminPdfController, верно? Казалось, AdminPdfController никогда не вызывается
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61067707_36721003
Это новый класс, который вы должны создать в папке переопределения. Вы можете ознакомиться с официальной документацией PrestaShop override
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61067758_36721003
Вам нужно удалить /cache/class_index.phpпосле добавления этих переопределений очищает кэш классов Prestashop.
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment61069611_36721003
Я сделал небольшую поправку, я поставил переключатель в PDF.РНР. Поэтому мне не нужно переопределять AdminPdfController. Другое дело может быть гораздо сложнее. Я не уверен, есть ли у вас решение или нет. Я зафиксировал высоту бумаги. Если я хочу настроить высоту страницы в соответствии с содержанием. У вас есть какие-нибудь идеи
https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/36721003#comment69037322_36721003
@FlorianLemaitre: я переопределяю AdminPdfControllerв моем модуле и добавляю функцию, которая просто вызывает $this->generateDeliverySlipPDFByIdOrder($order_id);я неправильно вызываю функцию generate PDF?
richard

05.09.2018 07:04:04

спасибо за эту тему,

Я хотел бы спросить вас о случае генерации pdf спереди?

я.е это часть истории.ТПЛ

 `{if $order.details.invoice_url}
    <a href="{$order.details.invoice_url}"><i class="material-icons">&#xE415;</i></a>`

я нашел $заказа.подробности.invoice_url определяется в OrderPresenter.РНР и OrderPresenter использовать HistoryController, чтобы получить invoice_url.

Поэтому я смотрю в historyController

if ((bool) Configuration::get('PS_INVOICE') && OrderState::invoiceAvailable($order->current_state) && count($order->getInvoicesCollection())) {
$url_to_invoice = $context->link->getPageLink('pdf-invoice', true, null, 'id_order='.$order->id);
            if ($context->cookie->is_guest) {
                $url_to_invoice .= '&amp;secure_key='.$order->secure_key;
            }
        }

getPageLink использовать "в формате PDF-фактуры" ,я взгляну на способ getPageLink и вижу, что "в PDF-фактуры" - это контроллер... проблема в том, что я не знаю, где этот контроллер? помогите пожалуйста

https://stackoverflow.com/questions/36720210/confused-about-prestashop-pdf-generated-process-where-is-the-code-to-handle-the/52189387#comment91329266_52189387
Это не ответ, а добавление к проблеме. для таких вещей лучше всего добавить комментарий к существующему вопросу.
Закрыть X