content_breadcrumbs_block.rb
1.6 KB
1
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class BreadcrumbsPlugin::ContentBreadcrumbsBlock < Block
settings_items :show_cms_action, :type => :boolean, :default => true
settings_items :show_profile, :type => :boolean, :default => true
settings_items :show_section_name, :type => :boolean, :default => true
attr_accessible :show_cms_action, :show_profile, :show_section_name
def self.description
N_("<p>Display a breadcrumb of the current content navigation.</p><p>You could choose if the breadcrumb is going to appear in the cms editing or not.</p> <p>There is either the option of display the profile location in the breadcrumb path.</p>")
end
def self.short_description
N_('Breadcrumb')
end
def self.pretty_name
N_('Breadcrumbs Block')
end
def help
N_('This block displays breadcrumb trail.')
end
def cacheable?
false
end
def api_content
links = []
links << profile_link
links << page_links
{ links: links.compact.flatten }
end
private
def profile_link
return nil if (api_content_params || {})[:profile].blank?
profile = environment.profiles.find_by(identifier: api_content_params[:profile])
return nil if profile.blank?
{ :name => profile.name, :url => "/#{profile.identifier}" }
end
def page_links
return nil if (api_content_params || {})[:page].blank?
page = owner.articles.find_by(path: api_content_params[:page])
return nil if page.blank?
page_trail(page)
end
def page_trail(page)
links = page.ancestors.reverse.map { |p| { :name => p.title, :url => p.full_path } } || []
links << { :name => page.title, :url => page.full_path }
end
end