如何为插件创建子菜单项。
我检查了系统模块,有子菜单类,并在管理员上过滤。在没有黑客攻击或覆盖类的情况下这是否可能。
谢谢。
你当然可以。
布局响应对象具有方法“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;
}
}