Error executing template "Designs/Swift/Paragraph/Swift_ProductDownloadPublication.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_e6328aa8c0754392980f05a110d52866.Execute() in D:\dynamicweb.net\Solutions\Dynamicweb\T3L.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductDownloadPublication.cshtml:line 23
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
2 @using Dynamicweb.Ecommerce.ProductCatalog
3 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites
4
5
6 @{
7 ProductViewModel product = null;
8 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
9 {
10 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"];
11 }
12 else if (Pageview.Page.Item["DummyProduct"] != null)
13 {
14 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page);
15 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel();
16
17 if (productList?.Products is object)
18 {
19 product = productList.Products[0];
20 }
21 }
22
23 string uniqueId = $"{product.Id}_{product.VariantId.Replace(".", "_")}_{Pageview.CurrentParagraph.ID}";
24 }
25
26 @if (product is object)
27 {
28 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", string.Empty);
29 horizontalAlign = horizontalAlign == "center" ? "justify-content-center" : horizontalAlign;
30 horizontalAlign = horizontalAlign == "end" ? "justify-content-end" : horizontalAlign;
31 horizontalAlign = horizontalAlign == "full" ? string.Empty : horizontalAlign;
32
33 string buttonSize = Model.Item.GetRawValueString("ButtonSize", "regular");
34
35 switch (buttonSize)
36 {
37 case "small":
38 buttonSize = " btn-sm";
39 break;
40 case "regular":
41 buttonSize = string.Empty;
42 break;
43 case "large":
44 buttonSize = " btn-lg";
45 break;
46 }
47
48 string iconPath = "/Files/icons/";
49
50 string flexFill = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "flex-fill" : string.Empty;
51 string fullWidth = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "w-100" : string.Empty;
52 string icon = Model.Item.GetRawValueString("Icon", iconPath + "printer.svg");
53 string label = !icon.Contains("_none") ? $"<span class=\"icon-2\">{ReadFile(icon)}</span>" : string.Empty;
54 label += !icon.Contains("_none") && !Model.Item.GetBoolean("HideButtonText") ? " " : string.Empty;
55 label += !Model.Item.GetBoolean("HideButtonText") && !string.IsNullOrEmpty(Model.Item.GetString("Title")) ? Model.Item.GetString("Title") : string.Empty;
56
57 var selectedCatalogs = Model.Item.GetList("SelectedCatalogs").SelectedOptions;
58 int catalogCount = 0;
59
60 var ecomLanguages = Dynamicweb.Ecommerce.Services.Languages.GetLanguages();
61 var currencies = Dynamicweb.Ecommerce.Services.Currencies.GetAllCurrencies();
62 var languageId = Dynamicweb.Ecommerce.Common.Context.LanguageID;
63
64 <div class="d-flex @horizontalAlign @fullWidth item_@Model.Item.SystemName.ToLower()">
65 <button type="button" class="btn btn-primary @(buttonSize) @flexFill" data-bs-toggle="modal" data-bs-target="#DownloadPublicationModal@(uniqueId)" style="white-space: nowrap" title="@Model.Item.GetString("Title")" id="DownloadPublication@(uniqueId)">
66 @if (!Model.Item.GetBoolean("HideButtonText"))
67 {
68 <span class="text-nowrap d-flex align-items-center justify-content-center gap-2">
69 @label
70 </span>
71 }
72 else
73 {
74 @label
75 }
76 </button>
77 </div>
78
79 <div class="modal fade" id="DownloadPublicationModal@(uniqueId)" tabindex="-1" aria-labelledby="#DownloadPublicationModalLabel@(uniqueId)" aria-hidden="true">
80 <div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable">
81 <form target="_blank" action="/Default.aspx?ID=@selectedCatalogs.FirstOrDefault().Value" method="post" class="modal-content" id="DownloadPublicationModalForm@(uniqueId)">
82 <input type="hidden" name="mainproductid" value="@product.Id">
83 <input type="hidden" name="print" value="true">
84
85 @if (!string.IsNullOrEmpty(product.VariantId))
86 {
87 <input type="hidden" name="VariantId" value="@product.VariantId">
88 }
89
90 <div class="modal-header">
91 <h1 class="modal-title fs-5" id="DownloadPublicationModalLabel@(uniqueId)">@Translate("Publication for print")</h1>
92 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
93 </div>
94 <div class="modal-body p-0">
95 <div class="grid gap-0">
96 <div class="g-col-12 g-col-lg-4 border-end p-3 p-lg-4">
97
98 @if (Model.Item.GetBoolean("ShowLanguageSelector") && ecomLanguages.Count() > 1)
99 {
100 <div class="mb-4">
101 <label class="form-label">@Translate("Language")</label>
102 <select name="RequestLanguageID" class="form-select" aria-label="@Translate("Language")">
103 @foreach (var language in ecomLanguages)
104 {
105 if (@language.LanguageId == "LANG1" || @language.LanguageId == "LANG2" || @language.LanguageId == "LANG3" || @language.LanguageId == "LANG5" || @language.LanguageId == "LANG4" || @language.LanguageId == "LANG6")
106 {
107 <option value="@language.LanguageId">@language.GetDisplayName()</option>
108 }
109 }
110 </select>
111 </div>
112 }
113
114
115 @if (Model.Item.GetBoolean("ShowCurrencySelector"))
116 {
117 <div class="mb-4" id="CurrencySelector@(uniqueId)">
118 <label class="form-label">@Translate("Currency")</label>
119 <select name="RequestCurrencyCode" class="form-select" aria-label="@Translate("Currency")">
120 @foreach (var currency in currencies)
121 {
122 <option value="@currency.Code">@currency.GetName(languageId)</option>
123 }
124 </select>
125 </div>
126 }
127
128 @if (Model.Item.GetBoolean("ShowPriceSelector"))
129 {
130 <div class="mb-4">
131 <label class="form-label">@Translate("Show price")</label>
132 <div class="form-check">
133 <input class="form-check-input" type="radio" name="hideprice" value="false" id="HidePriceFalse@(uniqueId)" checked onchange="document.querySelector('#CurrencySelector@(uniqueId)').classList.remove('d-none')">
134 <label class="form-check-label" for="HidePriceFalse@(uniqueId)">
135 @Translate("Yes")
136 </label>
137 </div>
138 <div class="form-check">
139 <input class="form-check-input" type="radio" name="hideprice" value="true" id="HidePriceTrue@(uniqueId)" onchange="document.querySelector('#CurrencySelector@(uniqueId)').classList.add('d-none')">
140 <label class="form-check-label" for="HidePriceTrue@(uniqueId)">
141 @Translate("No")
142 </label>
143 </div>
144 </div>
145 }
146
147 </div>
148 <div class="g-col-12 g-col-lg-8 p-3 p-lg-4">
149 <div class="grid grid-2 grid-lg-3 gap-lg-4">
150 @foreach (var catalog in selectedCatalogs)
151 {
152 var selected = catalogCount == 0 ? "checked" : string.Empty;
153 var radioId = $"CatalogCheck_{Model.ID}_{catalog.Value}";
154 var page = Dynamicweb.Content.Services.Pages.GetPage(Convert.ToInt32(catalog.Value));
155 string imagePath = page.Item["Thumbnail"] != null ? $"/Admin/Public/GetImage.ashx?image={page.Item["Thumbnail"].ToString()}&width=200&format=webp" : $"https://placehold.co/235x300?text={@Translate("Catalog+Image")}";
156
157 <div class="form-thumb">
158 <input class="form-thumb-input visually-hidden" type="radio" name="ID" value="@catalog.Value" id="@radioId" onclick="document.querySelector('#DownloadPublicationModalForm@(uniqueId)').action='/Default.aspx?ID=@(catalog.Value)'" @selected>
159 <label class="form-thumb-label d-flex flex-column" for="@radioId" role="button">
160 <span class="d-block p-1">
161 <img class="rounded-2 w-100" style="object-fit:cover" src="@imagePath" />
162 </span>
163 <span class="d-grid p-3">
164 <span class="d-block fw-bold">@catalog.Name</span>
165 @*<span class="d-block opacity-75 fs-7 lh-sm">@catalog.Name</span> // Descriptive text goes here //*@
166 </span>
167 </label>
168 </div>
169
170 catalogCount++;
171 }
172 </div>
173 </div>
174 </div>
175 </div>
176 <div class="modal-footer">
177 <button type="submit" class="btn btn-primary">@Translate("Print")</button>
178 </div>
179 </form>
180 </div>
181 </div>
182
183 }
184 else if (Pageview.IsVisualEditorMode)
185 {
186 <div class="alert alert-dark m-0">@Translate("No products available")</div>
187 }
188