class PagesController < ApplicationController before_action :get_key layout :get_layout include PagesHelper def index @pages = Page.all # render json: @pages end def edit_view @manifest = @key @dataApi = "edit" # @qq = render_to_string(:partial => @p, :layout => false) render get_view end def show path = request.original_fullpath.split('/') if path.size == 2 redirect_to root_path else if path.last.include? '-' params[:page_id] = path[-2] params[:slug] = path[-1] params[:uid] = path[-1].split("-").last params[:target_action] = "show" else params[:page_id] = path[-1] params[:slug] = nil params[:uid] = nil params[:target_action] = "index" end page = Page.find_by_param(params[:page_id]) module_app = page.module.downcase.pluralize params[:target_controller] = "#{module_app}" params[:url] = page.url @manifest = @key @dataApi = nil OrbitHelper.set_params params OrbitHelper.set_site_locale locale render render_final_page("#{module_app}/#{params[:target_action]}",page) end end def preview render render_final_page end def new @page = Page.new @pages = Page.where(:page_id.ne => "" , :page_id.exists => true) @modules = ModuleApp.all end def create @page = Page.new(page_params) @page.save! redirect_to pages_path end private def render_final_page(original_view=get_view,page) parts = page.page_parts @part_partials = {} parts.each do |part| subparts = part.sub_parts partials = [] subparts.each do |subpart| # partials << render_to_string(:partial => get_widget_path(widget_path)) partials << render_widget_for_frontend(params[:target_controller],"widget",subpart.widget) end @part_partials["data-pp='#{part.part_id}'"] = partials end @file = nil @layout_html = nil @file = File.join('../templates', "#{@key}", '/home/page.html.erb') @layout_html = render_to_string(@file) doc = Nokogiri::HTML(@layout_html, nil, "UTF-8") @part_partials.each do |key, partial| html_string = "" partial.each do |p| html_string = html_string + p end pp = doc.css("*[#{key}]") pp = pp[0] pp.inner_html = html_string end viewarea = doc.css("*[data-content='true']") viewarea = viewarea[0] viewarea.inner_html = render_to_string(original_view) newlayout = "#{page.name}_layout.html.erb" file_path = File.join(Rails.root, 'app', 'views', 'frontend', newlayout) f = File.open(file_path,"w") f.write(doc.to_html) f.close view_to_render = "frontend/#{newlayout}" view_to_render end def get_widget_path(widget) file = File.join('../templates', "#{@key}", "modules/#{widget}") end def get_view page = Page.find(params[:id]) if page.page_id == "home" @view = File.join(Rails.root, 'app', 'templates', "#{@key}", '/home/index.html.erb') else module_name = page.module.downcase.pluralize @view = File.join(Rails.root, 'app', 'templates', "#{@key}", "modules/#{module_name}/index.html.erb") end end def page_params if params[:page][:parent_page] == "" params[:page][:parent_page] = nil @url = "/#{params[:page][:page_id]}" else page = Page.find(params[:page][:parent_page]) @url = page.url + "/#{params[:page][:page_id]}" end p = params.require(:page).permit(:number, :page_id, :module, :parent_page, name_translations: [:en, :zh_tw]) p["url"] = @url p end def get_layout if request[:action] == "edit_view" page = Page.find(params[:id]) if page.page_id == "home" false else File.join("../../templates", "#{@key}", '/home/page.html.erb') end # elsif request[:action] == "show" || request[:action] == "moduleShow" # File.join("../../templates", "themes", "#{@key}", '/home/page.html.erb') else false end end end