From aa09df25845f5497124185013bdb5706fcb2b082 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Fri, 1 Sep 2023 21:06:28 +0200 Subject: [PATCH] [IMP] website_sale: avoid pollute urls with #attrs if no variant closes odoo/odoo#159474 Signed-off-by: Valentin Chevalier --- addons/website_sale/models/product_product.py | 7 ++++++- addons/website_sale/static/src/js/website_sale.js | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/addons/website_sale/models/product_product.py b/addons/website_sale/models/product_product.py index 8ca6dd7aaca..91f523402af 100644 --- a/addons/website_sale/models/product_product.py +++ b/addons/website_sale/models/product_product.py @@ -1,5 +1,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. +from werkzeug.urls import url_join + from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -46,7 +48,10 @@ class Product(models.Model): def _compute_product_website_url(self): for product in self: attributes = ','.join(str(x) for x in product.product_template_attribute_value_ids.ids) - product.website_url = "%s#attr=%s" % (product.product_tmpl_id.website_url, attributes) + url = product.product_tmpl_id.website_url + if attributes: + url = url_join(url, f"#attr={attributes}") + product.website_url = url def _prepare_variant_values(self, combination): variant_dict = super()._prepare_variant_values(combination) diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 2a0606dec1e..d27d9878383 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -185,6 +185,9 @@ export const WebsiteSale = publicWidget.Widget.extend(VariantMixin, cartHandlerM */ _setUrlHash: function ($parent) { var $attributes = $parent.find('input.js_variant_change:checked, select.js_variant_change option:selected'); + if (!$attributes.length) { + return; + } var attributeIds = $attributes.toArray().map((elem) => $(elem).data("value_id")); window.location.replace('#attr=' + attributeIds.join(',')); },