Можно Ли Переместить Узел Меню Администратора?


Мы используем модуль всплеска атрибутов Fishpig, который вставляет узел "Всплеск" на верхнем уровне меню администратора. Однако мы бы предпочли, чтобы он жил в меню каталога. Вот исходный XML, который модуль использует для вставки узла меню (в adminhtml.xml ):

 <menu>
    <attributeSplash translate="title" module="attributeSplash">
        <title>Splash</title>
        <sort_order>31</sort_order>
        <children>
            <pages translate="title">
                <title>Manage Pages</title>
                <action>attributeSplash_admin/adminhtml_page</action>
                <sort_order>11</sort_order>
            </pages>
            <groups translate="title">
                <title>Manage Groups</title>
                <action>attributeSplash_admin/adminhtml_group</action>
                <sort_order>6</sort_order>
            </groups>
        </children>
    </attributeSplash>
</menu>

Я создал отдельный модуль со следующим в нем adminhtml.xml . Это отключает исходный узел меню и создает новый с теми же дочерними элементами в каталоге меню:

<menu>
    <!-- Disable default menu node -->
    <attributeSplash>
        <disabled>1</disabled>
    </attributeSplash>
    <!-- Create replacement -->
    <catalog>
        <children>
            <attribute_splash translate="title" module="attributeSplash">
                <title>Attribute Splash (Brands)</title>
                <sort_order>100</sort_order>
                <children>
                    <pages translate="title">
                        <title>Manage Pages</title>
                        <action>attributeSplash_admin/adminhtml_page</action>
                    </pages>
                    <groups translate="title">
                        <title>Manage Groups</title>
                        <action>attributeSplash_admin/adminhtml_group</action>
                    </groups>
                </children>
            </attribute_splash>
        </children>
    </catalog>
</menu>
<!-- Access control nodes so non-administrators can be given access -->
<acl>
    <resources>
        <admin>
            <children>
                <catalog>
                    <children>
                        <attribute_splash translate="title" module="attributeSplash">
                            <title>Attribute Splash (Brands)</title>
                            <sort_order>100</sort_order>
                            <children>
                                <pages translate="title">
                                    <title>Manage Pages</title>
                                </pages>
                                <groups translate="title">
                                    <title>Manage Groups</title>
                                </groups>
                            </children>
                        </attribute_splash>
                    </children>
                </catalog>
            </children>
        </admin>
    </resources>
</acl>

Пока это будет работать нормально, но если модуль всплеска атрибутов Fishpig будет обновлен с помощью разных узлов меню, мне нужно будет обязательно изменить этот xml, чтобы он соответствовал. Что мне интересно, знает ли кто-нибудь о более чистом решении. Есть ли способ просто переместить узел меню, а не отключать его и создавать новый? Я бы не слишком удивился, если бы этого не было, но если есть, я хотел бы знать об этом, так как это было бы немного более устойчиво к обновлению.

Author: Zeke Farwell, 2013-09-16

3 answers

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

Просто небольшой совет, когда вы меняете расположение пункта меню, вы должны проверить метод _isAllowed в контроллере adminhtml. Вероятно, там есть строка кода типа

return Mage::getSingleton('admin/session')->isAllowed('admin/attributesplash');

Это должно быть изменено на

 return Mage::getSingleton('admin/session')->isAllowed('admin/catalog/attributesplash');

Чтобы разрешить пользователям, которые не являются суперадминистраторами, доступ к нему.

 4
Author: Sander Mangel, 2013-09-16 15:36:15

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

Редактировать: На самом деле, одним из способов, которым вы могли бы сделать перемещение, было бы перегрузить Mage_Adminhtml_Block_Page_Menu::getMenuArray() и изменить содержимое массива меню после его создания из базового XML.

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

 0
Author: kalenjordan, 2013-09-17 14:39:39

Для завершения ответа @Sander Mangel вам также следует проверить _setActiveMenu в контроллере, а также некоторые файлы блоков. Иногда вы можете отображать или скрывать некоторые кнопки (сохранять/редактировать /удалять) в зависимости от разрешений. Так что регистрируйтесь /Блоки/Adminhtml/Сетка, Редактируйте, Форма, Вкладки,...

 0
Author: eInyzant, 2017-05-30 10:45:50