从SingleProductViewModel,获取与产品相关的变体的价格的最佳方式是什么?从上面链接的文档页面,我看到SingleProductViewModel包含一个Product对象,但我不知道如何使用它来获取变体的价格。 (我找不到Product对象的属性列表。)
以下是我的具体用例:我有一个Hotcakes类别查看器,我希望列出的每个产品都显示该产品所有变体的范围价格,而不仅仅是价格主要产品。例如,如果产品包含价格为10美元,20美元和30美元的变体,那么fedora产品的价格将为“10美元 - 30美元”。我碰巧使用了类别查看器的“简单”视图,所以我希望在_RenderSingleProductSimple.cshtml中实现它,但是我也有兴趣将它用于其他类别视图。
提前致谢。
答案 0 :(得分:0)
从我所看到的情况来看,当检测到变体时,大多数人会改变他们的观点来说出“以[PRICE]开头”或“尽可能低[PRICE]”这样的话。
如果您想要显示全部价格,也可以这样做,但您应该知道,根据视图中有多少变体和整体变体的数量,这可能会导致负面影响对网站的性能影响。看到多少影响可以从可忽略不计到不合需要。
您提到的文档包含有关Item
类的SingleProductViewModel
属性的信息。此属性包含您要查找的所有变体信息。
因此,您可以使用Item.HasVariants
属性来确定是否需要使用其他标签。如果返回true,则可以遍历Item.Variants
属性以获取所有价格并找到要显示的最低和最高价格。
答案 1 :(得分:0)
谢谢@Will Strohl,这是有用的信息。
我已将以下代码放在一起,这些代码似乎正在实现最初的目标。请注意,我说"变体"在这个问题中,这些是我们实现中的产品变体,但是我们通过产品选项实现变体的价格调整,因此下面的代码查看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>