View source for Customizable secondary navigation

Status: Evaluation

{{toc numerate=1}}

===Introduction===
  * customizable secondary navigation (Menu) out of the box apart from the so called bookmarks
    * most users won't fiddle with the theme to create their own navigation, see theme section
    * there is already the ##menu_tag## for this purpose, shorter (usually) version of headline for use in menus
    * the session contains the general menu and the user menu (also called bookmarks), it is up to the theme how they are used

The table menu determines the menu via the user_id and the language.
The language field was important prior to the use of Unicode, currently it is only used to show the default menu according the supported browser language for guests.

To add the possibility to add more than one menu per user it requires an additional identifier and a descriptor.

  * user -> [menu]
    * user_id
  * system -> [menu_default]
    * user_id (system_user_id) + lang

The user can create or select the menu via a drop-down in the menu tab, each menu should given a unique name.

How it should ensure that the user and default bookmarks are always recognized as such.
  * reserved keyword as name or predefined flag

menu session identifier
  * bookmarks
  * custom menu

So only menus used throughout the entire wiki should be put in the session. (?) 

===Implementation===

database, functions, actions, handler, session, installer, theme


====Database Changes====
Add a unique menu_id for each menu.
  * menu
    * menu_id
    * name (unique tag)
    * description (optional, e.g. Introduction Course)
    * user_id
    * menu_lang
    * flag [default bookmarks]
  * menu_item
    * menu_item_id
    * menu_id
    * page_id
    * menu_title
    * menu_position

The menu name tag can be either set individual or set automatically, ##'menu' . $++##
  * e.g. ##~{{navigation menu="menu5"}}## using cluster and ##$this->tag## for context
  * if the menu name should be used as selector it must be unique

Installer
  * adapt

Upgrade
  * split menu table into ##menu## and ##menu_item##

The custom menu can be used for example as data source for chapter navigation or additional menus. 

===Display===
menu as
  * list
  * dropdown (##<select>##)

===Future Ideas===

===See also===
  * ((/Dev/Release/R6.1/NavigationAction Navigation action))

===Feedback===
  * Please provide feedback