From 11205f7f215b501932a36ab17ba130b75423ef50 Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Fri, 20 May 2011 21:23:22 +0000 Subject: [PATCH] Add facets helpers and views --- app/controllers/public/search_controller.rb | 5 +++++ app/helpers/search_helper.rb | 19 +++++++++++++++++++ app/views/search/_facets_menu.rhtml | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ app/views/search/_facets_unselect_menu.rhtml | 8 ++++++++ public/stylesheets/application.css | 16 ++++++++++++++++ 5 files changed, 99 insertions(+), 0 deletions(-) create mode 100644 app/views/search/_facets_menu.rhtml create mode 100644 app/views/search/_facets_unselect_menu.rhtml diff --git a/app/controllers/public/search_controller.rb b/app/controllers/public/search_controller.rb index 7cd6082..baff96f 100644 --- a/app/controllers/public/search_controller.rb +++ b/app/controllers/public/search_controller.rb @@ -106,6 +106,11 @@ class SearchController < PublicController result[:date_range] = (date - 1.month)..(date + 1.month).at_end_of_month end + if asset_class(asset).methods.include?('facets') + result.merge!(:facets => {:zeros => false, :sort => :count, :fields => asset_class(asset).facets.keys, + :browse => params[:facet] ? params[:facet].map{ |k,v| k.to_s+':'+v.to_s} : ''}) + end + result end diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 3ba9ae1..292ac46 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -115,4 +115,23 @@ module SearchHelper render(:partial => 'product_categories_menu', :object => product_categories_menu) end + def facets_menu(asset, _facets) + @asset_class = asset_class(asset) + @facets = _facets + render(:partial => 'facets_menu') + end + + def facets_unselect_menu(asset) + @asset_class = asset_class(asset) + render(:partial => 'facets_unselect_menu') + end + + def asset_class(asset) + asset.to_s.singularize.camelize.constantize + end + + def asset_table(asset) + asset_class(asset).table_name + end + end diff --git a/app/views/search/_facets_menu.rhtml b/app/views/search/_facets_menu.rhtml new file mode 100644 index 0000000..584e822 --- /dev/null +++ b/app/views/search/_facets_menu.rhtml @@ -0,0 +1,51 @@ +<% more_options = _("+ Options") %> +<% less_options = _("- Options") %> +<% less_options_limit = 7 %> + +
+ <% if !@facets["facet_fields"].empty? %> + <% @asset_class.each_facet do |facet_id, index| %> + <% facet = @asset_class.facets[facet_id] %> + <% solr_facet = @asset_class.to_solr_facet_fields[facet_id] %> + <% facets_all = @facets["facet_fields"][solr_facet] %> + <% facets_found = params[:facet] ? facets_all.reject {|id,c| params[:facet][facet_id.to_s].to_s == id.to_s } : facets_all %> + + <% if facets_found.count > 0 %> +
+
+ <%= facet[:label] %> +

+ + <% if facets_found.count > less_options_limit %> + + <% end %> + +
+ <% c = 0; @asset_class.each_facet_obj(solr_facet, facets_found, :sort => :count) do |obj, count| %> + <%= link_to(obj.send(facet[:display_field].to_s), params.merge({"facet[#{facet_id.to_s}]" => obj.id})) + " (#{count})" %>
+ <% break if (c += 1) > less_options_limit %> + <% end %> +

+ + <% if facets_found.count > less_options_limit %> + <%= link_to_function more_options, "jQuery('#facet-menu-"+index.to_s+" .facet-menu-options').toggle(200); " + + "jQuery(this).text(jQuery(this).text() == '"+less_options+"' ? '"+more_options+"' : '"+less_options+"');" %> +
+ <% end %> + +
+
+ <% end %> + <% end %> + <% end %> +
diff --git a/app/views/search/_facets_unselect_menu.rhtml b/app/views/search/_facets_unselect_menu.rhtml new file mode 100644 index 0000000..ee497cd --- /dev/null +++ b/app/views/search/_facets_unselect_menu.rhtml @@ -0,0 +1,8 @@ + +<% if params[:facet] %> + <% params[:facet].each do |facet_id, obj_id| %> + <% facet = @asset_class.facets[facet_id.to_sym] %> + <% obj = facet[:class].find_by_id(obj_id.to_i) %> + <%= link_to(obj.send(facet[:display_field]), params.merge(:facet => params[:facet].reject {|k,v| k == facet_id}), :class => 'facet-selected') if obj %> + <% end %> +<% end %> diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 3df35ee..78e2f6f 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -3049,6 +3049,22 @@ div#activation_enterprise div { margin-top: 0px; } +.controller-search #facets-menu { + width: 20%; + float: left; +} + +.controller-search #facets-menu div { + position: relative; +} + +.controller-search .facet-selected { + display: block; + background-color: #000; + color: #fff; + float: left; +} + #product-category, .product-category-hierarchy { margin-top: 40px; -- libgit2 0.21.2