Действие контроллера Magento

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

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

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


person Community    schedule 07.04.2011    source источник
comment
только дурак может винить компанию в том, что она слишком бедна для отладчиков с открытым исходным кодом, таких как xdebug   -  person Anton S    schedule 08.04.2011
comment
Вы должны знать подробности моей компании.   -  person    schedule 08.04.2011


Ответы (2)


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

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

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

$this->getResponse()->setBody($content);
person clockworkgeek    schedule 07.04.2011
comment
Итак, как остановить отправку действия и предотвратить перенаправление 302? - person ; 08.04.2011
comment
Это перенаправление, потому что ваш URL не существует. Перенаправление на панель инструментов — это то, как администратор обычно обрабатывает отсутствующие страницы. - person clockworkgeek; 08.04.2011
comment
Хорошо, это решило мою проблему. Приходится загружать и рендерить макет, который можно удалить после отладки. Спасибо. - person ; 08.04.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>

И app/code/local/Your/Extension/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.

person Anton S    schedule 07.04.2011