From bc7e2f9514d2ea60f532463d8dd9c6862a588a6d Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Fri, 6 Jun 2014 16:30:56 +0800 Subject: [PATCH] now can select different layouts for different modules --- app/assets/javascripts/lib/items/items.js.erb | 34 ++++++++++++++----- app/controllers/pages_controller.rb | 27 ++++++++++++--- app/helpers/application_helper.rb | 6 +++- app/helpers/pages_helper.rb | 3 ++ app/models/page.rb | 1 + app/views/pages/_form.html.erb | 12 ++++++- 6 files changed, 68 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/lib/items/items.js.erb b/app/assets/javascripts/lib/items/items.js.erb index f803a19..c9a167a 100755 --- a/app/assets/javascripts/lib/items/items.js.erb +++ b/app/assets/javascripts/lib/items/items.js.erb @@ -105,7 +105,8 @@ var Items = function(){ sidePanel.on("change","select.module_select", function(){ var this_value = $(this).val(), - categories_list = $("#categories_list"); + categories_list = $("#categories_list") + layouts_list = $("#layouts_list"); categories_list.html(""); if(this_value){ @@ -114,18 +115,33 @@ var Items = function(){ data : {"module" : this_value}, type : "get", dataType : "json" - }).done(function(categories){ + }).done(function(data){ var controlDiv = $("
"); - if(categories.categories.length){ - categories_list.parent().find("label.control-label").prepend("Category List :"); + if(data.categories.length){ + categories_list.parent().find("label.control-label").text("Category List :"); var checkbox = $(""); controlDiv.append(checkbox); + $.each(data.categories,function(i,category){ + var checkbox = $(""); + controlDiv.append(checkbox); + }) + categories_list.html(controlDiv); + }else{ + categories_list.parent().find("label.control-label").text(""); + } + if(data.layouts.length){ + layouts_list.parent().find("label.control-label").text("Layout type:"); + var controlDiv = $("
"), + select = $(""); + $.each(data.layouts,function(i,layout){ + select.append(""); + }) + controlDiv.html(select); + layouts_list.html(controlDiv); + }else{ + layouts_list.parent().find("label.control-label").text(""); + layouts_list.empty(); } - $.each(categories.categories,function(i,category){ - var checkbox = $(""); - controlDiv.append(checkbox); - }) - categories_list.append(controlDiv); }) } }) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index d688144..dc8feec 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -35,6 +35,7 @@ class PagesController < ApplicationController end def show + display_type = "" path = request.path.split('/') if path.size <= 2 redirect_to root_path @@ -46,11 +47,13 @@ class PagesController < ApplicationController uid = uid.split("?").first params[:uid] = uid params[:target_action] = params[:method] || "show" + display_type = "show" else params[:page_id] = path[-1] params[:slug] = nil params[:uid] = nil params[:target_action] = params[:method] || "index" + display_type = "index" OrbitHelper.set_page_number params[:page_no].to_i || 1 end page = Page.find_by_param(params[:page_id]) @@ -58,6 +61,9 @@ class PagesController < ApplicationController if page.enabled_for.include? I18n.locale.to_s module_app = page.module.downcase.pluralize params[:target_controller] = "#{module_app}" + if display_type == "index" + params[:layout_type] = params[:method] || page.layout || "index" + end params[:url] = page.url @manifest = @key @@ -131,8 +137,7 @@ class PagesController < ApplicationController "id" => cat.id.to_s } end - - render :json => {"categories" => @categories}.to_json + render :json => {"categories" => @categories,"layouts" => (get_layouts module_app.key)}.to_json end def new @@ -148,6 +153,7 @@ class PagesController < ApplicationController @modules = ModuleApp.all.frontend_enabled module_app = ModuleApp.find_by_key(@page.module) rescue nil @categories = module_app.categories rescue [] + @layout_types = get_layouts module_app.key end def update @@ -171,6 +177,19 @@ class PagesController < ApplicationController private + def get_layouts(module_app) + layout_types = [] + Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/#{module_app}/*").each do |w| + next if File.ftype(w).eql?("directory") + w = File.basename(w, ".*") + w = File.basename(w, ".*") + if w[0,1] != "_" && w[0,1] != "s" + layout_types << w + end + end + layout_types + end + def render_final_page(original_view=get_view,page,layout) if layout parts = $mobile.blank? ? (page.page_parts rescue []) : (page.mobile_page_parts rescue []) @@ -251,13 +270,13 @@ class PagesController < ApplicationController page = Page.find(params[:page][:parent_page]) page.url = page.url == "/" ? "" : page.url @url = page.url + "/#{params[:page][:page_id]}" - p = params.require(:page).permit(:number, :page_id, :module, :parent_page, :data_count, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_id, :module, :layout, :parent_page, :data_count, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw]) p["url"] = @url p end def page_update_params - p = params.require(:page).permit(:number, :page_id, :module, :parent_page, :data_count, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_id, :module, :layout, :parent_page, :data_count, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], name_translations: [:en, :zh_tw]) p["enabled_for"] = p["enabled_for"] || [] p["menu_enabled_for"] = p["menu_enabled_for"] || [] p diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e2274de..ccf8e4d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -159,7 +159,11 @@ module ApplicationHelper if params[:target_action] == "index" - file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "#{params[:target_action]}.html.erb")) + f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "#{params[:layout_type]}.html.erb") + if !File.exists?f + f = File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "index.html.erb") + end + file = File.open(f) doc = Nokogiri::HTML(file, nil, "UTF-8") file.close controller = "#{params[:target_controller].capitalize}_controller".classify.constantize.new diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index d524600..5611e3a 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -47,6 +47,9 @@ module PagesHelper end controller_name = controller_name.downcase.singularize f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb"); + if !File.exists?f + f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_widget.html.erb"); + end s = render_to_string(f) doc = Nokogiri::HTML(s, nil, "UTF-8") wrap_elements = doc.css("*[data-repeat]") diff --git a/app/models/page.rb b/app/models/page.rb index 87c2281..bb23815 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -8,6 +8,7 @@ class Page field :module field :url field :page_id + field :layout, type: String, default: "index" field :data_count, type: Integer, default: 10 field :enabled_for, type: Array, default: [] field :menu_enabled_for, type: Array, default: [] diff --git a/app/views/pages/_form.html.erb b/app/views/pages/_form.html.erb index 5cf7b7c..95db477 100644 --- a/app/views/pages/_form.html.erb +++ b/app/views/pages/_form.html.erb @@ -25,7 +25,7 @@
- +
<% if params[:action] == "edit" %>
@@ -45,6 +45,16 @@ <% end %>
+
+ +
+ <% if params[:action] == "edit" && !@layout_types.blank? %> +
+ <%= f.select(:layout, @layout_types) %> +
+ <% end %> +
+