Magento - 向销售添加批量操作>订单网格

时间:2012-03-29 17:29:33

标签: magento magento-1.5

编辑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>

3 个答案:

答案 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/

尝试第二种方法(使用事件 - 观察者方法),这似乎是更加升级证明的方式 感谢