]project-open[ Core : Home
]project-open[ Core

Dynamic Menus

Requirements

Extension modules sometimes need to modify the menu structure of core modules. For example, a human resources modules may want to add a new submenu "Employees" in the "Users" main menu to show information about this specific kind of user.

Design

We implement configurable menus similar to views and components by storing all menu information in the database.
CREATE TABLE im_menus (
        menu_id                 integer
                                constraint im_menu_id_pk
                                primary key
                                constraint im_menu_id_fk
                                references acs_objects,
                                -- the name that should appear on the tab
        package_name            varchar(200) not null,
        name                    varchar(200) not null,
        url                     varchar(200) not null,
        sort_order              integer,
                                -- parent_id allows for tree view for navbars
        parent_menu_id          integer
                                constraint im_parent_menu_id_fk
                                references im_menus,
                                -- Make sure there are no two identical
                                -- menus on the same _level_.
                                constraint im_menus_name_un
                                unique(name, parent_menu_id)
);