Each navigation needs to be defined in some template
. The entire functionality of navigation is stored in the model /models/navigations.js
.
What should i know?
Each navigation needs to be defined in templates
(Pages section) and templates can contain unlimited counf of navigations, for example: mainmenu
, footer
, etc..
Example:
@{navigation mainmenu:Main menu}
@{navigation footer:Footer menu}
<!DOCTYPE html>
<html>
<head>
...
@{navigation ID:NAME}
command in the page templateID
Links need to be added into the navigation manually. Just open Pages
section and choose your navigation in the right panel. CMS shows all registered navigations:
Good to know:
Some links can be linked automatically if the user choose a page according to the sitemap. User can specify in the Page settings what fields can be synchronized in navigations:
Navigations are stored in a global static object: F.global.navigations
and each navigation needs to be rendered manually.
Navigation item:
// var nav = MAIN.navigations.navigation_id;
// For example:
var nav = MAIN.navigations.mainmenu;
nav.url;
// Contains relative URL addresses. It's a quick access to rendering sub-links according to the URL
// returns {Array Object}
nav.children;
// Contains all registered links
// returns {Array Object}
nav.dateupdated;
// The last date of update
// returns {Datetime}
nav.stringify();
// Serializes this navigation to JSON
// returns {String}
Link object:
var item = nav.url['/products/'];
// or
var item = nav.children[0];
item.parent;
// Contains a parent of this item and returns same object structure
// returns {Object}
item.level;
// Contains a number of level
// returns {Number}
item.children;
// Contains all children with same structure as this object
// returns {Array Object}
item.url;
// A link URL address
// returns {String}
item.name;
// A link name
// returns {String}
item.title;
// A title for tooltip
// returns {String}
item.target;
// A value for link "_target", can contain "_self" or "_blank"
// returns {String}
item.icon;
// An icon (font-awesome without "fa-")
// returns {String}
item.idpage;
// Page ID according to the sitemap
// returns {UID}
item.id;
// Unique identificator of link
// returns {String}
item.behaviour;
// This property can contain these values "default", "info", "warn", "highlight" or "special"
// This feature needs to be coded manually
// returns {String}
item.contains(url, [absolute]);
// Determines whether this item contains "url". It's a great solution for highlighting item in navigation
// @url {String} Relative URL address
// @absolute {Boolean} Only compares this item and its all childs (default: false)
// returns {Boolean}
I recommend to render a navigation in a layout
, but navigation can be rendered everywhere. Just follow your needs.
Quick rendering:
@{foreach m in MAIN.navigations.mainmenu.children)
<a href="@{m.url}">@{m.name}</a>
@{end}
Wich icon, tooltip and target:
@{foreach m in MAIN.navigations.mainmenu.children}
<a href="@{m.url}"@{if m.target === '_blank'} target="_blank"@{fi}@{if m.title} titlte="@{m.title}"@{fi}>@{if m.icon}<i class="fa fa-@{m.icon}"></i>@{fi}@{m.name}</a>
@{end}
With the first-level of children:
<nav>
@{foreach a in MAIN.navigations.mainmenu.children}
<a href="@{a.url}">@{a.name}</a>
@{if a.children.length}
<nav>
@{foreach b in a.children}
<a href="@{b.url}">@{b.name}</a>
@{end}
</nav>
@{fi}
@{end}
</nav>
Render children according to the URL:
@{if MAIN.navigations.mainmenu.url[url] && MAIN.navigations.mainmenu.url[url].parent}
<nav>
@{foreach a in MAIN.navigations.mainmenu.url[url].parent.children}
<a href="@{a.url}">@{a.name}</a>
<!-- Rendering the first-level of children -->
@{if a.children.length}
<nav>
@{foreach b in a.children}
<a href="@{b.url}">@{b.name}</a>
@{end}
</nav>
@{fi}
@{end}
</nav>
@{fi}