|
@using EPiServer |
|
@using EPiServer.Commerce.Catalog.ContentTypes |
|
@using EPiServer.Commerce.Marketing |
|
@using EPiServer.Commerce.Marketing.Internal |
|
@using EPiServer.Commerce.Marketing.Promotions |
|
@using EPiServer.Framework.Localization |
|
@using EPiServer.Reference.Commerce.Site.Features.Product.Models |
|
@using EPiServer.Reference.Commerce.Site.Features.Product.Services |
|
@using EPiServer.Reference.Commerce.Site.Features.Search.Models |
|
@using EPiServer.Reference.Commerce.Site.Features.Search.Services |
|
@using EPiServer.ServiceLocation |
|
@using EPiServer.Web |
|
@using EPiServer.Web.Routing |
|
@model EPiServer.Reference.Commerce.Site.Features.Campaign.Pages.CampaignPage |
|
@{ |
|
Layout = "~/Views/Shared/_Layout.cshtml"; |
|
string segment; |
|
|
|
if (!Model.Property.TryGetPropertyValue("PageExternalURL", out segment)) |
|
{ |
|
segment = Model.URLSegment; |
|
} |
|
|
|
PromotionEngineContentLoader promotionEngineContentLoader = ServiceLocator.Current.GetInstance<PromotionEngineContentLoader>(); |
|
IContentLoader contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>(); |
|
IProductService productService = ServiceLocator.Current.GetInstance<IProductService>(); |
|
ISearchService searchService = ServiceLocator.Current.GetInstance<ISearchService>(); |
|
PromotionFilters promotionFilters = ServiceLocator.Current.GetInstance<PromotionFilters>(); |
|
LocalizationService localizationService = ServiceLocator.Current.GetInstance<LocalizationService>(); |
|
PromotionProcessorResolver promotionProcessorResolver = ServiceLocator.Current.GetInstance<PromotionProcessorResolver>(); |
|
SearchViewModelFactory searchViewModelFactory = new SearchViewModelFactory(localizationService, searchService); |
|
|
|
IEnumerable<PromotionData> promotions = promotionEngineContentLoader.GetPromotions(); |
|
PromotionFilterContext promotionFilterContext = promotionFilters.Filter(promotions, new List<string>(), RequestFulfillmentStatus.None); |
|
|
|
PromotionData selectedPromotion = promotionFilterContext.IncludedPromotions.FirstOrDefault(p => UrlSegment.GetUrlFriendlySegment(p.Name).Equals(segment, StringComparison.OrdinalIgnoreCase)); |
|
|
|
IPromotionProcessor promotionProcessor = promotionProcessorResolver.ResolveForPromotion(selectedPromotion); |
|
PromotionItems promotionItems = promotionProcessor.GetPromotionItems(selectedPromotion); |
|
} |
|
|
|
<div class="category-page"> |
|
|
|
@if (selectedPromotion != null) |
|
{ |
|
string imageUrl = UrlResolver.Current.GetUrl(selectedPromotion.Banner, null, new VirtualPathArguments { ContextMode = ContextMode.Default }); |
|
|
|
<div class="jumbotron" style="background-image: url(@imageUrl)"> |
|
<div class="container"> |
|
<h1>@selectedPromotion.Name</h1> |
|
<p>@selectedPromotion.Description</p> |
|
</div> |
|
</div> |
|
|
|
<div class="product-row jsSearch container-fluid"> |
|
<div class="row"> |
|
@{ |
|
List<ProductViewModel> models = new List<ProductViewModel>(); |
|
|
|
foreach (ContentReference conditionBlock in promotionItems.Condition.Items) |
|
{ |
|
ProductViewModel model; |
|
ProductContent product; |
|
|
|
if (contentLoader.TryGet(conditionBlock, out product)) |
|
{ |
|
model = productService.GetProductViewModel(product); |
|
models.Add(model); |
|
continue; |
|
} |
|
|
|
VariationContent variation; |
|
|
|
if (contentLoader.TryGet(conditionBlock, out variation)) |
|
{ |
|
model = productService.GetProductViewModel(variation); |
|
models.Add(model); |
|
continue; |
|
} |
|
|
|
NodeContent node; |
|
|
|
if (contentLoader.TryGet(conditionBlock, out node)) |
|
{ |
|
SearchViewModel<NodeContent> nodeContent = searchViewModelFactory.Create(node, new FilterOptionFormModel { FacetGroups = new List<FacetGroupOption>(), Page = 1, PageSize = int.MaxValue }); |
|
|
|
models.AddRange(nodeContent.ProductViewModels); |
|
} |
|
} |
|
|
|
Html.RenderPartial("_Category", models); |
|
} |
|
</div> |
|
</div> |
|
} |
|
|
|
@Html.PropertyFor(x => x.MainContentArea, new { CssClass = "row" }) |
|
|
|
</div> |