Module: Alchemy::PagesHelper
- Includes:
- BaseHelper, ElementsHelper
- Defined in:
- app/helpers/alchemy/pages_helper.rb
Instance Method Summary collapse
-
#language_links(options = {}) ⇒ Object
Renders links to language root pages of all published languages.
- #meta_description ⇒ Object
- #meta_keywords ⇒ Object
- #meta_robots ⇒ Object
-
#page_active?(page) ⇒ Boolean
Returns true if page is in the active branch.
-
#page_title(options = {}) ⇒ Object
Returns current page title.
- #picture_essence_caption(content) ⇒ Object
-
#render_breadcrumb(options = {}) ⇒ Object
Returns page links in a breadcrumb beginning from root to current page.
-
#render_menu(menu_type, options = {}) ⇒ Object
Renders a menu partial.
-
#render_page_layout ⇒ Object
Renders the layout for current page.
-
#render_site_layout ⇒ Object
Renders a partial for current site.
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
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
#language_links(options = {}) ⇒ Object
Renders links to language root pages of all published languages.
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( = {}) = { linkname: "name", show_title: true, spacer: "", reverse: false, }.merge() languages = Language.on_current_site.published.with_root_page.order("name #{[: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: }, ) end |
#meta_description ⇒ Object
171 172 173 |
# File 'app/helpers/alchemy/pages_helper.rb', line 171 def @page..presence || Language.current_root_page.try(:meta_description) end |
#meta_keywords ⇒ Object
175 176 177 |
# File 'app/helpers/alchemy/pages_helper.rb', line 175 def @page..presence || Language.current_root_page.try(:meta_keywords) end |
#meta_robots ⇒ Object
179 180 181 |
# File 'app/helpers/alchemy/pages_helper.rb', line 179 def "#{@page.robot_index? ? "" : "no"}index, #{@page.robot_follow? ? "" : "no"}follow" end |
#page_active?(page) ⇒ Boolean
Returns true if page is in the active branch
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( = {}) return "" if @page.title.blank? = { prefix: "", suffix: "", separator: "", }.update() title_parts = [[:prefix]] if response.status == 200 title_parts << @page.title else title_parts << response.status end title_parts << [:suffix] title_parts.reject(&:blank?).join([:separator]).html_safe end |
#picture_essence_caption(content) ⇒ Object
8 9 10 |
# File 'app/helpers/alchemy/pages_helper.rb', line 8 def (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 ( = {}) = { separator: ">", page: @page, restricted_only: false, reverse: false, link_active_page: false, }.merge() pages = [:page]. self_and_ancestors.contentpages. accessible_by(current_ability, :see) if .delete(:restricted_only) pages = pages.restricted end if .delete(:reverse) pages = pages.reorder("lft DESC") end if [:without].present? without = .delete(:without) pages = pages.where.not(id: without.try(:collect, &:id) || without.id) end render "alchemy/breadcrumb/wrapper", pages: pages, 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
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 (, = {}) root_node = Alchemy::Node.roots.find_by( menu_type: , language: Alchemy::Language.current, ) if root_node.nil? warning("Menu with type #{} not found!") return end render("alchemy/menus/#{}/wrapper", menu: root_node, options: ) rescue ActionView::MissingTemplate => e warning <<~WARN Menu partial not found for #{}. #{e} WARN end |
#render_page_layout ⇒ Object
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_layout ⇒ Object
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 |