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
173 174 175 |
# File 'app/helpers/alchemy/pages_helper.rb', line 173 def @page..presence || Language.current_root_page.try(:meta_description) end |
#meta_keywords ⇒ Object
177 178 179 |
# File 'app/helpers/alchemy/pages_helper.rb', line 177 def @page..presence || Language.current_root_page.try(:meta_keywords) end |
#meta_robots ⇒ Object
181 182 183 |
# File 'app/helpers/alchemy/pages_helper.rb', line 181 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 106 107 |
# File 'app/helpers/alchemy/pages_helper.rb', line 102 def page_active?(page) Alchemy::Deprecation.warn("page_active? helper is deprecated and will be removed from Alchemy 6.0") @_page_ancestors ||= @page.self_and_ancestors.contentpages @_page_ancestors.include?(page) end |
#page_title(options = {}) ⇒ Object
Returns current page title
Options:
prefix: "" # Prefix
separator: "" # Separating prefix and title
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'app/helpers/alchemy/pages_helper.rb', line 155 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 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.
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 145 146 |
# File 'app/helpers/alchemy/pages_helper.rb', line 119 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 |