2012-01-27 44 views
0

我对这段代码不起作用感到有些恼火。有什么建议?Magento无法通过OrderController创建MassAction。这是怎么回事?

新创建的massAction没有找到,而是404?

config.xml文件:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <SNH_ShipMailInvoice> 
      <version>0.1.0</version> 
     </SNH_ShipMailInvoice> 
    </modules> 

    <global> 
     <events> 
      <!-- Event to attach observer to --> 
      <core_block_abstract_to_html_before> 
       <observers> 
        <SNH_ShipMailInvoice> 
         <type>singleton</type> 
         <!-- Observer location (e.g. SW/GridExample/Model) --> 
         <class>SNH_ShipMailInvoice_Model_Observer</class> 
         <!-- Function to call --> 
         <method>addMassAction</method> 
        </SNH_ShipMailInvoice> 
       </observers> 
      </core_block_abstract_to_html_before> 
     </events> 
    </global> 

    <admin> 
     <routers> 
      <adminhtml> 
       <args> 
        <modules> 
         <!-- Override Adminhtml module here. --> 
         <SNH_ShipMailInvoice before="Mage_Adminhtml">SNH_ShipMailInvoice</SNH_ShipMailInvoice> 
        </modules> 
       </args> 
      </adminhtml> 
     </routers> 
    </admin> 

</config> 

Observer.php工作正常,并显示(下图)的选项:

<?php 
class SNH_ShipMailInvoice_Model_Observer 
{ 
    public function addMassAction($observer) 
    { 
     $block = $observer->getEvent()->getBlock(); 
     // Check if this block is a MassAction block 
     if ($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction) { 
      // Check if we're dealing with the Orders grid 
      if ($block->getParentBlock() instanceof Mage_Adminhtml_Block_Sales_Order_Grid) { 
       // The first parameter has to be unique, or you'll overwrite the old action. 
       $block->addItem('ship_mail_invoice', array(
         'label' => Mage::helper('sales')->__('Ship, Mail and Invoice'), 
         'url' => $block->getUrl('*/*/shipmailinvoice'), 
        ) 
       ); 
      } 
     } 
    } 

现在,当我选择新创建的选项,我收到找不到404错误。该URL类似于admin/sales_order/shipmailinvoice/key/

OrderController.php文件是SNH/ShipMailInvoice/controllers/Adminhtml/Sales/OrderController.php:这里

require_once('Mage/Adminhtml/controllers/Sales/OrderController.php'); 

class SNH_ShipMailInvoice_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController 
{ 

    public function shipmailinvoiceAction() 
    { 
     // This should be called when the url has the pattern '*/*/attack' (as it does 
     // when displaying my custom tab) however clicking this tab gives a 404. 
     die('<h1>attackAction()</h1>'); 
    } 
} 
+0

固定! 路由器应该是: < - 这里重写Adminhtml模块。 - > SNH_ShipMailInvoice_Adminhtml 和OrderController在/ app /代码/本地/ SNH/ShipMailInvoice /控制器/ Adminhtml /销售/ OrderController。PHP – 2012-01-29 19:02:24

回答

1

文件位置和XML命名是非常具体的

config.xml中:

<admin> 
    <routers> 
     <adminhtml> 
      <args> 
       <modules> 
        <!-- Override Adminhtml module here. --> 
        <SNH_ShipMailInvoice_Adminhtml before="Mage_Adminhtml">SNH_ShipMailInvoice_Adminhtml</SNH_ShipMailInvoice_Adminhtml> 
       </modules> 
      </args> 
     </adminhtml> 
    </routers> 
</admin> 

而且OrderController应该放在这里:

/应用/代码/本地/ SNH/ShipMailInvoice/controllers/Adminhtml/Sales/OrderController.php

用的正是这种

require_once “法师/ Adminhtml /控制器/销售/ OrderController.php” 启动;

class SNH_ShipMailInvoice_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController 
{ 

    public function shipmailinvoiceAction() 
0

案例事项,比较 admin/sales_order/shipmailinvoice/key/SNH/ShipMailInvoice/controllers/Adminhtml/Sales/OrderController.php。您应该将url定义为admin/sales_order/shipMailInvoice/key/或相应地重命名文件和类。

+0

我改变网址:ShipMailInvoice(每个字上端盖)解析为管理/ sales_order的/ ShipMailInvoice /按键/ 仍然是404错误 – 2012-01-28 15:46:53

+0

嗯,你确定适当的''为您的操作部分存在于你的模块'adminhtml.xml'?此外,添加此部分后,您必须注销并登录到管理员,因为当前登录的用户的acl存储在会话中。 – Zyava 2012-01-29 13:10:08