When using Fae's installer and generators, navigation items to the objects you create will automatically get added to the side nav of the admin. Behind the scenes the generator is updating app/models/concerns/fae/navigation_concern.rb
. However, this file is available for you to customize the nav however you like.
To define your own navigation structure you just need to update the structure
method within app/models/concerns/fae/navigation_concern.rb
. Here's a look at an example:
def structure
[
item('Products', subitems: [
item('Apparel', class: 'custom-class', path: admin_apparel_path),
item('Beverage', subitems: [
item('Wines', subitems: [
item('Releases', path: admin_releases_path)
]),
item('Board Games', path: admin_board_games_path)
]),
]),
item('Pages', subitems: [
item('Home', path: fae.edit_content_block_path('home')),
item('About Us', path: fae.edit_content_block_path('about_us'))
])
]
end
structure
is an array of nav items which are defined with the item
method. The item
method takes a title as the first argument, followed by a hash of options. To nest subitems within an item, pass an array of items into the subitems
option.
item(title, options = {})
Option | Type | Description |
---|---|---|
path | string or named route* | the link's href (defaults to '#') |
class | string | a custom class that gets added to the link |
subitems | array of items | nested links to be displayed in a dropdown |
* if you want to access a named route that exists in Fae, call the named route on the fae
object.
fae.pages_path
The first and second level of structure
defines the main nav and dropdown items respectively. When you click into a section that has third and/or fourth levels, a side nav will appear to display those items.
def structure
[
item('Top nav item', subitems: [
item('Top nav dropdown item', subitems: [
item('Side nav item', subitems: [
item('Side nav nested item', path: '#')
])
]),
])
]
end
If the main nav dropdown doesn't have a defined path
, it will search the subitems
for the first available path to link to.
Items with no subitems or active path will be removed from the navigation altogether.
Note: the side nav is hidden in forms by design, this removes clutter and allows the user to focus on the content of that object.
Dynamic content can be defined in navigation_concern.rb
. Here's an example:
module Fae
module NavigationConcern
extend ActiveSupport::Concern
def structure
[
item('Teams', subitems: team_subitems)
# scaffold inject marker
]
end
private
def team_subitems
teams_arr = [ item('Team List', path: admin_teams_path) ]
Team.all.each do |team|
teams_arr << item(team.name, subitems: [
item('Coaches', path: admin_team_coaches_path(team)),
item('Players', path: admin_team_players_path(team))
])
end
teams_arr
end
end
end