configuration create - Ошибка Magento system.xml и 404 при попытке доступа к панели конфигурации





http-status-code-404 (3)


Привет, я думаю, что что-то не так с тегом действий в config.xml.

<action>adminhtml/tempest_main</action>

Если я не ошибаюсь, это будет ссылаться на модуль adminhtml, найденный в app / code / core / Mage / Adminhtml.

Каково имя вашего модуля и что у вас есть в папке ваших контроллеров.

Я считаю, что первым битом действия должно быть имя вашего контроллера, а затем путь к вашему контроллеру администратора и действию

Тег действия строится следующим образом.

<action>matrixrate/adminhtml_index/index</action>
       |--module--|--controller---|-action-|

НТН

Я пытаюсь реализовать некоторые параметры конфигурации для своего настраиваемого модуля. Мне удалось добавить вкладку и раздел в левой панели навигации. Но когда я хочу открыть раздел, я получаю страницу с ошибкой 404 без дополнительной информации.

До сих пор я пробовал все, чтобы заставить его работать. Чтение блогов, примеров и т. Д., Но я не могу найти ошибку. Может быть, кто-то из вас может объяснить мне, что я делаю неправильно.

Мой adminhtml.xml :

<?xml version="1.0" ?>
<config>
    <resources>
        <admin>
            <children>
                <system>
                    <children>
                        <config>
                            <children>
                                <tempest_section translate="title" module="Tempest">
                                    <title>Tempest</title>
                                </tempest_section>
                            </children>
                        </config>
                    </children>
                </system>
            </children>
        </admin>
    </resources>
</config>

Мой config.xml :

<?xml version="1.0"?>

<config>
    <modules>
        <Polyvision_Tempest>
            <version>0.1.0</version>
        </Polyvision_Tempest>
    </modules>


    <global>
        <helpers>
            <Tempest>
                <class>Polyvision_Tempest_Helper</class>
            </Tempest>  
        </helpers>
    </global>        

    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <tempest before="Mage_Adminhtml">Polyvision_Tempest_Adminhtml</tempest>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>


    <adminhtml>
        <menu>
            <menu1 translate="title" module="Tempest">
                <title>polyvision</title>
                <sort_order>60</sort_order>
                <children>
                    <menuitem1 module="Tempest">
                        <title>Tempest - Export</title>
                        <action>adminhtml/tempest_main</action>
                    </menuitem1>
                </children>                
            </menu1>
        </menu>
    </adminhtml>    

    <default>
        <tempest>
            <settings>
                <export_directory>/tmp/</export_directory>
            </settings>
        </tempest>
    </default>
</config>

My system.xml :

<?xml version="1.0" ?>
<config>
    <tabs>
        <polyvision module="Tempest" translate="label">
            <label>polyvision</label>
            <sort_order>100</sort_order>
        </polyvision>
    </tabs>
    <sections>
        <tempest_section module="Tempest" translate="label">
            <label>Tempest-Einstellungen</label>
            <sort_order>200</sort_order>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
            <tab>polyvision</tab>
            <groups>
                <settings translate="label">
                    <label>Settings</label>
                    <comment></comment>
                    <sort_order>10</sort_order>
                    <show_in_default>1</show_in_default>
                    <show_in_website>1</show_in_website>
                    <show_in_store>1</show_in_store>
                    <fields>
                        <export_directory translate="label tooltip comment">
                            <label>My Custom Field</label>
                            <comment>Some comment about my field</comment>
                            <tooltip>Field ToolTip</tooltip>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                        <frontend_input>text</frontend_input>
                        <source_model>adminhtml/system_config_text</source_model>
                    </export_directory>
                </fields>
            </settings>
        </groups>
    </tempest_section>
</sections>

Ну, мой модуль сам работает без проблем. Только настройки администратора не работают: /




Если это 404 в Chrome консоли администратора, то ваша проблема - это отсутствие роли ACL. Прочитайте эту статью о том, как ее настроить . (собственная ссылка)

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




Способ сделать это - манипулировать Site.Applications которая является сплющенным деревом всех приложений на вашем сайте.

Ради этих примеров мы предположим сайт под названием «MySite», где контент находится на локальном жестком диске по адресу: d:\mysite\www . Номер IIS на сайте - 3 и сайт находится в собственном пуле приложений, также называемом «MySite».

Мы также предположим следующую структуру папок для сайта

Для начала мы получаем сайт, на который хотим добавить приложение, мы будем использовать site переменной:

// Get my site
Site site = serverManager.Sites.First(s => s.Id == 3);

Корневое приложение «/»:

На каждом сайте есть «корневое» приложение. Если мы откроем applicationHost.config расположенный в %systemroot%\windows\system32\inetsrv\config и найдите узел <site> для нашего сайта, мы увидим следующее:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\www" />
  </application>
</site>

Каждый <site> содержит коллекцию <application> . Всегда будет хотя бы одно приложение, которое определяет корневое приложение, / .

Атрибут applicationPool указывает, какой пул приложений использовать.

Обратите внимание, что существует один дочерний элемент: virtualDirectory .

Каждое application имеет virtualDirectory коллекцию элементов virtualDirectory и в этой коллекции обычно будет хотя бы один элемент.

По умолчанию <virtualDirectory> в корневом приложении сообщает нам:

  • это это корень ( path="/" ) и
  • что он физически находится в файловой системе в d:\MySite\www ( physicalPath="d:\MySite\www" ).

path каждого virtualDirectory относится к path указанному в пути родительского application .

Добавление виртуального каталога:

Если бы мы хотели добавить виртуальный каталог к ​​«корню сайта», сопоставленному где-то еще в файловой системе, мы бы сделали:

