Skip to content

Commit

Permalink
Allow for basic sorting on the search. Added engine_name.
Browse files Browse the repository at this point in the history
Added partials and JS to handle sorting on a search result.
Sorting is not enabled by default, dev must insert partials using deface
  • Loading branch information
iloveitaly committed Mar 19, 2012
1 parent 7e49e66 commit 4267fbf
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 7 deletions.
3 changes: 3 additions & 0 deletions app/assets/javascripts/store/solr_sort_by.js.coffee
@@ -0,0 +1,3 @@
$ ->
$('#product_sort_by').change ->
window.location.href = @value
7 changes: 7 additions & 0 deletions app/helpers/spree/base_helper_decorator.rb
Expand Up @@ -6,4 +6,11 @@ def link_to_facet(name, value, count)
request.params.delete(:page)
link_to("#{value} (#{count})", url_for(request.params.merge({:facets => facets_hash})))
end

# hate to clutter up teh BaseHelper with this one-time
def sort_by_options_list
# generate <options></options> list
options = ::PRODUCT_SORT_FIELDS.map { |k, v| [t(k), url_for(request.params.merge({:sort => k}))] }
options_for_select(options, url_for(request.params.merge({ :sort => params[:sort] || ::PRODUCT_SORT_FIELDS.keys.first })))
end
end
1 change: 1 addition & 0 deletions app/views/spree/products/_sort_bar.html.erb
@@ -0,0 +1 @@
<div id="product-list-sort">Sort by: <%= select_tag("product_sort_by", sort_by_options_list) %></div>
11 changes: 11 additions & 0 deletions config/initializers/solr_config.rb
Expand Up @@ -11,3 +11,14 @@
PRODUCT_SOLR_FACETS = [:price_range, :taxon_names,
:brand_property, :color_option, :size_option]
end

unless defined?(PRODUCT_SORT_FIELDS)
PRODUCT_SORT_FIELDS = {
"price_asc" => ["spree_variants.price", "asc"],
"price_desc" => ["spree_variants.price", "desc"],
"date_asc" => ["spree_products.available_on", "asc"],
"date_desc" => ["spree_products.available_on", "desc"],
"name_asc" => ["spree_products.name", "asc"],
"name_desc" => ["spree_products.name", "desc"]
}
end
25 changes: 18 additions & 7 deletions lib/spree/search/solr.rb
Expand Up @@ -8,10 +8,18 @@ def get_products_conditions_for(base_scope, query)
:browse => @properties[:facets_hash].map{|k,v| "#{k}:#{v}"},
:zeros => false
}

search_options = {:facets => facets, :limit => 25000, :lazy => true}
if order_by_price
search_options.merge!(:order => (order_by_price == 'descend') ? "price desc" : "price asc")

# if order_by_price
# search_options.merge!(:order => (order_by_price == 'descend') ? "price desc" : "price asc")
# end

if not @properties[:sort].nil? and PRODUCT_SORT_FIELDS.has_key? @properties[:sort]
sort_option = ::PRODUCT_SORT_FIELDS[@properties[:sort]]
base_scope = base_scope.order("#{sort_option[0]} #{sort_option[1].upcase}")
end

full_query = query + " AND is_active:(true)"
if taxon
taxons_query = taxon.self_and_descendants.map{|t| "taxon_ids:(#{t.id})"}.join(" OR ")
Expand All @@ -27,22 +35,25 @@ def get_products_conditions_for(base_scope, query)
@properties[:products] = products
@properties[:suggest] = nil
begin
if suggest = result.suggest
suggest.sub!(/\sAND.*/, '')
@properties[:suggest] = suggest if suggest != query
end
if suggest = result.suggest
suggest.sub!(/\sAND.*/, '')
@properties[:suggest] = suggest if suggest != query
end
rescue

end

@properties[:facets] = parse_facets_hash(result.facets)
base_scope.where(["spree_products.id IN (?)", products.map(&:id)])
# base_scope.order("spree_products.name DESC")
end

def prepare(params)
super
@properties[:facets_hash] = params[:facets] || {}
@properties[:manage_pagination] = false
@properties[:order_by_price] = params[:order_by_price]
@properties[:sort] = params[:sort] || nil
# @properties[:order_by_price] = params[:order_by_price]
end

private
Expand Down
2 changes: 2 additions & 0 deletions lib/spree_solr_search.rb
Expand Up @@ -5,6 +5,8 @@ module Spree::SolrSearch

module SpreeSolrSearch
class Engine < Rails::Engine
engine_name 'spree_solr_search'

initializer "spree.solr_search.preferences", :after => "spree.environment" do |app|
Spree::SolrSearch::Config = Spree::SolrSearchConfiguration.new
Spree::Config.searcher_class = Spree::Search::Solr
Expand Down

0 comments on commit 4267fbf

Please sign in to comment.