Error executing template "Designs/Swift/_parsed/Swift_Page.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception (0x80004005): The network path was not found
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Dynamicweb.Data.DatabaseConnectionProvider.CreateConnection(Boolean open)
at Dynamicweb.Data.Database.CreateConnection()
at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout)
at Dynamicweb.Ecommerce.Products.ProductRepository.GetProductById(String productId, String productVariantId, String productLanguageId)
at Dynamicweb.Ecommerce.Products.ProductService.FetchMissingProductsInternal(IProductRepository repo, IEnumerable`1 keys)
at Dynamicweb.Caching.ServiceCache`2.GetCache(IEnumerable`1 keys)
at Dynamicweb.Caching.ServiceCache`2.GetCache(TKey key)
at Dynamicweb.Ecommerce.Products.ProductService.GetProductById(String productId, String productVariantId, String productLanguageId, User user, Boolean showUntranslated)
at Dynamicweb.Ecommerce.Products.ProductService.GetProductById(String productId, String productVariantId, String productLanguageId, Boolean useAssortments)
at Dynamicweb.Ecommerce.Products.Product.GetProductById(String productId)
at CompiledRazorTemplates.Dynamic.RazorEngine_484c51ec18854cf58020472f93afad10.Execute() in D:\dynamicweb.net\Solutions\Altex Holding\altexrtc.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\_parsed\Swift_Page.parsed.cshtml:line 468
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()
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:53,State:0,Class:20
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2 @using System
3 @using System.Web;
4 @using Dynamicweb
5 @using Dynamicweb.Environment
6 @using Dynamicweb.Frontend
7
8 @{
9 string swiftVersion = ReadFile("/Files/Templates/Designs/Swift/swift_version.txt");
10 bool renderAsResponsive = Model.Area.Item.GetString("DeviceRendering", "responsive").Equals("responsive", StringComparison.OrdinalIgnoreCase);
11 bool renderMobile = Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile || Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Tablet;
12 string responsiveClassDesktop = string.Empty;
13 string responsiveClassMobile = string.Empty;
14 if (renderAsResponsive)
15 {
16 responsiveClassDesktop = " d-none d-xl-block";
17 responsiveClassMobile = " d-block d-xl-none";
18 }
19
20 var disableWideBreakpoints = Model.Area?.Item?.GetRawValueString("DisableWideBreakpoints", "default");
21
22 var brandingPageId = Model.Area.Item.GetLink("BrandingPage") != null ? Model.Area.Item.GetLink("BrandingPage").PageId : 0;
23 var themePageId = Model.Area.Item.GetLink("ThemesPage") != null ? Model.Area.Item.GetLink("ThemesPage").PageId : 0;
24 string customHeaderInclude = Model.Area.Item.GetFile("CustomHeaderInclude") != null ? Model.Area.Item.GetFile("CustomHeaderInclude").Name : string.Empty;
25
26 var brandingPage = Dynamicweb.Services.Pages?.GetPage(brandingPageId) ?? null;
27 var themesParagraphLastChanged = Services.Paragraphs.GetParagraphsByPageId(themePageId).OrderByDescending(p => p.Audit.LastModifiedAt).FirstOrDefault();
28
29 var cssLastModified = brandingPage.Audit.LastModifiedAt > themesParagraphLastChanged.Audit.LastModifiedAt ? brandingPage.Audit.LastModifiedAt : themesParagraphLastChanged.Audit.LastModifiedAt;
30 var cssThemeAndBrandingStyleFileInfo = new System.IO.FileInfo(Dynamicweb.Core.SystemInformation.MapPath($"/Files/Templates/Designs/Swift/_parsed/Swift_css/Swift_styles_{Model.Area.ID}.min.css"));
31
32 // Schema.org details for PDP
33 string productId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("ProductID")) ? Dynamicweb.Context.Current.Request.QueryString.Get("ProductID") : "";
34 bool isProductDetailsPage = !string.IsNullOrEmpty(productId);
35 bool isArticlePage = Model.ItemType == "Swift_Article";
36 string schemaOrgType = string.Empty;
37 int homepageId = GetPageIdByNavigationTag("Homepage");
38 string isHomePage = Model.ID == homepageId ? "is-homepage" : "";
39
40 if (isProductDetailsPage)
41 {
42 schemaOrgType = "itemscope=\"\" itemtype=\"https://schema.org/Product\"";
43 }
44
45 if (isArticlePage)
46 {
47 schemaOrgType = "itemscope=\"\" itemtype=\"https://schema.org/Article\"";
48 }
49
50 if (!cssThemeAndBrandingStyleFileInfo.Exists || cssThemeAndBrandingStyleFileInfo.LastWriteTime < brandingPage.Audit.LastModifiedAt)
51 {
52 //Branding page has been saved or the file is missing. Rewrite the file to disc.
53 if (brandingPageId > 0)
54 {
55 var brandingPageview = Dynamicweb.Frontend.PageView.GetPageviewByPageID(brandingPageId);
56 brandingPageview.Redirect = false;
57 brandingPageview.Output();
58 }
59 }
60
61 if (!cssThemeAndBrandingStyleFileInfo.Exists || cssThemeAndBrandingStyleFileInfo.LastWriteTime < themesParagraphLastChanged.Audit.LastModifiedAt)
62 {
63 //Branding page has been saved or the file is missing. Rewrite the file to disc.
64 if (themePageId > 0)
65 {
66 var themePageview = Dynamicweb.Frontend.PageView.GetPageviewByPageID(themePageId);
67 themePageview.Redirect = false;
68 themePageview.Output();
69 }
70 }
71
72 var cssStyleFileInfo = new System.IO.FileInfo(Dynamicweb.Core.SystemInformation.MapPath("/Files/Templates/Designs/Swift/Assets/css/styles.css"));
73 var jsFileInfo = new System.IO.FileInfo(Dynamicweb.Core.SystemInformation.MapPath("/Files/Templates/Designs/Swift/Assets/js/scripts.js"));
74
75
76
77
78
79 string masterTheme = !string.IsNullOrWhiteSpace(Model.Area.Item.GetRawValueString("Theme")) ? " theme " + Model.Area.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
80
81 string favicon = Model.Area.Item.GetFile("Favicon") != null ? Model.Area.Item.GetFile("Favicon").Path : "/Files/Templates/Designs/Swift/Assets/Images/favicon.png";
82
83 string headerCssClass = "sticky-top";
84 bool movePageBehind = false;
85
86 if (Pageview.Page.PropertyItem != null)
87 {
88 headerCssClass = Pageview.Page.PropertyItem["MoveThisPageBehindTheHeader"] != null ? Pageview.Page.PropertyItem["MoveThisPageBehindTheHeader"].ToString() : "sticky-top";
89 movePageBehind = headerCssClass == "fixed-top" && !Pageview.IsVisualEditorMode ? true : false;
90 }
91
92 headerCssClass = headerCssClass == "" ? "sticky-top" : headerCssClass;
93 headerCssClass = Pageview.IsVisualEditorMode ? "" : headerCssClass;
94
95 string googleAnalyticsTrackingID = Model.Area.Item.GetString("GoogleAnalyticsTrackingID");
96 string googleAnalyticsMeasurementID = Model.Area.Item.GetString("GoogleAnalyticsMeasurementID");
97 var cookieOptInLevel = CookieManager.GetCookieOptInLevel();
98 bool allowTracking = cookieOptInLevel == CookieOptInLevel.All || (cookieOptInLevel == CookieOptInLevel.Functional && CookieManager.GetCookieOptInCategories().Contains("Statistical"));
99
100 Dynamicweb.Context.Current.Response.AddHeader("link", $"</Files/Templates/Designs/Swift/Assets/css/styles.css?{cssStyleFileInfo.LastWriteTime.Ticks}>; rel=preload; as=style;");
101 Dynamicweb.Context.Current.Response.AddHeader("link", $"</Files/Templates/Designs/Swift/_parsed/Swift_css/Swift_styles_{Model.Area.ID}.min.css?{cssLastModified.Ticks}; rel=preload; as=style;");
102 Dynamicweb.Context.Current.Response.AddHeader("link", $"</Files/Templates/Designs/Swift/Assets/js/aos.js?{jsFileInfo.LastWriteTime.Ticks}; rel=preload; as=script;");
103 Dynamicweb.Context.Current.Response.AddHeader("link", $"</Files/Templates/Designs/Swift/Assets/js/scripts.js?{jsFileInfo.LastWriteTime.Ticks}; rel=preload; as=script;");
104
105
106 bool isProductsInCart = Model.Cart.TotalProductsCount > 0;
107 var currentUser = Dynamicweb.Security.UserManagement.User.GetCurrentExtranetUser();
108 var isLoggedIn = false;
109 isLoggedIn = Pageview.User != null ? true : false;
110 bool customerFromSite = Pageview.User != null ? RTC.eCommerce.CreateCustomer.UserExtensions.GetCustomerFromSite(Pageview.User) : false;
111 var userAdresaNouaPageId = GetPageIdByNavigationTag("UserAdresaNoua");
112 var userAdresaNouaURL = $"/Default.aspx?ID={userAdresaNouaPageId}";
113
114 var mesageVodafonePageId = GetPageIdByNavigationTag("mesajvodafone");
115 var mesageVodafonePageURL = $"/Default.aspx?ID={mesageVodafonePageId}";
116 var mesagementenantaPageId = GetPageIdByNavigationTag("mesajmentenanta");
117 var mesagementenantaPageURL = $"/Default.aspx?ID={mesagementenantaPageId}";
118 var mesageOmniasigPageId = GetPageIdByNavigationTag("mesajomniasig");
119 var mesageOmniasigPageURL = $"/Default.aspx?ID={mesageOmniasigPageId}";
120
121 if(isLoggedIn) {
122 if(customerFromSite && Dynamicweb.Frontend.PageView.Current().Page.ID != userAdresaNouaPageId) {
123 HttpContext.Current.Response.Redirect(userAdresaNouaURL);
124 }
125
126 if(currentUser.CustomerNumber.Contains("x24511x") && currentUser.Title !="Clienti_Mari") {
127 if(Dynamicweb.Frontend.PageView.Current().Page.ID != mesageVodafonePageId)
128 {
129 HttpContext.Current.Response.Redirect(mesageVodafonePageURL);
130 }
131 }
132
133
134 @*if(currentUser.CustomerNumber.Contains("x101577x") && currentUser.Title !="ClientiMariOmniasig") {
135 if(Dynamicweb.Frontend.PageView.Current().Page.ID != mesageOmniasigPageId)
136 {
137 HttpContext.Current.Response.Redirect(mesageOmniasigPageURL);
138 }
139 } *@
140
141 if ((currentUser.CustomerNumber == "x77527x" || currentUser.CustomerNumber == "xNO19021x" || currentUser.CustomerNumber == "xIL19T024x" || currentUser.CustomerNumber == "xNO19022x") && currentUser.Title != "testEngie")
142 {
143 if(Dynamicweb.Frontend.PageView.Current().Page.ID != 2121)
144 {
145 HttpContext.Current.Response.Redirect("/Default.aspx?ID=2121");
146 }
147 }
148
149 if((currentUser.CustomerNumber.Contains("x24ss511x"))) {
150 if(Dynamicweb.Frontend.PageView.Current().Page.ID != mesagementenantaPageId)
151 {
152 HttpContext.Current.Response.Redirect(mesagementenantaPageURL);
153 }
154 }
155 }
156
157
158 //Dynamicweb.Context.Current.Response.Flush(); //This sends the headers where we are now in the rendering making the TTFB faster
159
160
161
162
163
164 SetMetaTags();
165
166 List<Dynamicweb.Content.Page> languages = new List<Dynamicweb.Content.Page>();
167
168 if (Pageview.Area.IsMaster)
169 {
170 languages.Add(Pageview.Page);
171 if (Pageview.Page.Languages != null)
172 {
173 foreach (var language in Pageview.Page.Languages)
174 {
175 languages.Add(language);
176 }
177 }
178 }
179 else
180 {
181 languages.Add(Pageview.Page.MasterPage);
182 if (Pageview.Page.MasterPage != null)
183 {
184 if (Pageview.Page.MasterPage.Languages != null)
185 {
186 foreach (var language in Pageview.Page.MasterPage.Languages)
187 {
188 languages.Add(language);
189 }
190 }
191 }
192 }
193
194 string siteLanguage = Pageview.Area.CultureInfo.Name;
195 Uri url = Dynamicweb.Context.Current.Request.Url;
196 string hostName = url.Host; // domain.com/da-dk or domain.com/en-us
197
198 var ecomCountries = Dynamicweb.Ecommerce.Services.Countries.GetCountries();
199 var ecomCurrencies = Dynamicweb.Ecommerce.Services.Currencies.GetAllCurrencies();
200 }
201 <!doctype html>
202 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName">
203 <head>
204
205 @*<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E=" crossorigin="anonymous"></script>*@
206
207 <link href="/Files/Templates/Designs/Swift/Assets/css/rtc_custom.css" rel="stylesheet" media="all">
208 <script src="/Files/Templates/Designs/Swift/Assets/js/rtc_custom.js"></script>
209
210 @*
211 <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
212 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
213 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
214 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
215 })(window,document,'script','dataLayer','GTM-KCWHC6Q');</script>*@
216
217 @*Define dataLayer and the gtag function *@
218 <script>
219 window.dataLayer = window.dataLayer || [];
220 function gtag(){dataLayer.push(arguments);}
221
222 gtag('consent', 'default', {
223 'ad_storage': 'denied',
224 'ad_user_data': 'denied',
225 'ad_personalization': 'denied',
226 'analytics_storage': 'denied',
227 'functionality_storage': 'denied',
228 'personalization_storage': 'denied',
229 'security_storage': 'denied'
230 });
231 </script>
232
233 @* Google Tag Manager*@
234 <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
235 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
236 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
237 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
238 })(window,document,'script','dataLayer','GTM-KCWHC6Q');</script>
239
240 <!-- @swiftVersion -->
241 @* Required meta tags *@
242 <meta charset="utf-8">
243 <meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0">
244 <link rel="shortcut icon" href="@favicon">
245 <link rel="apple-touch-icon" href="/Files/Templates/Designs/Swift/Assets/Images/logo_transparent.png">
246
247 @Model.MetaTags
248
249 @{
250 @* Languages meta data *@
251 foreach (var language in languages)
252 {
253 if (language?.Area != null)
254 {
255 if (language != null && language.Published && language.Active && language.Area.Active && language.Area.Published && language.Area.ID != Dynamicweb.Frontend.PageView.Current().AreaID)
256 {
257 if (!string.IsNullOrEmpty(language.Area.DomainLock))
258 {
259 hostName = language.Area.DomainLock; //dk.domain.com or dk-domain.dk
260 }
261 string querystring = $"Default.aspx?ID={language.ID}";
262 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["GroupID"]))
263 {
264 querystring += $"&GroupID={Dynamicweb.Context.Current.Request.QueryString["GroupID"]}";
265 }
266 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["ProductID"]))
267 {
268 querystring += $"&ProductID={Dynamicweb.Context.Current.Request.QueryString["ProductID"]}";
269 }
270 if (!string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["VariantID"]))
271 {
272 querystring += $"&VariantID={Dynamicweb.Context.Current.Request.QueryString["VariantID"]}";
273 }
274
275 string friendlyUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(querystring);
276 string href = $"{url.Scheme}://{hostName}{friendlyUrl}";
277
278 <link rel="alternate" hreflang="@language.Area.CultureInfo.Name.ToLower()" href="@href">
279 }
280 }
281 }
282 }
283
284 <title>@Model.Title</title>
285 @* Bootstrap + Swift stylesheet *@
286 <link href="/Files/Templates/Designs/Swift/Assets/css/styles.css?@cssStyleFileInfo.LastWriteTime.Ticks" rel="stylesheet" media="all" type="text/css">
287
288 @if (disableWideBreakpoints != "disableBoth")
289 {
290 <style>
291 @@media ( min-width: 1600px ) {
292 .container-xxl,
293 .container-xl,
294 .container-lg,
295 .container-md,
296 .container-sm,
297 .container {
298 max-width: 1520px;
299 }
300 }
301 </style>
302
303 if (disableWideBreakpoints != "disableUltraWideOnly")
304 {
305 <style>
306 @@media ( min-width: 1920px ) {
307 .container-xxl,
308 .container-xl,
309 .container-lg,
310 .container-md,
311 .container-sm,
312 .container {
313 max-width: 1820px;
314 }
315 }
316 </style>
317 }
318 }
319
320 @* Branding and Themes min stylesheet *@
321 <link href="/Files/Templates/Designs/Swift/_parsed/Swift_css/Swift_styles_@(Model.Area.ID).min.css?@cssLastModified.Ticks" rel="stylesheet" media="all" type="text/css" data-last-modified-content="@cssLastModified">
322 <script src="/Files/Templates/Designs/Swift/Assets/js/aos.js?@jsFileInfo.LastWriteTime.Ticks" defer></script>
323 <script src="/Files/Templates/Designs/Swift/Assets/js/scripts.js?@jsFileInfo.LastWriteTime.Ticks" defer></script>
324
325 <script type="module">
326 AOS.init({ offset: 0, duration: 400, delay: 100, easing: 'ease-in-out', mirror: true, disable: window.matchMedia('(prefers-reduced-motion: reduce)') });
327 swift.Scroll.hideHeadersOnScroll();
328 swift.Scroll.handleAlternativeTheme();
329 </script>
330
331 @* Global site tag (gtag.js) - Google Analytics *@
332 @if (!string.IsNullOrWhiteSpace(googleAnalyticsTrackingID) && allowTracking)
333 {
334 <script src="https://www.googletagmanager.com/gtag/js?id=@googleAnalyticsTrackingID" async></script>
335 <script>
336 window.dataLayer = window.dataLayer || [];
337 function gtag() { window.dataLayer.push(arguments); }
338 gtag('js', new Date());
339 gtag('config', '@googleAnalyticsTrackingID');
340 </script>
341 }
342
343 @if (!string.IsNullOrWhiteSpace(googleAnalyticsMeasurementID) && allowTracking)
344 {
345 var GoogleAnalyticsDebugMode = "";
346 bool isLoggedInBackendUser = false;
347
348 if (Dynamicweb.Environment.ExecutingContext.IsAdminLoggedIn())
349 {
350 isLoggedInBackendUser = true;
351 }
352
353 if (Model.Area.Item.GetBoolean("EnableGoogleAnalyticsDebugMode") && @isLoggedInBackendUser)
354 {
355 GoogleAnalyticsDebugMode = ", {'debug_mode': true}";
356 }
357
358 <script async src="https://www.googletagmanager.com/gtag/js?id=@googleAnalyticsMeasurementID"></script>
359 <script>
360 window.dataLayer = window.dataLayer || [];
361 function gtag() { dataLayer.push(arguments); }
362 gtag('js', new Date());
363 gtag('config', '@googleAnalyticsMeasurementID'@GoogleAnalyticsDebugMode);
364 </script>
365 }
366
367 @if (!string.IsNullOrWhiteSpace(customHeaderInclude))
368 {
369 @RenderPartial($"Components/Custom/{customHeaderInclude}")
370 }
371 </head>
372 <body class="brand @(masterTheme) @isHomePage position-relative" id="page@(Model.ID)" data-isproductscart="@isProductsInCart" data-is-loggedin="@isLoggedIn">
373 <!-- Google Tag Manager (noscript) -->
374 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KCWHC6Q"
375 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
376 <!-- End Google Tag Manager (noscript) -->
377 @if (renderAsResponsive || !renderMobile)
378 {
379 <header class="page-header @headerCssClass top-0@(responsiveClassDesktop)" id="page-header-desktop">
380 @* ALERTA CRACIUN
381 @if (isLoggedIn) // Verifică dacă utilizatorul este logat
382 {
383
384 <div class="alert alert-warning alert-dismissible fade show text-center" role="alert" id="deliveryAlert" style="display: none;">
385 <div class="container">
386 <h4 class="alert-heading">Program de sărbători</h4>
387 <p>Stimați parteneri, vă aducem la cunoștință programul de procesare și livrare comenzi în perioada sărbătorilor:</p>
388 <ul style="list-style:none">
389 <li>Comenzile plasate in intervalul <b>29-30 Aprilie</b> se proceseaza si livreaza incepand cu <b>2 mai 2024</b></li>
390 <li>Comenzile plasate in intervalul <b>1-6 Mai</b> se proceseaza si livreaza incepand cu <b>7 mai 2024</b></li>
391 </ul>
392 <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close" onclick="dismissAlert()"></button>
393 </div>
394 </div>
395
396 <script>
397 function dismissAlert() {
398 var alertWrapper = document.getElementById('deliveryAlert');
399 var date = new Date();
400 date.setTime(date.getTime() + (60 * 35 * 1000)); // 1 ora - 5 minute
401 document.cookie = "alertDismissed=true; expires=" + date.toUTCString() + "; path=/";
402 alertWrapper.style.display = 'none';
403 }
404
405 document.addEventListener("DOMContentLoaded", function () {
406 var alertWrapper = document.getElementById('deliveryAlert');
407 var showAlert = !document.cookie.split('; ').find(row => row.startsWith('alertDismissed='));
408
409 if(showAlert) {
410 alertWrapper.style.display = 'block';
411 }
412 });
413 </script>
414 }
415 ALERTA CRACIUN *@
416 @if (@Model.Area.Item.GetLink("HeaderDesktop") != null)
417 {
418 @RenderGrid(@Model.Area.Item.GetLink("HeaderDesktop").PageId)
419 }
420 </header>
421 }
422
423 @if ((renderAsResponsive || renderMobile))
424 {
425 <header class="page-header @headerCssClass top-0@(responsiveClassMobile)" id="page-header-mobile">
426 @if (@Model.Area.Item.GetLink("HeaderMobile") != null)
427 {
428 @RenderGrid(@Model.Area.Item.GetLink("HeaderMobile").PageId)
429 }
430
431 </header>
432 }
433
434 <main id="content" @(schemaOrgType)>
435 <div data-intersect></div>
436 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
437 @using System
438 @using Dynamicweb.Ecommerce.ProductCatalog
439
440
441 @{
442 string productIdFromUrl = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("ProductID")) ? Dynamicweb.Context.Current.Request.QueryString.Get("ProductID") : string.Empty;
443 bool isProductDetail = !string.IsNullOrEmpty(productIdFromUrl) && Pageview.Page.NavigationTag.ToLower() == "shop";
444
445 bool isArticlePagePage = Model.ItemType == "Swift_Article";
446 string schemaOrgProp = string.Empty;
447 if(isArticlePagePage)
448 {
449 schemaOrgProp = "itemprop=\"articleBody\"";
450 }
451
452 string theme = "";
453 string gridContent = "";
454
455 if (Model.PropertyItem != null)
456 {
457 theme = !string.IsNullOrWhiteSpace(Model.PropertyItem.GetRawValueString("Theme")) ? " theme " + Model.PropertyItem.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
458 }
459
460 if (Model.Item != null || Pageview.IsVisualEditorMode)
461 {
462 if (!isProductDetail)
463 {
464 gridContent = Model.Grid("Grid", "Grid", "default:true;sort:1", "Page");
465 }
466 else
467 {
468 var productObject = Dynamicweb.Ecommerce.Products.Product.GetProductById(productIdFromUrl);
469 var detailPage = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(productObject.PrimaryGroupId)?.Meta.PrimaryPage ?? string.Empty;
470 var detailPageId = detailPage != string.Empty ? Convert.ToInt16(detailPage.Substring(detailPage.LastIndexOf('=') + 1)) : GetPageIdByNavigationTag("ProductDetailPage");
471
472 @RenderGrid(detailPageId)
473 }
474 }
475
476 bool doNotRenderPage = false;
477
478 //Check if we are on the poduct detail page, and if there is data to render
479 ProductViewModel product = new ProductViewModel();
480 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
481 {
482 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"];
483 if (string.IsNullOrEmpty(product.Id)) {
484 doNotRenderPage = true;
485 }
486 }
487
488 //Render the page
489 if (!doNotRenderPage) {
490 string itemIdentifier = Model?.Item?.SystemName != null ? "item_" + Model.Item.SystemName.ToLower() : "item_Swift_Page";
491
492 if (theme != "")
493 {
494 <div class="@theme item_@itemIdentifier" @schemaOrgProp>
495 @gridContent
496 </div>
497 }
498 else
499 {
500 <div class="item_@itemIdentifier" @schemaOrgProp>
501 @gridContent
502 </div>
503 }
504 } else {
505 <div class="container">
506 <div class="alert alert-info" role="alert">@Translate("Sorry. There is nothing to view here")</div>
507 </div>
508 }
509
510 if (!Model.IsCurrentUserAllowed)
511 {
512 int signInPage = GetPageIdByNavigationTag("SignInPage");
513 int dashboardPage = GetPageIdByNavigationTag("MyAccountDashboardPage");
514
515 if (!Pageview.IsVisualEditorMode)
516 {
517 if (signInPage != 0)
518 {
519 if (signInPage != Model.ID) {
520 Dynamicweb.Context.Current.Response.Redirect("/Default.aspx?ID=" + signInPage);
521 } else {
522 if (dashboardPage != 0) {
523 Dynamicweb.Context.Current.Response.Redirect("/Default.aspx?ID=" + dashboardPage);
524 } else {
525 Dynamicweb.Context.Current.Response.Redirect("/");
526 }
527 }
528 }
529 else
530 {
531 <div class="alert alert-dark m-0" role="alert">
532 <span>@Translate("You do not have access to this page")</span>
533 </div>
534 }
535 }
536 else
537 {
538 <div class="alert alert-dark m-0" role="alert">
539 <span>@Translate("To work on this page, you must be signed in, in the frontend")</span>
540 </div>
541 }
542 }
543 }
544
545 </main>
546
547 @if (renderAsResponsive || !renderMobile)
548 {
549 <footer class="page-footer@(responsiveClassDesktop)" id="page-footer-desktop">
550 @if (@Model.Area.Item.GetLink("FooterDesktop") != null)
551 {
552 @RenderGrid(@Model.Area.Item.GetLink("FooterDesktop").PageId)
553 }
554 </footer>
555 }
556
557 @if (renderAsResponsive || renderMobile)
558 {
559 <footer class="page-footer@(responsiveClassMobile)" id="page-footer-mobile">
560 @if (@Model.Area.Item.GetLink("FooterMobile") != null)
561 {
562 @RenderGrid(@Model.Area.Item.GetLink("FooterMobile").PageId)
563 }
564 </footer>
565 }
566
567 @* Render any offcanvas menu here *@
568 @RenderSnippet("offcanvas")
569
570 @{
571 bool isErpConnectionDown = !Dynamicweb.Ecommerce.DynamicwebLiveIntegration.TemplatesHelper.IsWebServiceConnectionAvailable();
572 }
573
574 @* Language selector modal *@
575 @if (languages.Count > 1 || ecomCountries.Count > 1 || ecomCurrencies.Count() > 1)
576 {
577 <div class="modal fade" id="PreferencesModal" tabindex="-1" aria-hidden="true">
578 <div class="modal-dialog modal-dialog-centered modal-sm" id="PreferencesModalContent">
579 @* The content here comes from an external request *@
580 </div>
581 </div>
582 }
583
584 @* Favorite toast *@
585 <div aria-live="polite" aria-atomic="true">
586 <div class="position-fixed bottom-0 end-0 p-3" style="z-index: 11">
587 <div id="favoriteNotificationToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
588 <div class="toast-header">
589 <strong class="me-auto">@Translate("Favorite list updated")</strong>
590 <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
591 </div>
592 <div class="toast-body d-flex gap-3">
593 <div id="favoriteNotificationToast_Image"></div>
594 <div id="favoriteNotificationToast_Text"></div>
595 </div>
596 </div>
597 </div>
598 </div>
599
600 @* Modal for dynamic content *@
601 <div class="modal fade js-product" id="DynamicModal" tabindex="-1" aria-hidden="true">
602 <div class="modal-dialog modal-dialog-centered modal-md">
603 <div class="modal-content theme light" id="DynamicModalContent">
604 @* The content here comes from an external request *@
605 </div>
606 </div>
607 </div>
608
609 @* Offcanvas for dynamic content *@
610 <div class="offcanvas offcanvas-end theme light" tabindex="-1" id="DynamicOffcanvas" style="width: 30rem">
611 @* The content here comes from an external request *@
612 </div>
613
614 @if (isErpConnectionDown && Model.Area.Item.GetBoolean("ShowErpDownMessage"))
615 {
616 string erpDownMessageTheme = !string.IsNullOrWhiteSpace(Model.Area.Item.GetRawValueString("ErpDownMessageTheme")) ? " theme " + Model.Area.Item.GetRawValueString("ErpDownMessageTheme").Replace(" ", "").Trim().ToLower() : "theme light";
617
618 <div class="position-fixed bottom-0 end-0 p-3" style="z-index: 1040">
619 <div class="toast fade show border-0 @erpDownMessageTheme" role="alert" aria-live="assertive" aria-atomic="true">
620 <div class="toast-header">
621 <strong class="me-auto">@Translate("Connection down")</strong>
622 <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
623 </div>
624 <div class="toast-body">
625 @Translate("We are experiencing some connectivity issues. Not all features may be available to you.")
626 </div>
627 </div>
628 </div>
629 }
630
631 @* Custom Loader *@
632 <div class="custom_loader d-none">
633 <div class="spinner-border" role="status">
634 <span class="sr-only"></span>
635 </div>
636 </div>
637
638
639 </body>
640 </html>
641 @functions {
642 void SetMetaTags()
643 {
644 //Verification Tokens
645 string siteVerificationGoogle = Model.Area.Item.GetString("Google_Site_Verification") != null ? Model.Area.Item.GetString("Google_Site_Verification") : "";
646 //string siteVerificationYandex = Model.Area.Item.GetString("Yandex_Verification") != null ? Model.Area.Item.GetString("Yandex_Verification") : "";
647 //string siteVerificationMS = Model.Area.Item.GetString("Msvalidate_01") != null ? Model.Area.Item.GetString("Msvalidate_01") : "";
648 //string siteVerificationAlexa = Model.Area.Item.GetString("AlexaVerifyID") != null ? Model.Area.Item.GetString("AlexaVerifyID") : "";
649 //string siteVerificationPinterest = Model.Area.Item.GetString("P_domain_verify") != null ? Model.Area.Item.GetString("P_domain_verify") : "";
650 //string siteVerificationNorton = Model.Area.Item.GetString("Norton_safeweb_site_verification") != null ? Model.Area.Item.GetString("Norton_safeweb_site_verification") : "";
651
652 //Generic Site Values
653 string openGraphFacebookAppID = Model.Area.Item.GetString("Fb_app_id") != null ? Model.Area.Item.GetString("Fb_app_id") : "";
654 string openGraphType = Model.Area.Item.GetString("Open_Graph_Type") != null ? Model.Area.Item.GetString("Open_Graph_Type") : "";
655 string openGraphSiteName = Model.Area.Item.GetString("Open_Graph_Site_Name") != null ? Model.Area.Item.GetString("Open_Graph_Site_Name") : "";
656
657 string twitterCardSite = Model.Area.Item.GetString("Twitter_Site") != null ? Model.Area.Item.GetString("Twitter_Site") : "";
658
659 //Page specific values
660 string openGraphSiteTitle = Model.Area.Item.GetString("Open_Graph_Title") != null ? Model.Area.Item.GetString("Open_Graph_Title") : "";
661 FileViewModel openGraphImage = Model.Area.Item.GetFile("Open_Graph_Image");
662 string openGraphImageALT = Model.Area.Item.GetString("Open_Graph_Image_ALT") != null ? Model.Area.Item.GetString("Open_Graph_Image_ALT") : "";
663 string openGraphDescription = Model.Area.Item.GetString("Open_Graph_Description") != null ? Model.Area.Item.GetString("Open_Graph_Description") : "";
664
665 string twitterCardURL = Model.Area.Item.GetString("Twitter_URL") != null ? Model.Area.Item.GetString("Twitter_URL") : "";
666 string twitterCardTitle = Model.Area.Item.GetString("Twitter_Title") != null ? Model.Area.Item.GetString("Twitter_Title") : "";
667 string twitterCardDescription = Model.Area.Item.GetString("Twitter_Description") != null ? Model.Area.Item.GetString("Twitter_Description") : "";
668 FileViewModel twitterCardImage = Model.Area.Item.GetFile("Twitter_Image");
669 string twitterCardImageALT = Model.Area.Item.GetString("Twitter_Image_ALT") != null ? Model.Area.Item.GetString("Twitter_Image_ALT") : "";
670
671 if (!string.IsNullOrEmpty(siteVerificationGoogle))
672 {
673 Pageview.Meta.AddTag("google-site-verification", siteVerificationGoogle);
674 }
675
676 if (!string.IsNullOrEmpty(openGraphFacebookAppID))
677 {
678 Pageview.Meta.AddTag("fb:app_id", openGraphFacebookAppID);
679 }
680
681 if (!string.IsNullOrEmpty(openGraphType))
682 {
683 Pageview.Meta.AddTag("og:type", openGraphType);
684 }
685
686 if (!string.IsNullOrEmpty(openGraphSiteName))
687 {
688 Pageview.Meta.AddTag("og:site_name", openGraphSiteName);
689 }
690
691 if (!string.IsNullOrEmpty(Model.Title))
692 {
693 Pageview.Meta.AddTag("og:title", Model.Title);
694 }
695 else
696 {
697 Pageview.Meta.AddTag("og:title", openGraphSiteTitle);
698 }
699
700 if (!string.IsNullOrEmpty(Pageview.Page.TopImage) && openGraphImage == null)
701 {
702 Pageview.Meta.AddTag("og:image", Dynamicweb.Context.Current.Request.Url.Scheme + "://" + Dynamicweb.Context.Current.Request.Url.Host + Pageview.Page.TopImage);
703 }
704
705 if (string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString["ProductID"]))
706 {
707 if (!string.IsNullOrEmpty(Model.Description))
708 {
709 Pageview.Meta.AddTag("og:description", Model.Description);
710 }
711 else
712 {
713 Pageview.Meta.AddTag("og:description", openGraphDescription);
714 }
715 if (openGraphImage != null)
716 {
717 Pageview.Meta.AddTag("og:image", openGraphImage.Path);
718 }
719
720 if (!string.IsNullOrEmpty(openGraphImageALT))
721 {
722 Pageview.Meta.AddTag("og:image:alt", openGraphImageALT);
723 }
724 if (!string.IsNullOrEmpty(twitterCardDescription))
725 {
726 Pageview.Meta.AddTag("twitter:description", twitterCardDescription);
727 }
728
729 if (twitterCardImage != null)
730 {
731 Pageview.Meta.AddTag("twitter:image", twitterCardImage.Path);
732 }
733
734 if (!string.IsNullOrEmpty(twitterCardImageALT))
735 {
736 Pageview.Meta.AddTag("twitter:image:alt", twitterCardImageALT);
737 }
738 }
739
740 if (!string.IsNullOrEmpty(twitterCardSite))
741 {
742 Pageview.Meta.AddTag("twitter:site", twitterCardSite);
743 }
744
745 if (!string.IsNullOrEmpty(twitterCardURL))
746 {
747 Pageview.Meta.AddTag("twitter:url", twitterCardURL);
748 }
749
750 if (!string.IsNullOrEmpty(twitterCardTitle))
751 {
752 Pageview.Meta.AddTag("twitter:title", twitterCardTitle);
753 }
754 }
755 }
756
757 @{
758 bool consentIsGranted = System.Web.HttpContext.Current.Request?.Cookies["Dynamicweb.CookieOptInLevel"]?.Value == "2";
759 }
760
761 @if (consentIsGranted)
762 {
763 <script>
764 document.addEventListener("DOMContentLoaded", function() {
765 consentGranted();
766 });
767 </script>
768 }
769
770 <script>
771 function consentGranted() {
772 gtag('consent', 'update', {
773 'ad_storage': 'granted',
774 'ad_user_data': 'granted',
775 'ad_personalization': 'granted',
776 'analytics_storage': 'granted',
777 'functionality_storage': 'granted',
778 'personalization_storage': 'granted',
779 'security_storage': 'granted'
780 });
781 }
782 </script>
783
784
785 @RenderGeneralModal()
786
787 <!-- Modal -->
788
789 @helper RenderGeneralModal() {
790
791 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/";
792 int cartPageId = GetPageIdByNavigationTag("CartPage");
793 string cartPageUrl= "Default.aspx?ID=" + cartPageId;
794
795 <div class="modal fade" id="GeneralModal" tabindex="-1" aria-labelledby="GeneralModalLabel" aria-hidden="true">
796 <div class="modal-dialog modal-dialog-centered">
797 <div class="modal-content p-4">
798 <div class="modal-header border-0 py-0">
799 <div class="generalmodal__modal-title h5" id="GeneralModalLabel"></div>
800 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
801 </div>
802 <div class="modal-body">
803 <div class="grid">
804 <div class="g-col-12">
805 <div class="generalmodal__description h5 fs-6 mb-1"></div>
806 </div>
807 </div>
808 </div>
809 <div class="modal-footer d-flex flex-row border-0 justify-content-center">
810 <button type="button" class="btn btn-secondary btn-notOk d-none" data-bs-dismiss="modal"><span class="">@Translate("Anuleaza")</button>
811 <button type="button" class="btn btn-primary btn-ok" data-bs-dismiss="modal"><span class="">@Translate("Ok")</button>
812 </div>
813 </div>
814 </div>
815 </div>
816 }