编辑4/4/12
我还有一个问题:
我解决了我的问题,但它在列表顶部添加了我的选项。如何将其排序为我对列表底部的选择?
请查看我的工作config.xml
文件内容的答案......
我在这里寻求深入的帮助,因为我已经在这里待了很长一段时间,而且似乎无处可去。
背景
我希望为我们的客户制作一张可打印的RMA表格,以便他们更方便地退货/换货。
我在此扩展程序的帮助下完成了此操作:http://www.magentocommerce.com/magento-connect/admin-order-printing-extension.html
(如果需要,请下载此内容以查看目录结构)
它为订单添加了一个按钮,然后我进入并编辑了表单/表单布局,使其成为RMA(或具有RMA内容)。
一切都很好,但是,我们必须进入每个订单并按下按钮才能打印。
我们确实需要一个Mass Action
才能提高效率和实用性。
问题
我尝试了不同的方法来实现这一点,但我真的需要帮助。最近我尝试使用{{1的第二种方法 - 来学习本教程(http://www.blog.magepsycho.com/adding-new-mass-action-to-admin-grid-in-magento/)但我似乎无法让它发挥作用。
有人可以更深入地解释(这是我尝试的最后一种方法),这样我就可以使用这个模块了吗?
我在events
(根据教程)
config.xml
在<events>
<core_block_abstract_prepare_layout_before>
<observers>
<orderprint_core_block_abstract_prepare_layout_before>
<class>orderprint/observer</class>
<method>addRmaAction</method>
</orderprint_core_block_abstract_prepare_layout_before>
</observers>
</core_block_abstract_prepare_layout_before>
</events>
我添加了这个(根据教程)
Nastnet/OrderPrint/Model/Observer.php
(对不起上面的杂乱代码 - 我能突出显示它的唯一方法)
编辑1(4/2/12) 这是我模块的config.xml文件。我现在必须使用重写/覆盖方法(删除我尝试使用事件)。如果你看到任何东西,包括它需要的确切结构,请告诉我......
减去<?php class Nastnet_OrderPrint_Model_Observer {
public function addRmaAction($observer) {
$block = $observer->getEvent()->getBlock();
if(get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
&& $block->getRequest()->getControllerName() == 'sales_order')
{
$block->addItem('pdfrma_order', array(
'label' => 'Print RMA',
'url' => Mage::app()->getStore()->getUrl('nastnet/controller/action'),
));
}
} }
代码:
<config>
答案 0 :(得分:2)
我已经找到了正确的句柄和所有内容以使其正常工作(在本文的帮助下:http://mydons.com/simple-example-using-magento-event-observer/)
在config.xml文件中,我必须在<adminhtml>
句柄之后创建新的<config>
句柄。这让我走向了正确的“深度”。这是整个config.xml文件减去<config>
句柄(因为它不能正确粘贴):
<modules>
<Nastnet_OrderPrint>
<version>0.1.3</version>
</Nastnet_OrderPrint>
</modules>
<adminhtml>
<events>
<core_block_abstract_prepare_layout_before>
<observers>
<Nastnet_OrderPrint_Model_Observer>
<type>singleton</type>
<class>Nastnet_OrderPrint_Model_Observer</class>
<method>addRmaAction</method>
</Nastnet_OrderPrint_Model_Observer>
</observers>
</core_block_abstract_prepare_layout_before>
</events>
</adminhtml>
<global>
<blocks>
<adminhtml>
<rewrite>
<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>
这是我需要的部分,最终在这里是正确的:
<adminhtml>
<events>
<core_block_abstract_prepare_layout_before>
<observers>
<Nastnet_OrderPrint_Model_Observer>
<type>singleton</type>
<class>Nastnet_OrderPrint_Model_Observer</class>
<method>addRmaAction</method>
</Nastnet_OrderPrint_Model_Observer>
</observers>
</core_block_abstract_prepare_layout_before>
</events>
</adminhtml>
它指向我的观察者文件(基于正确的事件): app / code / local / Nastnet / OrderPrint / Model / Observer.php 。这显然是我的addRmaAction
。
我还有一个问题:
这使我的选项位于列表的顶部。如何将其排序为我对列表底部的选择?
Observer.php
<?php
class Nastnet_OrderPrint_Model_Observer
{
public function addRmaAction($observer)
{
$block = $observer->getEvent()->getBlock();
if(get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
&& $block->getRequest()->getControllerName() == 'sales_order')
{
$block->addItem('rmamassprint', array(
'label' => 'Print Return/Exchange',
'url' => Mage::app()->getStore()->getUrl('orderprint/order/pdfRma'),
));
}
}
}
答案 1 :(得分:0)
对于初学者,你确认你的观察者是否被召唤?只需添加Mage::log("Observer called");
并观看system.log文件..
答案 2 :(得分:0)
以下是向Sales&gt;添加批量操作的工作教程;订单网格: http://www.blog.magepsycho.com/adding-new-mass-action-to-admin-grid-in-magento/
尝试第二种方法(使用事件 - 观察者方法),这似乎是更加升级证明的方式 感谢