/// <summary> /// Creates a product URL including variant query string. /// </summary> /// <param name="helper">Product URL helper</param> /// <param name="productSeName">Product SEO name</param> /// <param name="orderItem">Order item</param> /// <returns>Product URL</returns> public static string GetProductUrl( this ProductUrlHelper helper, string productSeName, OrderItem orderItem) { Guard.NotNull(orderItem, nameof(orderItem)); var query = new ProductVariantQuery(); if (orderItem.Product.ProductType != ProductType.BundledProduct) { helper.DeserializeQuery(query, orderItem.ProductId, orderItem.AttributesXml); } else if (orderItem.Product.BundlePerItemPricing && orderItem.BundleData.HasValue()) { var bundleData = orderItem.GetBundleData(); bundleData.ForEach(x => helper.DeserializeQuery(query, x.ProductId, x.AttributesXml, x.BundleItemId)); } return(helper.GetProductUrl(query, productSeName)); }
/// <summary> /// Creates a product URL including variant query string. /// </summary> /// <param name="helper">Product URL helper</param> /// <param name="productSeName">Product SEO name</param> /// <param name="cartItem">Organized shopping cart item</param> /// <returns>Product URL</returns> public static string GetProductUrl( this ProductUrlHelper helper, string productSeName, OrganizedShoppingCartItem cartItem) { Guard.NotNull(cartItem, nameof(cartItem)); var query = new ProductVariantQuery(); var product = cartItem.Item.Product; if (product.ProductType != ProductType.BundledProduct) { helper.DeserializeQuery(query, product.Id, cartItem.Item.AttributesXml); } else if (cartItem.ChildItems != null && product.BundlePerItemPricing) { foreach (var childItem in cartItem.ChildItems.Where(x => x.Item.Id != cartItem.Item.Id)) { helper.DeserializeQuery(query, childItem.Item.ProductId, childItem.Item.AttributesXml, childItem.BundleItemData.Item.Id); } } return(helper.GetProductUrl(query, productSeName)); }