module Sitemap extend ActiveSupport::Concern def render_sitemap(options = {}) if Fullstack::Cms.localized? render_sitemap_localized(options[:allowed_locales]) else render_sitemap_not_localized end end def render_sitemap_not_localized @pages = Page.all.sort do |p1, p2| (p1.path || "").split("/").size <=> (p2.path || "").split("/").size end erb = <<-eos <% @pages.each do |page| -%> <% if !page.resourceful? -%> <% begin -%> <% loc = polymorphic_url([:site, page.uid.split("#").last].compact) -%> <%= loc %> <% rescue Exception => e -%> <% end -%> <% else -%> <% page.resource_class.all.each do |resource| -%> <% unless (resource.respond_to?(:published) && !resource.published?) || (resource.respond_to?(:sitemap) && !resource.sitemap?) -%> <%= page_url_for(resource) -%> <% if resource.respond_to?(:updated_at) -%> <%= resource.updated_at.strftime("%F") -%> <% end -%> <% end -%> <% end -%> <% end -%> <% end -%> eos render :inline => erb, :layout => false end def render_sitemap_localized(allowed_locales = nil) allowed_locales ||= I18n.available_locales.map(&:to_s) @pages = Page.where("locale IN (?)", allowed_locales).sort do |p1, p2| (p1.path || "").split("/").size <=> (p2.path || "").split("/").size end erb = <<-eos <% @pages.each do |page| -%> <% if !page.resourceful? -%> <% begin -%> <% loc = polymorphic_url([:site, page.uid.split("#").last, page.locale].compact) -%> <%= loc %> <% rescue Exception => e -%> <% end -%> <% else -%> <% page.resource_class.where(:locale => page.locale).each do |resource| -%> <%= page_url_for(resource) -%> <% if resource.respond_to?(:updated_at) -%> <%= resource.updated_at.strftime("%F") -%> <% end -%> <% end -%> <% end -%> <% end -%> eos render :inline => erb, :layout => false end end