app/helpers/cms/application_helper.rb in tb_cms-1.0.3 vs app/helpers/cms/application_helper.rb in tb_cms-1.1.0

- old
+ new

@@ -1,25 +1,25 @@ module Cms::ApplicationHelper MENU_INDEX = {} - def sp_snippet(name,snippets=nil) + def sp_snippet(name, snippets=nil) if name.blank? return '' end - if !snippets.blank? snippet = snippets.select {|s| s.name == name} else snippet = SpudSnippet.where(:name => name).first end - if !snippet.blank? - return snippet.content_processed.html_safe + # cache(snippet) do + # concat snippet.content_processed.html_safe + # end + snippet.content_processed.html_safe else return nil end - end def sp_list_pages(options = {}) pages = SpudPage.public.published_pages @@ -29,10 +29,11 @@ pages = pages.site(site_config[:site_id]) if !site_config.blank? end start_page = nil max_depth = 0 active_class = "menu-active" + if !options.blank? if options.has_key?(:exclude) pages = pages.where(["name NOT IN (?)",options[:exclude]]) end @@ -53,11 +54,11 @@ else content = "<ul>" end - pages = pages.all.group_by(&:spud_page_id) + pages = pages.to_a.group_by(&:spud_page_id) if pages[start_page].blank? return "" end pages[start_page].sort_by{|p| p.page_order}.each do |page| @@ -78,102 +79,93 @@ content += "</ul>" return content.html_safe end + def sp_list_menu(options = {}) - def sp_list_menu(options = {}) + if !options.has_key?(:name) + logger.debug 'sp_list_menu require a :name option' + return '' + end - max_depth = 0 - menu = SpudMenu - menu_id = nil - menu_key = "" - link_options = {} - start_menu_item = nil - if Spud::Core.multisite_mode_enabled - site_config = Spud::Core.site_config_for_host(request.host_with_port) - menu = menu.site(site_config[:site_id]) if !site_config.blank? - menu_key += "#{site_config[:site_id]}_" - end - if !options.blank? + max_depth = 0 + menu_id = nil + link_options = {} + start_menu_item = nil - menu_id = options[:menu_id] if options.has_key?(:menu_id) - link_options = options[:link_options] if options.has_key?(:link_options) - if options.has_key?(:name) - menu_key += options[:name] - menu = menu.where(:name => options[:name]) - menu_id = MENU_INDEX[menu_key] - if menu_id.blank? - menu = menu.first - if(!menu.blank?) - menu_id = menu.id - MENU_INDEX[menu_key] = menu.id - end - end - end - start_menu_item = options[:start_menu_item_id] if options.has_key?(:start_menu_item_id) - if options.has_key?(:id) - content = "<ul id='#{options[:id]}' #{"class='#{options[:class]}'" if options.has_key?(:class)}>" - else - content = "<ul #{"class='#{options[:class]}'" if options.has_key?(:class)}>" - end - max_depth = options[:max_depth] if options.has_key?(:max_depth) - else - content = "<ul>" - end + if Spud::Core.multisite_mode_enabled + menu = SpudMenu.where(:name => options[:name], :site_id => current_site_id).first + else + menu = SpudMenu.where(:name => options[:name]).first + end - if menu_id.blank? - return "" - end - menu_items = SpudMenuItem.where(:spud_menu_id => menu_id).select(" - #{SpudMenuItem.table_name}.id as id, - #{SpudMenuItem.table_name}.url as url, - #{SpudMenuItem.table_name}.classes as classes, - #{SpudMenuItem.table_name}.parent_type as parent_type, - #{SpudMenuItem.table_name}.menu_order as menu_order, - #{SpudMenuItem.table_name}.parent_id as parent_id, - #{SpudMenuItem.table_name}.name as name, - #{SpudPage.table_name}.url_name as url_name").order(:parent_type,:parent_id).joins("LEFT JOIN #{SpudPage.table_name} ON (#{SpudPage.table_name}.id = #{SpudMenuItem.table_name}.spud_page_id)").all + if menu.blank? + return '' + else + menu_id = menu.id + end + cache(['sp_list_menu', menu, options]) do + link_options = options[:link_options] if options.has_key?(:link_options) - grouped_items = menu_items.group_by(&:parent_type) + start_menu_item = options[:start_menu_item_id] if options.has_key?(:start_menu_item_id) + if options.has_key?(:id) + content = "<ul id='#{options[:id]}' #{"class='#{options[:class]}'" if options.has_key?(:class)}>" + else + content = "<ul #{"class='#{options[:class]}'" if options.has_key?(:class)}>" + end + max_depth = options[:max_depth] if options.has_key?(:max_depth) - if grouped_items["SpudMenu"].blank? + menu_items = SpudMenuItem.where(:spud_menu_id => menu_id).select(" + #{SpudMenuItem.table_name}.id as id, + #{SpudMenuItem.table_name}.url as url, + #{SpudMenuItem.table_name}.classes as classes, + #{SpudMenuItem.table_name}.parent_type as parent_type, + #{SpudMenuItem.table_name}.menu_order as menu_order, + #{SpudMenuItem.table_name}.parent_id as parent_id, + #{SpudMenuItem.table_name}.name as name, + #{SpudPage.table_name}.url_name as url_name").order(:parent_type,:parent_id).joins("LEFT JOIN #{SpudPage.table_name} ON (#{SpudPage.table_name}.id = #{SpudMenuItem.table_name}.spud_page_id)").to_a - return "" - end - child_items = grouped_items["SpudMenuItem"].blank? ? [] : grouped_items["SpudMenuItem"].group_by(&:parent_id) + grouped_items = menu_items.group_by(&:parent_type) - parent_items = grouped_items["SpudMenu"] - if start_menu_item != nil - parent_items = child_items[start_menu_item] - end + if grouped_items["SpudMenu"].blank? + return "" + end - parent_items.sort_by{|p| p.menu_order}.each do |item| - active = false - if !item.url_name.blank? - if current_page?(page_path(:id => item.url_name)) - active = true - elsif item.url_name == Spud::Cms.root_page_name && current_page?(root_path) - active = true - end - elsif current_page?(item.url) - active = true - end - link_tag = link_to item.name, !item.url_name.blank? ? (item.url_name == Spud::Cms.root_page_name ? root_path() : page_path(:id => item.url_name)) : item.url, {:class => "#{'menu-active' if active} #{item.classes if !item.classes.blank?}"}.merge(link_options) - content += "<li class='#{"menu-active" if active} #{item.classes if !item.classes.blank?}'>#{link_tag}" - if max_depth == 0 || max_depth > 1 - content += sp_list_menu_item(child_items,item.id,2,max_depth,options) - end - content += "</li>" - end + child_items = grouped_items["SpudMenuItem"].blank? ? [] : grouped_items["SpudMenuItem"].group_by(&:parent_id) - content += "</ul>" + parent_items = grouped_items["SpudMenu"] + if start_menu_item != nil + parent_items = child_items[start_menu_item] + end - return content.html_safe - end + parent_items.sort_by{|p| p.menu_order}.each do |item| + active = false + if !item.url_name.blank? + if current_page?(page_path(:id => item.url_name)) + active = true + elsif item.url_name == Spud::Cms.root_page_name && current_page?(root_path) + active = true + end + elsif current_page?(item.url) + active = true + end + link_tag = link_to item.name, !item.url_name.blank? ? (item.url_name == Spud::Cms.root_page_name ? root_path() : page_path(:id => item.url_name)) : item.url, {:class => "#{'menu-active' if active} #{item.classes if !item.classes.blank?}"}.merge(link_options) + content += "<li class='#{"menu-active" if active} #{item.classes if !item.classes.blank?}'>#{link_tag}" + if max_depth == 0 || max_depth > 1 + content += sp_list_menu_item(child_items,item.id,2,max_depth,options) + end + content += "</li>" + end + content += "</ul>" + + concat content.html_safe + end + end + def sp_menu_with_seperator(options={}) seperator = "&nbsp;|&nbsp;".html_safe if(options.has_key?(:seperator)) seperator = options[:seperator] @@ -194,10 +186,10 @@ #{SpudMenuItem.table_name}.classes as classes, #{SpudMenuItem.table_name}.parent_type as parent_type, #{SpudMenuItem.table_name}.menu_order as menu_order, #{SpudMenuItem.table_name}.parent_id as parent_id, #{SpudMenuItem.table_name}.name as name, - #{SpudPage.table_name}.url_name as url_name").order(:parent_type,:parent_id).joins("LEFT JOIN #{SpudPage.table_name} ON (#{SpudPage.table_name}.id = #{SpudMenuItem.table_name}.spud_page_id)").all + #{SpudPage.table_name}.url_name as url_name").order(:parent_type,:parent_id).joins("LEFT JOIN #{SpudPage.table_name} ON (#{SpudPage.table_name}.id = #{SpudMenuItem.table_name}.spud_page_id)").to_a menu_tags = [] menu_items.sort_by{|p| p.menu_order}.each do |item| menu_tags += ["<a #{"class='#{item.classes}' " if !item.classes.blank?}href='#{!item.url_name.blank? ? (item.url_name == Spud::Cms.root_page_name ? root_path() : page_path(:id => item.url_name)) : item.url}'>#{item.name}</a>"] end