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 home @manifest = @key @dataApi = nil page = Page.first OrbitHelper.set_params params OrbitHelper.set_site_locale locale render :html => render_final_page("home",page).html_safe 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) render :html => render_final_page("#{module_app}/#{params[:target_action]}",page).html_safe end end def preview render render_final_page end def destroy page = Page.find(params[:id]) page.destroy respond_to do |format| format.js end 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! respond_to do |format| format.js end 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_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type) end @part_partials["data-pp='#{part.part_id}'"] = partials end @file = nil @layout_html = nil if original_view == "home" @file = File.join('../templates', "#{@key}", '/home/index.html.erb') else @file = File.join('../templates', "#{@key}", '/home/page.html.erb') end @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 if original_view != "home" viewarea = doc.css("*[data-content='true']")[0] viewarea.inner_html = render_to_string(original_view) end # 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 doc.to_html 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.first @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]) page.url = page.url.nil? ? "" : page.url @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 == "" && page.number == 0 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