我正在尝试检查Magento中是否有新订单,如果有,请向网站管理员发送PDF发票。除了pdf之外,一切都很好。
尝试外部创建PDF发票时,呈现的PDF中缺少所有帐单信息。创建发票是相当直接的,但我不可能找到丢失帐单信息的原因。这是我学到的。
下面是创建实际pdf发票的代码。这与默认pdfinvoicesAction中用于为管理员后端创建PDF的代码相同(app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php:459)。
cron/Invoice.php

<?php
  /* $order is a valid Mage_Sales_Model_Order object */

  $invoices = $order->getInvoiceCollection();
  $pdfInvoice = Mage::getModel('sales/order_pdf_invoice');
  $pdf = $pdfInvoice->getPdf($invoices);

  $pdfFile = $pdf->render();
?>

这将创建一个有效的pdf,包含所有订单信息减去帐单。隔离原因,我发现在以下(默认)文件中,订单帐单信息是一个空字符串-当我通过magento后端检索发票时,它返回一个包含所有帐单信息的格式化字符串。
app/core/Mage/Sales/Model/Order/Pdf/Abstract.php:221
    /* Payment */
    $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
        ->setIsSecureMode(true)
        ->toPdf();

    // $paymentInfo is an empty string when rendering a PDF externally,
    // and formatted as expected when rendering a PDF via the admin panel

    $payment = explode('{{pdf_row_separator}}', $paymentInfo);

所以就是这样。我不知道为什么。真正的踢球者?在cron作业脚本中,如果运行以下命令:
die(print_r($order->getPayment()->toArray()));

所有的付款信息都在那里。
我在Magento网站的开发论坛上问到这个问题时,运气不佳。我真的希望有人能帮我澄清这个问题,因为我已经用尽了我的调试努力。非常感谢。
编辑:刚刚发现whileMage::helper('payment')->getInfoBlock($order->getPayment())->setIsSecureMode(true)->toHtml()返回格式正确的html。->toPdf仍然不返回任何内容。

最佳答案

我希望这能帮助别人。有时候当你问一个详细的问题时,它会让你想得更清楚。这是一个非常简单的解决方案,没有明确的错误信息表明是什么问题!
magento对模板文件使用两个文件夹adminhtmlfrontend。默认情况下,后端的payment data helper pdf操作只有一个.phtml。我的脚本在前端运行,没有找到这个文件,并且输出了一个空字符串。
简而言之,如果您的magentoapp/design/adminhtml/default/default/template/paygate/info/pdf.phtml
然后将其复制/粘贴到:
app/design/frontend/base/default/template/paygate/info/pdf.phtml(或者如果您愿意,您的自定义模板目录)
事后看来,我可能应该为cron脚本使用后端布局。
编辑:今天我了解了magento中的var/log/system.log文件…(为了清楚起见,重新编辑)这个/var/log/system.log文件清楚地告诉了我问题出在哪里,我只是没能读懂。

07-28 02:18
查看更多