插件子菜单管理员

时间:2014-04-27 15:35:46

标签: php plugins impresspages

如何为插件创建子菜单项。

我已经检查了系统模块,它有子菜单类,并在管理员上过滤。如果没有黑客攻击或覆盖课程,这是否可行。

感谢。

1 个答案:

答案 0 :(得分:1)

当然可以。

布局响应对象有方法' setLayoutVariable'。可接受的变量之一是“子菜单”。如果提供Ip \ Menu \ Item对象的数组,则将生成子菜单。这是一个例子。把它放在Plugin \ Application \ Event.php文件中:

<?php

namespace Plugin\Application;


class Event
{
    public static function ipBeforeController()
    {

        if (true) { //find out some kind of a condition when you want a submenu. (eg. ipRequest()->getControllerClass() == 'Plugin\XXX\AdminController')
            $submenu = array();
            $submenuItem = new \Ip\Menu\Item();
            $submenuItem->setTitle('Test');
            $submenuItem->setUrl('http://www.example.com');
            $submenu[] = $submenuItem;

            if (is_object(ipResponse()) && method_exists(ipResponse(), 'setLayoutVariable')) {
                ipResponse()->setLayoutVariable('submenu', $submenu);
            }

        }
    }

}

您也可以使用过滤器过滤主菜单。将以下代码添加到Plugin \ Application \ Filter.php文件中:

<?php

namespace Plugin\Application;


class Filter {
    /**
     * @param \Ip\Menu\Item[] $menu
     * @param $info
     */
    public static function ipAdminMenu ($menu, $info)
    {
        //modify $menu

        return $menu;
    }
}