5.3. El menú

El menú en el interfaz de la administración es dinámicamente generado, permitiendo a todos los módulos instalados añadir nuevos objetos y carpetas a él. Hay un juego de clases bajo el espacio de nombres EBox::Menu que pueden ser utilizadas para construir las estructuras del menú. Las importantes son EBox::Menu::Item y EBox::Menu::Folder.

El constructor para EBox::Menu::Item toma dos argumentos nombrados text y url. url debería ser relativo a la ruta raíz para el interfaz de configuración, por ejemplo, la página de filtrado de paquetes del firewall tiene Firewall/Filter como su url.

El constructor de EBox::Menu::Folder no toma el argumento url, pero toma el name. El nombre es utilizado internamente como un identificador en la implementación del menú javascript.

Ambos elementos y carpetas tienen un argumento opcional order en sus constructores, que debería ser un entero entre 1 y 10. Los elementos del menú están ordenador desde los valores más bajos a los más altos. El valor por defecto es 5.

Una carpeta puede contener elementos, por lo que se pueden añadir instancias de EBox::Menu::Item a EBox::Menu::Folder.

Finalmente, la forma de añadir elementos del menú y/o carpetas al menú es simplemente implementar la función menu en el módulo. Esta función toma una instancia EBox::Menu::Root como argumento, y puede añadir tantos elementos y carpetas como se quieran. Ésta es la función menu para el módulo firewall:

Ejemplo 5.15. Añadiendo carpetas y elementos al menú

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);
}