diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index e43efa6f0a3..ea095c04fe3 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -248,7 +248,7 @@ class website(osv.osv):
pmin = pmax - scope if pmax - scope > 0 else 1
def get_url(page):
- _url = "%spage/%s/" % (url, page)
+ _url = "%spage/%s/" % (url, page) if page > 1 else url
if url_args:
_url = "%s?%s" % (_url, werkzeug.url_encode(url_args))
return _url
diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml
index 383c27514c1..846ff17fd1e 100644
--- a/addons/website/views/website_templates.xml
+++ b/addons/website/views/website_templates.xml
@@ -383,13 +383,13 @@
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index 5e02def1494..b3a93b63148 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -7,6 +7,7 @@ from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.addons.web.http import request
from openerp.tools.translate import _
+from openerp.addons.website.models.website import slug
PPG = 20 # Products Per Page
PPR = 4 # Products Per Row
@@ -143,8 +144,8 @@ class Ecommerce(http.Controller):
return key_val
return False
- @http.route(['/shop/filters/'], type='http', auth="public", website=True, multilang=True)
- def filters(self, **post):
+ @http.route(['/shop/filters/'], type='http', auth="public", methods=['POST'], website=True, multilang=True)
+ def filters(self, category=None, **post):
index = []
filters = []
for key, val in post.items():
@@ -169,11 +170,16 @@ class Ecommerce(http.Controller):
filters[index.index(cat_id)].append( cat[2] )
post.pop(key)
- return request.redirect("/shop/?filters=%s%s%s" % (
- simplejson.dumps(filters),
- post.get("search") and ("&search=%s" % post.get("search")) or "",
- post.get("category") and ("&category=%s" % post.get("category")) or ""
- ))
+ url = "/shop/"
+ if category:
+ category_obj = request.registry.get('product.public.category')
+ url = "%scategory/%s/" % (url, slug(category_obj.browse(request.cr, request.uid, int(category), context=request.context)))
+ if filters:
+ url = "%s?filters=%s" % (url, simplejson.dumps(filters))
+ if post.get("search"):
+ url = "%s%ssearch=%s" % (url, filters and "&" or "?", post.get("search"))
+
+ return request.redirect(url)
def attributes_to_ids(self, attributes):
obj = request.registry.get('product.attribute.line')
@@ -209,15 +215,24 @@ class Ecommerce(http.Controller):
('name', 'ilike', search),
('description', 'ilike', search)]
if category:
- domain.append(('product_variant_ids.public_categ_id', 'child_of', category.id))
+ domain.append(('product_variant_ids.public_categ_id', 'child_of', int(category)))
+ if isinstance(category, (int,str,unicode)):
+ category = request.registry.get('product.public.category').browse(cr, uid, int(category), context=context)
if filters:
filters = simplejson.loads(filters)
if filters:
ids = self.attributes_to_ids(filters)
domain.append(('id', 'in', ids or [0]))
+ url = "/shop/"
product_count = product_obj.search_count(cr, uid, domain, context=context)
- pager = request.website.pager(url="/shop/", total=product_count, page=page, step=PPG, scope=7, url_args=post)
+ if search:
+ post["search"] = search
+ if filters:
+ post["filters"] = filters
+ if category:
+ url = "/shop/category/%s/" % slug(category)
+ pager = request.website.pager(url=url, total=product_count, page=page, step=PPG, scope=7, url_args=post)
request.context['pricelist'] = self.get_pricelist()
@@ -244,11 +259,12 @@ class Ecommerce(http.Controller):
'range': range,
'search': {
'search': search,
- 'category': category and category.id,
+ 'category': category,
'filters': filters,
},
'pager': pager,
'styles': styles,
+ 'category': category,
'categories': categs,
'Ecommerce': self, # TODO fp: Should be removed
'style_in_product': lambda style, product: style.id in [s.id for s in product.website_style_ids],
@@ -257,26 +273,20 @@ class Ecommerce(http.Controller):
@http.route(['/shop/product//'], type='http', auth="public", website=True, multilang=True)
def product(self, product, search='', category='', filters='', **kwargs):
- category_obj = request.registry.get('product.public.category')
-
- category_ids = category_obj.search(request.cr, request.uid, [], context=request.context)
- category_list = category_obj.name_get(request.cr, request.uid, category_ids, context=request.context)
- category_list = sorted(category_list, key=lambda category: category[1])
-
if category:
+ category_obj = request.registry.get('product.public.category')
category = category_obj.browse(request.cr, request.uid, int(category), context=request.context)
request.context['pricelist'] = self.get_pricelist()
values = {
'Ecommerce': self,
- 'category': category,
- 'category_list': category_list,
'main_object': product,
'product': product,
+ 'category': category,
'search': {
'search': search,
- 'category': category and str(category.id),
+ 'category': category,
'filters': filters,
}
}
diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml
index bd51d35cc14..1c616a3d1f7 100644
--- a/addons/website_sale/views/website_sale.xml
+++ b/addons/website_sale/views/website_sale.xml
@@ -32,10 +32,10 @@
-
-
-
-
+ -
+
+
@@ -45,14 +45,15 @@
-
-
-
-
-
-
-
-
+
@@ -60,12 +61,12 @@
Sale
-
+
@@ -99,9 +100,8 @@
@@ -278,15 +278,14 @@
-
+ pull-right
+
@@ -569,8 +568,8 @@
@@ -585,7 +584,7 @@
-