Я создал пользовательский модуль Magento, который расширяет функциональность основного заказа на продажу за счет некоторого пользовательского ввода.После размещения заказа я хотел бы отобразить эти данные на пользовательской вкладке на странице сведений о заказе в административной области.Мне удалось получить новую вкладку, отображаемую в списке вкладок, однако, когда я нажимаю на вкладку, она дает мне 404.
Вот мой код:
app / code / local / Zac /Attack / etc / config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Zac_Attack>
<version>0.1.0</version>
</Zac_Attack>
</modules>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<!-- Override Adminhtml module here. -->
<Zac_Attack_Adminhtml before="Mage_Adminhtml">Zac_Attack_Adminhtml</Zac_Attack_Adminhtml>
</modules>
</args>
</adminhtml>
</routers>
</admin>
<adminhtml>
<layout>
<updates>
<attack>
<file>attack.xml</file>
</attack>
</updates>
</layout>
</adminhtml>
<global>
<blocks>
<attack>
<class>Zac_Attack_Block</class>
</attack>
</blocks>
<!-- models, resources, etc -->
</global>
</config>
app / code / local / Zac / Attack / Block / Adminhtml / Sales / Order / View / Tab / Attack.php:
<?php
class Zac_Attack_Block_Adminhtml_Sales_Order_View_Tab_Design extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
protected function _construct()
{
parent::_construct();
$this->setTemplate( 'attack/sales/order/view/tab/attack.phtml' );
}
public function getTabLabel()
{
return $this->__( 'Attack' );
}
public function getTabTitle()
{
return $this->__( 'Attack' );
}
public function getTabClass()
{
return '';
}
public function getClass()
{
return $this->getTabClass();
}
public function getTabUrl()
{
// Here the url gets rewritten to my custom name, throws 404 when called...
// The url takes the form:
// http://mydomain.com/admin/sales_order/attack/order_id/1/key/65cbb0c2956dd9413570a2ec8761bef5/
return $this->getUrl('*/*/attack', array('_current' => true));
}
public function canShowTab()
{
return true;
}
public function isHidden()
{
return false;
}
public function getOrder()
{
return Mage::registry( 'current_order' );
}
}
app / code / local / Zac / Attack / controllers / Adminhtml / Sales / OrderController.php:
<?php
require_once "Mage/Adminhtml/controllers/Sales/OrderController.php";
class Zac_Attack_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{
public function viewAction()
{
// This doesn't get called when viewing the default order detail page.
// I should see the <h1> output as the only content on the page but I don't.
die( '<h1>viewAction()</h1>' );
}
public function attackAction()
{
// 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>');
}
}
app / design / adminhtml / default / default / layout / attack.xml
<?xml version="1.0" encoding="UTF-8"?>
<layout>
<adminhtml_sales_order_view>
<reference name="sales_order_tabs">
<action method="addTab">
<name>order_design_details</name>
<block>attack/adminhtml_sales_order_view_tab_design</block>
</action>
</reference>
</adminhtml_sales_order_view>
</layout>
То, что кажется неисправным, является переопределением контроллера.Ни переопределенный метод "viewAction ()", ни пользовательское действие "attackAction ()" не вызываются.Я могу сказать, что конфигурация подбирается, потому что когда я печатаю «Mage :: getConfig () -> getNode ('admin / routers / adminhtml')», я вижу следующий вывод:
Mage_Core_Model_Config_Element Object
(
[args] => Mage_Core_Model_Config_Element Object
(
[module] => Mage_Adminhtml
[modules] => Mage_Core_Model_Config_Element Object
(
[Mage_Index] => Mage_Index_Adminhtml
[Mage_Paygate] => Mage_Paygate_Adminhtml
[Mage_Paypal] => Mage_Paypal_Adminhtml
[widget] => Mage_Widget_Adminhtml
[Mage_GoogleOptimizer] => Mage_GoogleOptimizer_Adminhtml
[Mage_GoogleBase] => Mage_GoogleBase_Adminhtml
[Mage_Authorizenet] => Mage_Authorizenet_Adminhtml
[Mage_Bundle] => Mage_Bundle_Adminhtml
[Mage_Centinel] => Mage_Centinel_Adminhtml
[Mage_Compiler] => Mage_Compiler_Adminhtml
[connect] => Mage_Connect_Adminhtml
[Mage_Downloadable] => Mage_Downloadable_Adminhtml
[importexport] => Mage_ImportExport_Adminhtml
[Mage_PageCache] => Mage_PageCache_Adminhtml
[xmlconnect] => Mage_XmlConnect_Adminhtml
[EM_DeleteOrder_Adminhtml] => EM_DeleteOrder_Adminhtml
[find_feed] => Find_Feed_Adminhtml
[moneybookers] => Phoenix_Moneybookers
[Zac_Attack_Adminhtml] => Zac_Attack_Adminhtml
)
[frontName] => admin
)
[use] => admin
)
Итак, мой первый вопрос: я придерживаюсь правильного подхода для добавления настраиваемой вкладки на страницу?
Если я не придерживаюсь правильного подхода, можете ли вы сообщить мне, каков правильный подход, или предоставить ссылкукоторый четко описывает весь подход (слишком много фрагментов ответов при поиске информации Magento, недостаточно целых ответов).
Если я придерживаюсь правильного подхода, почему мой контроллер не переопределяет?
Хорошо, я надеюсь, что предоставил достаточно деталей, чтобы прояснить проблему.Если нет, не стесняйтесь размещать последующие вопросы в комментариях, и я буду рад прояснить - если я знаю, как.
Заранее благодарен за любую помощь.
Приветствия, Зак
PS Я заметил, что в разделе сообщества есть еще один модуль, переопределяющий тот же контроллер, но, похоже, переопределение также не действует.Несмотря на это, я полностью удалил сторонний модуль для целей отладки, чтобы гарантировать отсутствие помех.