Hotcakes 通过 SingleProductViewModel 访问不同的价格
Hotcakes access variant prices via SingleProductViewModel
来自 SingleProductViewModel,获取与产品关联的变体价格的最佳方式是什么?从上面链接的文档页面中,我看到 SingleProductViewModel 包含一个 Product 对象,但我不确定如何使用它来获取变体的价格。 (我找不到 Product 对象的属性列表)。
这是我的具体用例:我有一个 Hotcakes 类别查看器,我希望列出的每个产品都显示该产品所有变体的 范围 价格,而不是而不仅仅是主要产品的价格。例如,如果产品包含价格为 10 美元、20 美元和 30 美元的变体,则软呢帽产品会将价格显示为“10 美元 - 30 美元”。我碰巧正在使用类别查看器的 "simple" 视图,所以我希望在 _RenderSingleProductSimple.cshtml 中实现它,但是我也有兴趣将它用于其他类别视图。
提前致谢。
据我所知,当检测到变体时,大多数人会改变他们的观点,说出 "Starting at [PRICE]" 或 "As Low As [PRICE]" 之类的话。
如果您想显示整个价格范围,也可以这样做,但您应该知道,根据具有变体的产品数量以及视图中总体变体的数量,这可能会导致对网站的负面性能影响。所见的影响有多大,从可以忽略不计到不需要。
您提到的文档包含有关 Item
属性 和 SingleProductViewModel
class 的信息。 属性 包含您要查找的所有变体信息。
因此,您可以使用 Item.HasVariants
属性 来确定是否需要不同的标签。如果 returns 为真,则您可以遍历 Item.Variants
属性 以获取所有价格并找到要显示的最低和最高价格。
谢谢@Will Strohl,这是有用的信息。
我整理了以下代码,似乎达到了最初的目的。请注意,我在问题中说 "variants",这些是我们实施中的产品变体,但是我们通过产品选项实现变体的价格调整,因此下面的代码着眼于 Model.Item.Options 而不是 Model.Item.Variants。此外,关于价格,我忽略了与我们的实施无关的用户价格细节,因此使用 Model.Item.ListPrice 而不是 Model.UserPrice.DisplayPrice。
<div class="hc-recprice">
@{
string priceToDisplay = "";
if (Model.Item.HasOptions()){
decimal minPrice = Decimal.MaxValue;
decimal maxPrice = Decimal.MinValue;
decimal oiPrice = 0;
Hotcakes.Commerce.Catalog.OptionList options = Model.Item.Options;
foreach (Hotcakes.Commerce.Catalog.Option o in options){
foreach (Hotcakes.Commerce.Catalog.OptionItem oi in o.Items){
oiPrice = Model.Item.ListPrice + oi.PriceAdjustment;
if (oiPrice < minPrice) {
minPrice = oiPrice;
}
if (oiPrice > maxPrice) {
maxPrice = oiPrice;
}
}
}
if(minPrice == maxPrice){
priceToDisplay = string.Format("{0:C0}", minPrice);
} else {
priceToDisplay = string.Format("{0:C0}", minPrice) + " - " + string.Format("{0:C0}", maxPrice);
}
} else {
priceToDisplay = string.Format("{0:C0}", Model.Item.ListPrice);
}
@Html.Raw(priceToDisplay)
}
</div>
来自 SingleProductViewModel,获取与产品关联的变体价格的最佳方式是什么?从上面链接的文档页面中,我看到 SingleProductViewModel 包含一个 Product 对象,但我不确定如何使用它来获取变体的价格。 (我找不到 Product 对象的属性列表)。
这是我的具体用例:我有一个 Hotcakes 类别查看器,我希望列出的每个产品都显示该产品所有变体的 范围 价格,而不是而不仅仅是主要产品的价格。例如,如果产品包含价格为 10 美元、20 美元和 30 美元的变体,则软呢帽产品会将价格显示为“10 美元 - 30 美元”。我碰巧正在使用类别查看器的 "simple" 视图,所以我希望在 _RenderSingleProductSimple.cshtml 中实现它,但是我也有兴趣将它用于其他类别视图。
提前致谢。
据我所知,当检测到变体时,大多数人会改变他们的观点,说出 "Starting at [PRICE]" 或 "As Low As [PRICE]" 之类的话。
如果您想显示整个价格范围,也可以这样做,但您应该知道,根据具有变体的产品数量以及视图中总体变体的数量,这可能会导致对网站的负面性能影响。所见的影响有多大,从可以忽略不计到不需要。
您提到的文档包含有关 Item
属性 和 SingleProductViewModel
class 的信息。 属性 包含您要查找的所有变体信息。
因此,您可以使用 Item.HasVariants
属性 来确定是否需要不同的标签。如果 returns 为真,则您可以遍历 Item.Variants
属性 以获取所有价格并找到要显示的最低和最高价格。
谢谢@Will Strohl,这是有用的信息。
我整理了以下代码,似乎达到了最初的目的。请注意,我在问题中说 "variants",这些是我们实施中的产品变体,但是我们通过产品选项实现变体的价格调整,因此下面的代码着眼于 Model.Item.Options 而不是 Model.Item.Variants。此外,关于价格,我忽略了与我们的实施无关的用户价格细节,因此使用 Model.Item.ListPrice 而不是 Model.UserPrice.DisplayPrice。
<div class="hc-recprice">
@{
string priceToDisplay = "";
if (Model.Item.HasOptions()){
decimal minPrice = Decimal.MaxValue;
decimal maxPrice = Decimal.MinValue;
decimal oiPrice = 0;
Hotcakes.Commerce.Catalog.OptionList options = Model.Item.Options;
foreach (Hotcakes.Commerce.Catalog.Option o in options){
foreach (Hotcakes.Commerce.Catalog.OptionItem oi in o.Items){
oiPrice = Model.Item.ListPrice + oi.PriceAdjustment;
if (oiPrice < minPrice) {
minPrice = oiPrice;
}
if (oiPrice > maxPrice) {
maxPrice = oiPrice;
}
}
}
if(minPrice == maxPrice){
priceToDisplay = string.Format("{0:C0}", minPrice);
} else {
priceToDisplay = string.Format("{0:C0}", minPrice) + " - " + string.Format("{0:C0}", maxPrice);
}
} else {
priceToDisplay = string.Format("{0:C0}", Model.Item.ListPrice);
}
@Html.Raw(priceToDisplay)
}
</div>