Menu

The menu also known as Navigation Bar, is the main way of navigation by Decidim.

Decidim Menu

After you install Decidim you can see it in several ways, depending on:

  1. Which modules do you have activated

  2. Which contents do you have in your database

If you have the default modules and no contents, then you will only see Home and Help.

Depending in the kind of space and module, then you can see or not some of the spaces:

  • For participatory processes, it appears when there is some published content by an administrator.

  • For assemblies, it appears when there is some published content by an administrator.

  • For conferences, you need to enable the module and it appears when there is some published content by an administrator.

  • For initiatives, you need to enable the module. Every participant can see it, as anyone can create one. That is because is a bottom-up kind of mechanism.

Starting with 0.25.dev, Decidim Menu Api has been modified, in order to improve developer and administrators experience. The changes on the menu has deprecated the previous menu.item call, in favour of menu.add_item that has the following structure:

menu.add_item :identifier, # String or symbol to uniquely define the menu
              link_caption,
              link_path or url
              options: {
                position: # Optional,
                if: # Optional,
                active: # Optional,
                icon_name: # Optional ,
                submenu: # Optional,
              }

Additionally, the new menu api will allow to interact with the menu in several ways:

Decidim.menu :user_menu do |menu|
  menu.remove_item :identifier
  menu.move :identifier, after: :anchor_identifier
  menu.move :identifier, before: :anchor_identifier
end

Example usage:

Starting from a default menu like:

Decidim Menu

After applying the below initializer, the menu rendering will be modified to:

# config/initializers/decidim.user_menu.rb

Decidim.menu :user_menu do |menu|
  menu.remove_item :user_interests
  menu.move :own_user_groups, after: :account
  menu.move :authorizations, before: :notifications_settings
end
Decidim Menu

The menu Structure

Decidim uses internally a number of menus that are being used in various admin sections. Those menus are being defined inside the engine or admin_engine file of a decidim module. The menus are being defined as Decidim.menu :identifier. In order to render those menus, there are a number of methods that can be used:

  • main_menu in admin section

  • sidebar_menu will render the secondary admin section

  • simple_menu will render any submenus

There is also a NavBar links module made by the community that you can use to add your custom links.

Finally if you want to dive in the code that handles this, a good starting point is the Menu API.