Module: Spree::PageHelper
- Defined in:
- app/helpers/spree/page_helper.rb
Instance Method Summary collapse
-
#layout_sections ⇒ Array
Returns the layout sections of the page with current theme or theme preview.
-
#page_builder_link_to(link, options = {}, &block) ⇒ Object
Renders a link to the page builder for the given link.
-
#render_footer_sections ⇒ String
Renders the footer sections of the page.
-
#render_header_sections ⇒ String
Renders the header sections of the page.
-
#render_page(page = nil, variables = {}) ⇒ String
Renders the page with the current theme (or theme preview) and page preview if it exists.
-
#render_section(section, variables = {}, lazy_allowed: true) ⇒ String
Renders a single section of the page.
-
#section_includes ⇒ Array
Returns the includes for the section.
Instance Method Details
#layout_sections ⇒ Array
Returns the layout sections of the page with current theme or theme preview.
78 79 80 |
# File 'app/helpers/spree/page_helper.rb', line 78 def layout_sections @layout_sections ||= current_theme_or_preview.sections end |
#page_builder_link_to(link, options = {}, &block) ⇒ Object
Renders a link to the page builder for the given link.
110 111 112 113 114 115 116 117 118 |
# File 'app/helpers/spree/page_helper.rb', line 110 def page_builder_link_to(link, = {}, &block) if link.present? link_to(spree_storefront_resource_url(link.linkable || link), .except(:label)) do block.present? ? block.call : [:label] end else block&.call&.html_safe end end |
#render_footer_sections ⇒ String
Renders the footer sections of the page.
94 95 96 97 98 |
# File 'app/helpers/spree/page_helper.rb', line 94 def @render_footer_sections ||= layout_sections.find_all { |section| section.role == 'footer' }.map do |section| render_section(section) end.join.html_safe end |
#render_header_sections ⇒ String
Renders the header sections of the page.
85 86 87 88 89 |
# File 'app/helpers/spree/page_helper.rb', line 85 def render_header_sections @render_header_sections ||= layout_sections.find_all { |section| section.role == 'header' }.map do |section| render_section(section) end.join.html_safe end |
#render_page(page = nil, variables = {}) ⇒ String
Renders the page with the current theme (or theme preview) and page preview if it exists. It fetches all page sections and renders them one by one in the order they are set in the page builder by store staff. It also handles lazy loading of sections.
11 12 13 14 15 16 17 18 19 20 |
# File 'app/helpers/spree/page_helper.rb', line 11 def render_page(page = nil, variables = {}) page ||= current_page sections = current_page_preview.present? ? current_page_preview.sections : page.sections sections_html = sections.includes(section_includes).preload_associations_lazily.map do |section| render_section(section, variables) end.join.html_safe "<main class='page-contents'>#{sections_html}</main>".html_safe end |
#render_section(section, variables = {}, lazy_allowed: true) ⇒ String
Renders a single section of the page.
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/helpers/spree/page_helper.rb', line 28 def render_section(section, variables = {}, lazy_allowed: true) return '' if section.blank? hidden = section.can_be_hidden? && !section.preferred_visible return '' if hidden && !page_builder_enabled? variables[:section] = section variables[:loaded] = true css_id = "section-#{section.id}" css_class = "section-#{section.class.name.demodulize.underscore.dasherize}" if page_builder_enabled? turbo_frame_tag(css_id, class: css_class) do content_tag(:div, data: { editor_id: css_id, editor_name: section.name, editor_link: spree.edit_admin_page_section_path(section) }, style: (hidden ? 'opacity: 0.4;' : nil) ) do render('/' + section.to_partial_path, **variables) end end elsif section.lazy? && lazy_allowed variables[:loaded] = false variables[:url_options] = { locale: I18n.locale } path = section.lazy_path(variables) turbo_frame_tag(css_id, src: path, loading: :lazy, class: css_class, data: { controller: 'prefetch-lazy', turbo_permanent: true }) do render('/' + section.to_partial_path, **variables) end else content_tag(:div, id: css_id, class: css_class) do render('/' + section.to_partial_path, **variables) end end rescue ActionView::MissingTemplate, ActionView::Template::Error => e raise e unless Rails.env.production? Rails.error.report(e, context: { section_id: section.id }, source: 'spree.storefront') '' end |
#section_includes ⇒ Array
Returns the includes for the section.
103 104 105 106 107 |
# File 'app/helpers/spree/page_helper.rb', line 103 def section_includes [ { asset_attachment: :blob } ] end |