Действие контроллера Magento - PullRequest
2 голосов
/ 07 апреля 2011

Хорошо, очень точно, мне был поручен модуль администрирования Magento, который не включает макеты, блоки или представления.Ничто не должно быть отображено.Тем не менее, когда я вызываю действие в контроллере adminhtml моего модуля, Magento продолжает пытаться отобразить макет и, если это не удается, перенаправляет на панель мониторинга с сообщением «Не удалось загрузить источник для: http://www.example.com/index.php/admin/modulename/adminhtml_index/actioname" бла, бла, бла».

Теперь я посмотрел на выходные данные FireBug Net для привычного системного действия, такого как очистка кэша, например: http://www.example.com/index.php/admin/cache/flushSystem/key/88848f202df8f254b3db13762ad7e949/, и это также отвечает «Не удалось загрузить источник для: * 1008».*

Прежде всего, это должен быть контроллер, который расширяет Mage_Adminhtml_Controller_Action, потому что в противном случае я не могу сказать, вошел ли администратор в систему и имеет ли разрешение на действия моего контроллера.Во-вторых, у меня нет системы отладки (и моя компания обходится дешево, чтобы тратить деньги на разработку программного обеспечения), поэтому я вынужден делать отладку для человека.Итак, мой вопрос: как же отладить мой код и получить вывод из Magento без загрузки макета и блоков рендеринга?Я попытался вывести в методе predispatch и выйти до его окончания, и это РАБОТАЕТ, но я бы предпочел не делать никакого кода в predispatch.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Когда Firebug говорит «Не удалось загрузить источник», это означает, что нет данных для отображения, как правило, во время перенаправления 302.При перенаправлении отправляются только заголовки, а не тело.Это соответствует тому, что вы испытываете.

Во-вторых, ваш URL содержит admin/modulename/adminhtml_index/actionname, который состоит из четырех частей.В Magento должно быть только три части, такие как «маршрутизатор / контроллер / действие», какая часть у вас является дополнительной?

Когда у вас есть правильное действие, не вызывайте $this->loadLayout()->renderLayout(), потому что этозагрузить макет.Для вывода любого другого контента используйте:

$this->getResponse()->setBody($content);
1 голос
/ 07 апреля 2011

Если вам нужно добавить только панель конфигурации, то это делается через system.xml, а ACL описывается через config.xml или adminhtml.xml

ваше приложение / etc / modules / Your_Extension.xml будет

<config>
    <modules>
        <Your_Extension>
            <active>true</active>
            <codePool>local</codePool>
        </Your_Extension>
    </modules>
</config>

ваше приложение / код / ​​локальное / ваше / расширение / etc / config.xml будет

<?xml version="1.0"?>
<config>
    <modules>
        <Your_Extension>
            <version>0.1.0</version>
        </Your_Extension>
    </modules>
    <adminhtml>
        <acl>
            <resources>
                <admin>
                    <children>
                        <system>
                            <children>
                                <config>
                                    <children>
                                        <extension>
                                            <title>Extension section</title>
                                        </extension>
                                    </children>
                                </config>
                            </children>
                        </system>
                    </children>
                </admin>
            </resources>
        </acl>
    </adminhtml>
</config>

и приложение / код / ​​локальное / ваше / расширение / etc / system.xml

<?xml version="1.0"?>
<config>
    <sections>
        <extension>
            <label>extension</label>
            <tab>sales</tab>
            <frontend_type>text</frontend_type>
            <sort_order>306</sort_order>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
            <groups>
                <general translate="label comment">
                    <comment><![CDATA[short description for one field extension]]></comment>
                    <label>General</label>
                    <frontend_type>text</frontend_type>
                    <sort_order>1</sort_order>
                    <show_in_default>1</show_in_default>
                    <show_in_website>1</show_in_website>
                    <show_in_store>1</show_in_store>
                    <fields>
                        <enable_extension>
                            <label>Activate extension</label>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_yesno</source_model>
                            <sort_order>1</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                            <comment><![CDATA[Activation flag you can access later from code]]></comment>
                        </enable_extension>
                    </fields>
                </general>
            </groups>
        </extension>
    </sections>
</config>

это все, что вам нужно для определения нового расширения, имеющего одно поле конфигурации на стороне администратора и требующего только три файла: Your_Extension.xml, config.xml и system.xml.

Контроллерам не нужно, что когда-либо, и определенно не требуется проверка в контроллере, если администратор вошел в систему, поскольку это обрабатывается ACL

...