module ParserFrontEnd require 'nokogiri' def parse_page_noko(page, site) i18n = {} Site.first.valid_locales.each do |locale| body = Nokogiri::HTML(page.design.layout.body) parse_contents(body, page, locale) parse_footer(body, page, site) parse_images(body, page) parse_menu(body, page) parse_sub_menu(body, page, site) parse_counter(body) i18n.merge!({locale => body.to_html}) end i18n end def parse_page_content(page) category = params[:category_id].blank? ? page[:category] : params[:category_id] tag = params[:tag_id].blank? ? page[:tag] : params[:tag_id] body = Nokogiri::HTML(page.content) body.css('orbit_front').each do |front| if front['value'] fragment = Nokogiri::HTML::DocumentFragment.new(body, "
#{eval(front['value']).to_s}
") else ret = '' part = PagePart.find(front['part_id']) if front['part_id'] ret << eval("\"#{front['path']}\"") rescue '' fragment = Nokogiri::HTML::DocumentFragment.new(body, "
") end front.swap(fragment) end body.to_html end # page_footer def parse_footer(body, page, site) page_footer = body.css('.page_footer').first if page_footer res = "
" res << "
" res << "
" fragment = Nokogiri::HTML::DocumentFragment.new(body, res) page_footer.swap(fragment) rescue nil else '' end end # page_images def parse_images(body, page, edit=nil) body.css('.page_image').each do |page_image| image = page.design.images.detect{|image| image.name.eql?(File.basename(page_image['src'])) } unless image if image res = "' end fragment = Nokogiri::HTML::DocumentFragment.new(body, res) page_image.swap(fragment) end end # page_menu def parse_menu(body, page) page_menu = body.css('.page_menu').first if page_menu fragment = Nokogiri::HTML::DocumentFragment.new(body, "
") page_menu.swap(fragment) else '' end end # page_sub_menu def parse_sub_menu(body, page, site) page_sub_menu = body.css('.page_sub_menu').first if page_sub_menu res = "
" res << "
" res << "
" fragment = Nokogiri::HTML::DocumentFragment.new(body, res) page_sub_menu.swap(fragment) else '' end end # page_contents def parse_contents(body, page, edit=nil, locale) public_r_tags = [] url = '' body.css('.page_content').each do |content| ret = '' if (content["main"] == "true" && !page.module_app.nil?) if page.app_frontend_url == 'default_widget' url = "/panel/orbit_app/widget/#{page.frontend_style}?inner=true" else "/panel/#{page.module_app.key}/front_end/#{page.app_frontend_url}\#{(\"/\" + params[:id]) if params[:id] && !params[:id].eql?(page.id.to_s)}\#{(\"/\" + params[:controller_action]) if params[:controller_action] && params[:id]}?inner=true" end options = "&page_id=#{page.id}&category_id=\#{category}&tag_id=\#{tag}&preview=\#{params[:preview]}&page_main=\#{params[:page_main]}&search_query=\#{params[:search_query]}&name=\#{params[:name]}&item_type=page" ret << "" else part = page.page_parts.detect{ |p| p.name.to_s == content['name'].to_s } rescue nil case part.kind when 'text' ret << part.content_translations[locale.to_s] rescue '' when 'module_widget' # url = "/panel/\#{part.module_app.key}/widget/\#{part.widget_path}?inner=true" # options = "&part_id=\#{part.id}&category_id=\#{!part[:category].blank? ? part[:category].blank? : category}&tag_id=\#{!part[:tag].blank? ? part[:tag] : tag}&page=\#{params[:page]}&search_query=\#{params[:search_query]}&part_title=\#{Rack::Utils.escape(part_title).gsub(\"\+\", \"\%20\") rescue nil}" # ret << "" url = case part.widget_path when 'default_widget' "/panel/orbit_app/widget/\#{part.widget_style}?inner=true" else "/panel/\#{part.module_app.key}/widget/\#{part.widget_path}?inner=true" end options = "&part_id=\#{part.id}&category_id=\#{!part[:category].blank? ? part[:category].blank? : category}&tag_id=\#{!part[:tag].blank? ? part[:tag] : tag}&page=\#{params[:page]}&search_query=\#{params[:search_query]}&part_title=\#{Rack::Utils.escape(part_title).gsub(\"\+\", \"\%20\") rescue nil}&item_type=page_part" ret << "" when 'public_r_tag' ret << send("generate_#{part.public_r_tag}s", part.public_r_tag_object_id, page) else '' end if part end scope = "<#{content.name}" content.attributes.each_pair do |key, value| scope << " #{key}='#{value}'" end scope << ">#{ret}" fragment = Nokogiri::HTML::DocumentFragment.new(body, scope) content.swap(fragment) end end def parse_counter(body = nil) body.css('.page_counter').each do |counter| ret = '' case counter['option'] when 'all' ret << "display_visitors" when 'today' ret << "display_visitors_today" when 'this_week' ret << "display_visitors_this_week" when 'this_month' ret << "display_visitors_this_month" when 'this_year' ret << "display_visitors_this_year" end fragment = Nokogiri::HTML::DocumentFragment.new(body, "") counter.swap(fragment) end end # ad_banners def generate_ad_banners(*args) "
" end # sitemap def generate_sitemaps(*args) "
" end # sub_menus def generate_sub_menus(*args) "
" end end