Быстрый вопрос (помните об этом при чтении):
Почему эта ошибка возникает ( в объяснении ) и как я могу редактировать pdfRmaAction()
для правильной работы (Mass Action Printing) ???
** Работа в Magento v.1.10.1.0
которая совпадает с v.1.5.1.0
Долгосрочное объяснение:
Я загрузил это расширение ( http://www.magentocommerce.com/magento-connect/admin-order-printing-extension.html ), чтобы добавить кнопку в каждый заказ, чтобы при входе в заказ у вас был дополнительная кнопка для печати RMA (настраивается из этих расширений. Модель pdf – превращена в пользовательскую форму RMA на основе счета-фактуры)
Он отлично работает. Тем не менее, я хочу добавить печать Mass Action, чтобы вы могли проверить несколько заказов и выбрать « Печать RMA» из раскрывающегося списка и распечатать формы для этих заказов.
В файле расширения config.xml
(app / code / local / Nastnet / OrderPrint / etc /) внутри тегов <config>
:
<modules> <Nastnet_OrderPrint> <version>0.1.3</version> </Nastnet_OrderPrint> </modules> <global> <blocks> <adminhtml> <rewrite> <sales_order_grid>Nastnet_OrderPrint_Block_Sales_Order_Grid</sales_order_grid> <!-- ADDED THIS FOR MASS ACTION PRINTING --> <sales_order_view>Nastnet_OrderPrint_Block_Sales_Order_View</sales_order_view> </rewrite> </adminhtml> </blocks> <rewrite> <Nastnet_OrderPrint_OrderController> <from><![CDATA[#/\w+/sales_order/print/#]]></from> <to>/orderprint/order/print/</to> </Nastnet_OrderPrint_OrderController> </rewrite> <models> <Nastnet_OrderPrint> <class>Nastnet_OrderPrint_Model</class> </Nastnet_OrderPrint> </models> <pdf> <order> <default>Nastnet_OrderPrint/order_pdf_items_order_default</default> <grouped>Nastnet_OrderPrint/order_pdf_items_order_grouped</grouped> </order> </pdf> </global> <admin> <routers> <Nastnet_OrderPrint> <use>admin</use> <args> <module>Nastnet_OrderPrint</module> <!-- This is used when "catching" the rewrite above --> <frontName>orderprint</frontName> </args> </Nastnet_OrderPrint> </routers> </admin>
по<modules> <Nastnet_OrderPrint> <version>0.1.3</version> </Nastnet_OrderPrint> </modules> <global> <blocks> <adminhtml> <rewrite> <sales_order_grid>Nastnet_OrderPrint_Block_Sales_Order_Grid</sales_order_grid> <!-- ADDED THIS FOR MASS ACTION PRINTING --> <sales_order_view>Nastnet_OrderPrint_Block_Sales_Order_View</sales_order_view> </rewrite> </adminhtml> </blocks> <rewrite> <Nastnet_OrderPrint_OrderController> <from><![CDATA[#/\w+/sales_order/print/#]]></from> <to>/orderprint/order/print/</to> </Nastnet_OrderPrint_OrderController> </rewrite> <models> <Nastnet_OrderPrint> <class>Nastnet_OrderPrint_Model</class> </Nastnet_OrderPrint> </models> <pdf> <order> <default>Nastnet_OrderPrint/order_pdf_items_order_default</default> <grouped>Nastnet_OrderPrint/order_pdf_items_order_grouped</grouped> </order> </pdf> </global> <admin> <routers> <Nastnet_OrderPrint> <use>admin</use> <args> <module>Nastnet_OrderPrint</module> <!-- This is used when "catching" the rewrite above --> <frontName>orderprint</frontName> </args> </Nastnet_OrderPrint> </routers> </admin>
по<modules> <Nastnet_OrderPrint> <version>0.1.3</version> </Nastnet_OrderPrint> </modules> <global> <blocks> <adminhtml> <rewrite> <sales_order_grid>Nastnet_OrderPrint_Block_Sales_Order_Grid</sales_order_grid> <!-- ADDED THIS FOR MASS ACTION PRINTING --> <sales_order_view>Nastnet_OrderPrint_Block_Sales_Order_View</sales_order_view> </rewrite> </adminhtml> </blocks> <rewrite> <Nastnet_OrderPrint_OrderController> <from><![CDATA[#/\w+/sales_order/print/#]]></from> <to>/orderprint/order/print/</to> </Nastnet_OrderPrint_OrderController> </rewrite> <models> <Nastnet_OrderPrint> <class>Nastnet_OrderPrint_Model</class> </Nastnet_OrderPrint> </models> <pdf> <order> <default>Nastnet_OrderPrint/order_pdf_items_order_default</default> <grouped>Nastnet_OrderPrint/order_pdf_items_order_grouped</grouped> </order> </pdf> </global> <admin> <routers> <Nastnet_OrderPrint> <use>admin</use> <args> <module>Nastnet_OrderPrint</module> <!-- This is used when "catching" the rewrite above --> <frontName>orderprint</frontName> </args> </Nastnet_OrderPrint> </routers> </admin>
В (app / code / local / Nastnet / OrderPrint / Block / Sales / Order /) в Grid.php
:
class Nastnet_OrderPrint_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid { protected function _prepareMassaction() { parent::_prepareMassaction(); // Append new mass action option $this->getMassactionBlock()->addItem('rmaprint', array('label' => $this->__('Print RMA'), 'url' => $this->getUrl('orderprint/order/pdfRma'))); } }
Это приводит к желаемому результату вставки « Print RMA » в раскрывающемся меню на экране «Продажи»> «Заказы».
В файле OrderController.php
(app / code / local / Nastnet / OrderPrint / controllers /) я добавил это [скопировал и отредактировал pdfinvoicesAction()
в app / code / core / Mage / Adminhtml / controller / Sales / OrderController .php:
public function pdfRmaAction(){ $orderIds = $this->getRequest()->getPost('order_ids'); //print_r($orderIds); $flag = false; if (!empty($orderIds)) { foreach ($orderIds as $orderId) { $invoices = Mage::getResourceModel('sales/order_invoice_collection') ->setOrderFilter($orderId) ->load(); //print get_class($invoices); //print_r($invoices->getSize()); if ($invoices->getSize() > 0) { $flag = true; if (!isset($pdf)){ $pdf = Mage::getModel('Nastnet_OrderPrint/order_pdf_order')->getPdf(array($order)); } else { $pages = Mage::getModel('Nastnet_OrderPrint/order_pdf_order')->getPdf(array($order)); $pdf->pages = array_merge ($pdf->pages, $pages->pages); } } } if ($flag) { return $this->_prepareDownloadResponse( 'rma'.Mage::getSingleton('core/date')->date('Ym-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf' ); } else { $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.')); $this->_redirect('*/*/'); } } $this->_redirect('*/*/'); }
Это приводит к ошибке в фактическом pdf …
Fatal error: Call to a member function getStore() on a non-object in /chroot/home/artizara/dev.artizara.com/html/app/code/local/Nastnet/OrderPrint/Model/Order/Pdf/Order.php on line 60
Однако, если вы заходите в порядок и нажимаете кнопку « Печать RMA» (вместо того, чтобы пытаться передать Mass Action), тогда она работает Just Fine!
Мое длинное объяснение приводит к следующему: почему возникает эта ошибка и как я могу редактировать pdfRmaAction()
для правильной работы (Mass Action Printing) ???
Проблема в том, что вы используете переменную $order
которая не задана в качестве параметра для функции getPdf
. Вы должны быть в порядке с этой функцией:
public function pdfRmaAction() { $orderIds = $this->getRequest()->getPost('order_ids'); $flag = false; if (!empty($orderIds)) { foreach ($orderIds as $orderId) { $order = Mage::getModel('sales/order')->load($orderId); $flag = true; $order->setOrder($order); if (!isset($pdf)) { $pdf = Mage::getModel('Nastnet_OrderPrint/order_pdf_order')->getPdf(array($order)); } else { $pages = Mage::getModel('Nastnet_OrderPrint/order_pdf_order')->getPdf(array($order)); $pdf->pages = array_merge($pdf->pages, $pages->pages); } } if ($flag) { return $this->_prepareDownloadResponse( 'rma'.Mage::getSingleton('core/date')->date('Ym-d_H-i-s').'.pdf', $pdf->render(), 'application/pdf' ); } else { $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.')); $this->_redirect('*/*/'); } } $this->_redirect('*/*/'); }