Magento не может создать MassAction через OrderController. Что происходит? - PullRequest
0 голосов
/ 27 января 2012

Меня раздражает, что этот код не работает.Любой совет?

Вновь созданное массовое действие не найдено, а 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 not found.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>');
    }
}

Ответы [ 2 ]

1 голос
/ 29 января 2012

Местоположение файла и имя 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 следует разместить здесь:

/ приложение / код / ​​местные / СЕИ / ShipMailInvoice / Контроллеры / Adminhtml / Продажа / OrderController.php

Начиная именно с этого

require_once "Mage / Adminhtml / controllers / Sales / OrderController.php";

class SNH_ShipMailInvoice_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{

    public function shipmailinvoiceAction()
0 голосов
/ 27 января 2012

Дело имеет значение здесь, сравните admin/sales_order/shipmailinvoice/key/ а также SNH/ShipMailInvoice/controllers/Adminhtml/Sales/OrderController.php. Вы должны определить url как admin/sales_order/shipMailInvoice/key/ или переименовать файл и класс соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...