2012-01-27 30 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