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 = " | ".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