Маршрутизация в Magento не работает - PullRequest
3 голосов
/ 17 июня 2011

Я работаю над модулем для админки в Magento.Я пытаюсь следовать учебному пособию Алана Шторма на Администраторских контроллерах Magento , но не могу заставить мой контроллер что-либо делать.Я думаю, что это может быть связано с маршрутизацией, но я не уверен.Он показывает мне шаблон внешнего интерфейса с ошибкой 404.

(Примечание: Я включил весь соответствующий код здесь. Актуальный вопрос находится в самом низу. )

Модуль называется Mynamespace_Donor и находится в app / code / local / Mynamespace / Donor /.

Мой etc / config.xml выглядит следующим образом:

<?xml version="1.0"?>
<config>
    <modules>
        <Mynamespace_Donor>
            <version>0.1.0</version>
        </Mynamespace_Donor>
    </modules>
    <global>
        <helpers>
            <donor>
                <class>Mynamespace_Donor_Helper</class>
            </donor>
        </helpers>
        <resources>
            <donor_setup>
                <setup>
                    <module>Mynamespace_Donor</module>
                </setup>
            </donor_setup>
        </resources>
    </global>

    <admin>
        <routers>
            <donor>
                <use>admin</use>
                <args>
                    <module>Mynamespace_Donor</module>
                    <frontname>donor</frontname>
                </args>
            </donor>
        </routers>
    </admin>

    <adminhtml>
        <menu>
            <donor translate="title" module="donor">
                <title>Donor</title>
                <sort_order>42</sort_order>
                <children>
                    <manage_donors module="donor">
                        <title>Manage Donors</title>
                        <action>donor/index/index</action>
                    </manage_donors>
                </children>
            </donor>
        </menu>
    </adminhtml>
</config>

И мои контроллеры / IndexController.PHP выглядит так:

<?php
class Mynamespace_Donor_IndexController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();

        //create a text block with the name of "example-block"
        $block = $this->getLayout()
        ->createBlock('core/text', 'example-block')
        ->setText('<h1>This is a text block</h1>');

        $this->_addContent($block);

        $this->renderLayout();
    }
}

Пункт меню указывает мне на /index.php/donor/index/index/key/e98a..., который показывает страницу 404.Когда я пытаюсь перейти непосредственно к /donor, /index.php/donor, /index.php/donor/index и т. Д., Я все равно получаю 404 ошибки.

Если я удаляю <helpers> из конфигурации, Magento жалуется, что не можетНайди это.Если я удаляю секцию <adminhtml>, она перестает жаловаться, хотя у меня там все еще есть секция <admin><routers> (не знаю, нужен ли помощнику по маршрутизации или это вообще важно).

Я также пытался добавить этот блок под <adminhtml>, но когда я пытаюсь редактировать разрешения роли, я получаю белую страницу с этой ошибкой: Fatal error: Class 'Mage_Mynamespace_Donor_Helper_Data' not found in /home/mysite/public_html/magento_dev_1_10/app/Mage.php on line 520

<acl>
    <resources>
        <admin>
            <children>
                <donor translate="title" module="Mynamespace_Donor">
                    <title>Donors</title>
                    <sort_order>60</sort_order>
                    <children>
                        <manage_donors>
                            <title>Manage Donors</title>
                        </manage_donors>
                    </children>
                </donor>
            </children>
        </admin>
    </resources>
</acl>

Вопрос: Что я здесь не так делаю?Почему я не могу получить доступ к этому контроллеру?

И, наконец, в примере кода Алана URL начинался с имени модуля, но я бы хотел, чтобы мой начинался с /admin/donor вместо /donor.Какие изменения мне нужно внести для этого?


Редактировать 1 Конечная цель - создать новую вкладку в административной области для управления донорами и связанными данными в системе.Когда вы нажимаете на какой-то пункт меню, я хотел бы показать сетку и иметь вложенные вкладки и тому подобное.Я не хочу переопределить контроллер adminhtml - хотя я расширяю его согласно предложению Алана :

Единственное отличие от стандартного контроллера здесьчто мы расширяем Mage_Adminhtml_Controller_Action вместо Mage_Core_Controller_Varien_Action.Mage_Adminhtml_Controller_Action содержит важный код для проверки сеанса администратора, а также несколько методов, которые полезны в контексте консоли администратора.

Так что на этом рисунке нажатие на этот первый элемент подменю должно вызвать действие Indexмоего контроллера и показать сетку или что-то для управления донорами.

The menu

Ответы [ 3 ]

7 голосов
/ 17 июня 2011

Попробуйте заменить:

<frontname>donor</frontname>

с:

<frontName>donor</frontName>

Это исправит вашу ошибку 404.

5 голосов
/ 17 июня 2011
<config>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <mynamespace_donor before="Mage_Adminhtml">Mynamespace_Donor</mynamespace_donor>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

Попробуйте выше в вашем config.xml

Подробнее:

http://prattski.com/2010/06/24/magento-overriding-core-files-blocks-models-resources-controllers/

2 голосов
/ 17 июня 2011

По поводу фатальной ошибки;У вас есть module="Mynamespace_Donor" в разрешениях.Если вы посмотрите на учебник Алана, у него есть:

<tutorial_menu translate="title" module="adminhelloworld">

Он использует псевдоним модуля вместо имени модуля - adminhelloworld вместо Alanstormdotcom_Adminhelloworld.Magento пытается найти помощника для перевода названия.В вашем случае вам нужно:

<donor translate="title" module="donor">

donor исходит из вашего собственного конфигурационного файла:

<helpers>
    <donor> <!-- <<< This is the alias "donor" -->
        <class>Mynamespace_Donor_Helper</class>
    </donor>
</helpers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...