Method: Alchemy::ElementsHelper#render_elements
- Defined in:
- app/helpers/alchemy/elements_helper.rb
#render_elements(options = {}, &blk) ⇒ Object
Renders elements from given page
Examples:
Render only certain elements:
<header>
<%= render_elements only: ['header', 'claim'] %>
</header>
<section id="content">
<%= render_elements except: ['header', 'claim'] %>
</section>
Render elements from global page:
<footer>
<%= render_elements from_page: Alchemy::Page.find_by(page_layout: 'footer') %>
</footer>
Custom elements finder:
Having a custom element finder class:
class MyCustomNewsArchive
def elements(page:)
news_page.elements.named('news').order(created_at: :desc)
end
private
def news_page
Alchemy::Page.where(page_layout: 'news-archive')
end
end
In your view:
<div class="news-archive">
<%= render_elements finder: MyCustomNewsArchive.new %>
</div>
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'app/helpers/alchemy/elements_helper.rb', line 73 def render_elements( = {}, &blk) = { from_page: Current.page || @page, render_format: "html" }.update() finder = [:finder] || Alchemy::ElementsFinder.new() page_version = if Current.preview_page? [:from_page]&.draft_version else [:from_page]&.public_version end elements = finder.elements(page_version: page_version) default_rendering = ->(element, i) { render_element(element, , i + 1) } capture do if blk elements.map.with_index(&blk) else elements.map.with_index(&default_rendering) end.join([:separator]).html_safe end end |