diff --git a/app/assets/javascripts/store/solr_sort_by.js.coffee b/app/assets/javascripts/store/solr_sort_by.js.coffee
new file mode 100644
index 0000000..04a248d
--- /dev/null
+++ b/app/assets/javascripts/store/solr_sort_by.js.coffee
@@ -0,0 +1,3 @@
+$ ->
+ $('#product_sort_by').change ->
+ window.location.href = @value
\ No newline at end of file
diff --git a/app/helpers/spree/base_helper_decorator.rb b/app/helpers/spree/base_helper_decorator.rb
index ccbcc75..e826786 100644
--- a/app/helpers/spree/base_helper_decorator.rb
+++ b/app/helpers/spree/base_helper_decorator.rb
@@ -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 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
diff --git a/app/views/spree/products/_sort_bar.html.erb b/app/views/spree/products/_sort_bar.html.erb
new file mode 100644
index 0000000..e99e20f
--- /dev/null
+++ b/app/views/spree/products/_sort_bar.html.erb
@@ -0,0 +1 @@
+
Sort by: <%= select_tag("product_sort_by", sort_by_options_list) %>
\ No newline at end of file
diff --git a/config/initializers/solr_config.rb b/config/initializers/solr_config.rb
index 61db128..263035e 100644
--- a/config/initializers/solr_config.rb
+++ b/config/initializers/solr_config.rb
@@ -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
\ No newline at end of file
diff --git a/lib/spree/search/solr.rb b/lib/spree/search/solr.rb
index dc5d2e3..20846bb 100644
--- a/lib/spree/search/solr.rb
+++ b/lib/spree/search/solr.rb
@@ -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 ")
@@ -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
diff --git a/lib/spree_solr_search.rb b/lib/spree_solr_search.rb
index 2cf71ad..f038285 100644
--- a/lib/spree_solr_search.rb
+++ b/lib/spree_solr_search.rb
@@ -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