Module: EffectiveBreadcrumbsHelper

Defined in:
app/helpers/effective_breadcrumbs_helper.rb

Instance Method Summary collapse

Instance Method Details



32
33
34
35
36
37
38
39
# File 'app/helpers/effective_breadcrumbs_helper.rb', line 32

def breadcrumbs_fallback(page = nil, root: 'Home')
  (:ol, class: 'breadcrumb') do
    [
      (:li, link_to(root, root_path, title: root)),
      (:li, ((page.title if page.respond_to?(:title)) || page || @page_title || 'Here'), class: 'active')
    ].join().html_safe
  end
end

#render_breadcrumbs(menu, page) ⇒ Object Also known as: render_breadcrumb



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/helpers/effective_breadcrumbs_helper.rb', line 2

def render_breadcrumbs(menu, page)
  menu = Effective::Menu.find_by_title(menu.to_s) if menu.kind_of?(String) || menu.kind_of?(Symbol)
  return "Menu '#{menu}' does not exist".html_safe unless menu.present?

  return breadcrumbs_fallback(page) if !page.present?

  menu_item = if page.kind_of?(Effective::Page)
    url = effective_pages.page_path(page)
    menu.menu_items.find { |item| item.menuable == page || item.title == page.title || item.url == url }
  elsif page.kind_of?(String)
    downcased = page.downcase
    menu.menu_items.find { |item| item.title.downcase == downcased || item.url == downcased }
  else
    menu.menu_items.find { |item| item.menuable == page || item.title == page || item.url == page }
  end

  return breadcrumbs_fallback(page) unless menu_item.present?

  parents = menu.menu_items.select { |item| item.lft < menu_item.lft && item.rgt > menu_item.rgt }

  (:ol, class: 'breadcrumb') do
    (
      parents.map { |parent| (:li, link_to(parent.title, parent.url.presence || '#', title: parent.title)) } +
      [(:li, page.try(:title) || page, class: 'active')]
    ).join().html_safe
  end
end