示例#1
0
        /// <summary>
        /// Creates a product URL including variant query string.
        /// </summary>
        /// <param name="helper">Product URL helper.</param>
        /// <param name="productSlug">Product URL slug.</param>
        /// <param name="cartItem">Organized shopping cart item.</param>
        /// <returns>Product URL.</returns>
        public static async Task <string> GetProductUrlAsync(this ProductUrlHelper helper, string productSlug, OrganizedShoppingCartItem cartItem)
        {
            Guard.NotNull(helper, nameof(helper));
            Guard.NotNull(cartItem, nameof(cartItem));

            var query   = new ProductVariantQuery();
            var product = cartItem.Item.Product;

            if (product.ProductType != ProductType.BundledProduct)
            {
                await helper.AddAttributesToQueryAsync(query, cartItem.Item.AttributeSelection, product.Id);
            }
            else if (cartItem.ChildItems != null && product.BundlePerItemPricing)
            {
                foreach (var childItem in cartItem.ChildItems.Where(x => x.Item.Id != cartItem.Item.Id))
                {
                    await helper.AddAttributesToQueryAsync(query, childItem.Item.AttributeSelection, childItem.Item.ProductId, childItem.Item.BundleItem.Id);
                }
            }

            return(helper.GetProductUrl(productSlug, query));
        }
示例#2
0
        /// <summary>
        /// Creates a product URL including variant query string.
        /// </summary>
        /// <param name="helper">Product URL helper.</param>
        /// <param name="productSlug">Product URL slug.</param>
        /// <param name="orderItem">Order item.</param>
        /// <returns>Product URL.</returns>
        public static async Task <string> GetProductUrlAsync(this ProductUrlHelper helper, string productSlug, OrderItem orderItem)
        {
            Guard.NotNull(helper, nameof(helper));
            Guard.NotNull(orderItem, nameof(orderItem));

            var query = new ProductVariantQuery();

            if (orderItem.Product.ProductType != ProductType.BundledProduct)
            {
                await helper.AddAttributesToQueryAsync(query, orderItem.AttributeSelection, orderItem.ProductId);
            }
            else if (orderItem.Product.BundlePerItemPricing && orderItem.BundleData.HasValue())
            {
                var bundleData = orderItem.GetBundleData();

                foreach (var item in bundleData)
                {
                    await helper.AddAttributesToQueryAsync(query, item.AttributeSelection, item.ProductId, item.BundleItemId);
                }
            }

            return(helper.GetProductUrl(productSlug, query));
        }