Mah*_*ery 6 php zend-framework magento
我正在尝试检查Magento中的新订单,如果它们存在,请向站点管理员发送PDF发票.除了PDF之外,一切都很棒.
尝试从外部创建PDF发票时,呈现的PDF中缺少所有结算信息.创建发票非常简单,但找不到缺少结算信息的原因对我来说是不可能的.这是我学到的.
我创建实际PDF发票的代码如下.这与默认情况下pdfinvoicesAction用于为admin后端(app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php:459)创建PDF的代码相同.
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();
?>
Run Code Online (Sandbox Code Playgroud)
这将创建一个有效的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);
Run Code Online (Sandbox Code Playgroud)
所以这就是发生的事情.我不知道怎么或为什么.真正的踢球者?在我的cron作业脚本中,如果我运行以下命令:
die(print_r($order->getPayment()->toArray()));
Run Code Online (Sandbox Code Playgroud)
所有的付款信息都在那里.
我在Magento网站的开发论坛上问这个没有运气.我真的希望有人可以帮助解决这个问题,因为我已经用尽了我的调试工作.非常感谢.
编辑:刚刚发现,虽然Mage::helper('payment')->getInfoBlock($order->getPayment())->setIsSecureMode(true)->toHtml()返回格式正确的HTML.->toPdf仍然没有回报.
好吧,我希望这对其他人有帮助。有时,当你提出一个详细的问题时,它会让你的思考更清晰。这是一个非常简单的解决方案,没有明确的错误消息表明问题是什么!
Magento 使用两个文件夹来存放模板文件adminhtml和frontend. 默认情况下,后端的支付数据助手 pdf 操作只有 .phtml 。我的脚本在前端运行,没有找到这个文件,并输出一个空字符串。
简而言之,如果 Magento <= 1.6.1 中的 PDF 发票在前端呈现时缺少账单信息,请使用以下文件:
app/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 文件清楚地告诉我问题是什么,我只是没能阅读。