The menu in the administration interface is dynamically
generated, letting all installed modules add new items
and folders to it. There is a set of classes under
the EBox::Menu namespace that
can be used to build menu structures. The important
ones are EBox::Menu::Item and
EBox::Menu::Folder.
The constructor for EBox::Menu::Item
takes two named arguments, text and
url. url should be
relative to the root path for the configuration interface, for example
the firewall packet filtering page has Firewall/Filter as
its url.
The EBox::Menu::Folder constructor does
not take an url argument, but it takes a
name one. The name is used internally as an
identifier in the javascript menu implementation.
Both items and folders have an optional
order argument in their constructors, it should
be an integer between 1 and 10, items in the menu are ordered from
lower to higher values. The default is 5.
A folder may contain items, so you can add
EBox::Menu::Item instances to a
EBox::Menu::Folder.
Finally, the way to add menu items and/or folders to the menu is
to implement the menu method in your module.
This method gets a EBox::Menu::Root instance
as an argument, and you can add as many items and folders to it as
you want. This is the menu function for the
firewall module:
Example 5.15. Adding folders and items to the menu
sub menu
{
my ($self, $root) = @_;
my $folder = new EBox::Menu::Folder('name' => 'Firewall',
'text' => __('Firewall'),
'order' => 4);
$folder->add(new EBox::Menu::Item('url' => 'Firewall/Filter',
'text' => __('Packet Filter')));
$folder->add(new EBox::Menu::Item('url' => 'Firewall/Redirects',
'text' => __('Redirects')));
$root->add($folder);
}