Application rootApp = site.Applications.First(a => a.Path == "/");
rootApp.VirtualDirectories.Add("/vdir_1", @"D:\MySite\other_content");
serverManager.CommitChanges();

Результирующая конфигурация выглядит так:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
  </application>
</site>

И мы видим это в диспетчере IIS:

Добавление виртуального каталога в существующий виртуальный каталог:

Если бы мы хотели добавить дочерний виртуальный каталог в vdir1 мы бы сделали:

root.VirtualDirectories.Add("/vdir_1/sub_dir1", @"d:\MySite\more_content");

это приводит к:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
  </application>
</site>

Менеджер IIS:

При добавлении виртуальных каталогов нужно иметь в виду пару вещей:

  • Как уже упоминалось, виртуальный path всегда относится к пути родительского приложения
  • Последняя часть виртуального path eg /vdir_1 и .../sub_dir1 становится именем виртуального каталога
  • Совершенно законно иметь более одного виртуального каталога в одной физической папке
  • За исключением части имени пути виртуального каталога, все части пути должны существовать либо как физические пути, либо как виртуальные пути в корне сайта ( d:\MySite\www ). т.е. path должен иметь возможность наложить то, что уже есть, иначе виртуальный каталог не будет отображаться в диспетчере IIS.

Что касается этой последней точки, например, у нас нет физической папки или виртуального каталога /vdir_2 но следующий код совершенно легален:

root.VirtualDirectories.Add("/vdir_2/sub_dir1", @"d:\MySite\even_more_content");

Вы не увидите /vdir_2/sub_dir1 отображаются в диспетчере IIS, но это законно, и вы можете на самом деле перейти к нему. Мы также видим его в applicationHost.config :

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
</site>

Преобразование папки в приложение:

Если вы просто загрузили приложение ASP.NET в папку /app_1 на своем сайте и хотите превратить его в свое приложение, мы делаем следующее:

Application app = site.Applications.Add("/app_1", @"d:\MySite\www\app_1");
// set application pool, otherwise it'll run in DefaultAppPool
app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();    

В applicationHost.config мы видим, что добавлен новый элемент <application> :

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
</site>

В IIS мы видим:

Это эквивалентно щелчку правой кнопкой мыши «Конвертировать в приложение».

Добавление приложения в существующее приложение:

Добавление приложения в качестве дочернего элемента существующего приложения очень простое. Предположим, что мы хотим сделать /app_1/sub_app_1 под-приложение /app_1 :

Мы просто сделали бы:

Application app = 
  site.Applications.Add("/app_1/sub_app_1", @"d:\mysite\www\app_1\sub_app_1");
app.ApplicationPoolName ="MySite";

Результирующая конфигурация будет выглядеть так:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/sub_app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\www\app_1\sub_app_1" />
  </application>
</site>

В IIS:

Добавление виртуального каталога в приложение:

Теперь, если мы хотим добавить виртуальный каталог в это приложение, мы бы сделали:

Application app = site.Applications.First(a => a.Path == "/app_1");
app.VirtualDirectories.Add("/vdir_1", @"d:\MySite\other_content");

В applicationHost.config мы видим, что добавлен новый элемент <virtualDirectory> :

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
    <virtualDirectory path="/vdir_1" physicalPath="d:\MySite\other_content" />
  </application>
</site>

В IIS мы видим:

Снова важно отметить, что виртуальный путь /vdir1 всегда относится к пути содержащего приложения.

Преобразование существующего виртуального каталога в приложение:

Что делать, если мы хотим конвертировать только что созданный виртуальный каталог ( /app_1/vdir1 ) в приложение? Мы должны сделать это в два этапа:

// Get the application
Application app_1 = site.Applications.First(a => a.Path == "/app_1");
// Find the virtual directory
VirtualDirectory vdir_1 = app_1.VirtualDirectories.First(v => v.Path == "/vdir_1");
// Remove it from app_1
app_1.VirtualDirectories.Remove(vdir_1);
// Create our application
Application vdir_1_app = site.Applications.Add("/app_1/vdir_1", vdir_1.PhysicalPath);
// set application pool, otherwise it'll run in DefaultAppPool
vdir_1_app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();    

Полученное applicationHost.config выглядит так:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/vdir_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
  </application>
</site>

В диспетчере IIS мы видим:

Добавление приложения в существующий виртуальный каталог:

Что произойдет, если мы хотим добавить приложение в виртуальный каталог, как это работает? В этом примере мы добавим приложение в виртуальный каталог /vdir_1/sub_dir1 который мы создали ранее.

Application app = 
   site.Applications.Add("/vdir_1/sub_dir1/app_2", @"d:\mysite\other_content");
app.ApplicationPoolName = "MySite";
serverManager.CommitChanges();

Результирующая конфигурация выглядит так:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/vdir_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
  </application>
  <application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
  </application>
</site>

И в менеджере IIS мы видим:

Преобразование существующей дочерней папки в приложение:

В качестве окончательного примера мы хотим включить /other_apps/sub_app_1 в приложение:

Наш код выглядит так:

Application app = 
   site.Applications.Add("/other_apps/sub_app_1", @"d:\mysite\other_content");
app.ApplicationPoolName="MySite";
serverManager.CommitChanges();

Полученная конфигурация:

<site name="MySite" id="3">
  <application path="/" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="D:\MySite\www" />
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" />
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" />
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" />
  </application>
  <application path="/app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" />
  </application>
  <application path="/app_1/vdir_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" />
  </application>
  <application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
  </application>
  <application path="/other_apps/sub_app_1" applicationPool="MySite">
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" />
  </application>
</site>

В диспетчере IIS:

Надеюсь, это поможет объяснить взаимосвязь между сайтами, приложениями и виртуальными каталогами.







magento configuration system http-status-code-404