Module: Alchemy::PagesHelper

Includes:
BaseHelper, ElementsHelper
Defined in:
app/helpers/alchemy/pages_helper.rb

Instance Method Summary collapse

Methods included from ElementsHelper

#element_dom_id, #element_preview_code, #element_preview_code_attributes, #element_tags, #element_tags_attributes, #render_element, #render_elements

Methods included from ElementsBlockHelper

#element_view_for

Methods included from UrlHelper

#download_alchemy_attachment_path, #download_alchemy_attachment_url, #full_url_for_element, #show_alchemy_page_path, #show_alchemy_page_url, #show_page_path_params

Methods included from BaseHelper

#message_icon_class, #page_or_find, #render_flash_notice, #render_icon, #render_message, #shorten, #warning

Instance Method Details

Renders links to language root pages of all published languages.

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • linkname (String) — default: 'name'

    Renders name/code of language, or I18n translation for code.

  • show_title (Boolean) — default: true

    Renders title attributes for the links.

  • spacer (String) — default: ''

    Renders the passed spacer string. You can also overwrite the spacer partial: “alchemy/language_links/_spacer”.

  • reverse (Boolean) — default: false

    Reverses the ordering of the links.


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/helpers/alchemy/pages_helper.rb', line 26

def language_links(options = {})
  options = {
    linkname: "name",
    show_title: true,
    spacer: "",
    reverse: false,
  }.merge(options)
  languages = Language.on_current_site.published.with_root_page.order("name #{options[:reverse] ? "DESC" : "ASC"}")
  return nil if languages.count < 2

  render(
    partial: "alchemy/language_links/language",
    collection: languages,
    spacer_template: "alchemy/language_links/spacer",
    locals: { languages: languages, options: options },
  )
end

#meta_descriptionObject


171
172
173
# File 'app/helpers/alchemy/pages_helper.rb', line 171

def meta_description
  @page.meta_description.presence || Language.current_root_page.try(:meta_description)
end

#meta_keywordsObject


175
176
177
# File 'app/helpers/alchemy/pages_helper.rb', line 175

def meta_keywords
  @page.meta_keywords.presence || Language.current_root_page.try(:meta_keywords)
end

#meta_robotsObject


179
180
181
# File 'app/helpers/alchemy/pages_helper.rb', line 179

def meta_robots
  "#{@page.robot_index? ? "" : "no"}index, #{@page.robot_follow? ? "" : "no"}follow"
end

#page_active?(page) ⇒ Boolean

Returns true if page is in the active branch

Returns:

  • (Boolean)

102
103
104
105
# File 'app/helpers/alchemy/pages_helper.rb', line 102

def page_active?(page)
  @_page_ancestors ||= Page.ancestors_for(@page)
  @_page_ancestors.include?(page)
end

#page_title(options = {}) ⇒ Object

Returns current page title

Options:

prefix: ""                 # Prefix
separator: ""              # Separating prefix and title

153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'app/helpers/alchemy/pages_helper.rb', line 153

def page_title(options = {})
  return "" if @page.title.blank?

  options = {
    prefix: "",
    suffix: "",
    separator: "",
  }.update(options)
  title_parts = [options[:prefix]]
  if response.status == 200
    title_parts << @page.title
  else
    title_parts << response.status
  end
  title_parts << options[:suffix]
  title_parts.reject(&:blank?).join(options[:separator]).html_safe
end

#picture_essence_caption(content) ⇒ Object


8
9
10
# File 'app/helpers/alchemy/pages_helper.rb', line 8

def picture_essence_caption(content)
  content.try(:essence).try(:caption)
end

#render_breadcrumb(options = {}) ⇒ Object

Returns page links in a breadcrumb beginning from root to current page.

Options:

separator: %(<span class="separator">></span>)      # Maybe you don't want this separator. Pass another one.
page: @page                                         # Pass a different Page instead of the default (@page).
without: nil                                        # Pass Page object or array of Pages that must not be displayed.
restricted_only: false                              # Pass boolean for displaying restricted pages only.
reverse: false                                      # Pass boolean for displaying breadcrumb in reversed reversed.

117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'app/helpers/alchemy/pages_helper.rb', line 117

def render_breadcrumb(options = {})
  options = {
    separator: ">",
    page: @page,
    restricted_only: false,
    reverse: false,
    link_active_page: false,
  }.merge(options)

  pages = options[:page].
    self_and_ancestors.contentpages.
    accessible_by(current_ability, :see)

  if options.delete(:restricted_only)
    pages = pages.restricted
  end

  if options.delete(:reverse)
    pages = pages.reorder("lft DESC")
  end

  if options[:without].present?
    without = options.delete(:without)
    pages = pages.where.not(id: without.try(:collect, &:id) || without.id)
  end

  render "alchemy/breadcrumb/wrapper", pages: pages, options: options
end

#render_menu(menu_type, options = {}) ⇒ Object

Renders a menu partial

Menu partials are placed in the `app/views/alchemy/menus` folder Use the `rails g alchemy:menus` generator to create the partials

Parameters:

  • - (String)

    Type of the menu

  • - (Hash)

    A set of options available in your menu partials


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'app/helpers/alchemy/pages_helper.rb', line 83

def render_menu(menu_type, options = {})
  root_node = Alchemy::Node.roots.find_by(
    menu_type: menu_type,
    language: Alchemy::Language.current,
  )
  if root_node.nil?
    warning("Menu with type #{menu_type} not found!")
    return
  end

  render("alchemy/menus/#{menu_type}/wrapper", menu: root_node, options: options)
rescue ActionView::MissingTemplate => e
  warning <<~WARN
    Menu partial not found for #{menu_type}.
    #{e}
  WARN
end

#render_page_layoutObject

Renders the layout for current page.

Page layout files belongs in /app/views/alchemy/page_layouts/

Falls back to /app/views/alchemy/page_layouts/standard if the page_layout partial is not found.


50
51
52
53
54
55
# File 'app/helpers/alchemy/pages_helper.rb', line 50

def render_page_layout
  render @page, page: @page
rescue ActionView::MissingTemplate
  warning("PageLayout: '#{@page.page_layout}' not found. Rendering standard page_layout.")
  render "alchemy/page_layouts/standard", page: @page
end

#render_site_layoutObject

Renders a partial for current site

Place a rails partial into app/views/alchemy/site_layouts

and name it like your site name.

Example:

<%= render_site_layout %>

renders app/views/alchemy/site_layouts/_default_site.html.erb for the site named “Default Site”.


69
70
71
72
73
74
# File 'app/helpers/alchemy/pages_helper.rb', line 69

def render_site_layout
  render current_alchemy_site
rescue ActionView::MissingTemplate
  warning("Site layout for #{current_alchemy_site.try(:name)} not found. Please run `rails g alchemy:site_layouts`")
  ""
end