Error executing template "Designs/Rapido/_parsed/NZShopPage.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 system cannot find the file specified
   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.ProviderBase.DbConnectionClosed.TryOpenConnection(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.DatabaseConnectionProvider.CreateConnection()
   at Dynamicweb.Data.DatabaseProvider.CreateConnection()
   at Dynamicweb.Data.Database.CreateConnection()
   at Dynamicweb.Data.Database.CreateDataReader(String sql, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout, Dictionary`2 sqlParams)
   at Dynamicweb.Ecommerce.Products.GroupShopRelation.get_CachedGroupShopRelations(GroupShopRelationType type)
   at Dynamicweb.Ecommerce.Products.GroupShopRelation.get_GroupShopRelationByGroupId(String theGroupId, String theShopId)
   at Dynamicweb.Ecommerce.Products.Group.get_IsTopGroup()
   at Dynamicweb.Ecommerce.Shops.Shop.GetTopLevelGroups(String languageId)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(Page page, NavigationItem parentNode)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.ProcessTree(RootNavigationItem rootNode, NavigationType navigationType)
   at Dynamicweb.Frontend.XmlNavigation.MakeXml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, Int32 selectedAreaId)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, String name, String xsltPath, Int32 selectedAreaId, Boolean sitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)
   at Dynamicweb.Rendering.TemplateBase`1.RenderNavigation(Object settings)
   at CompiledRazorTemplates.Dynamic.RazorEngine_969cdcdf1b424ef1bff7029e4d820af4.<RenderHeaderNavigation>b__2_0(TextWriter __razor_helper_writer) in E:\Solutions\S_DW_Lauridsen\lauridsen-live\Files\Templates\Designs\Rapido\_parsed\NZShopPage.parsed.cshtml:line 1176
   at RazorEngine.Templating.TemplateWriter.WriteTo(TextWriter writer)
   at RazorEngine.Templating.TemplateBase.Write(TemplateWriter helper)
   at CompiledRazorTemplates.Dynamic.RazorEngine_969cdcdf1b424ef1bff7029e4d820af4.Execute() in E:\Solutions\S_DW_Lauridsen\lauridsen-live\Files\Templates\Designs\Rapido\_parsed\NZShopPage.parsed.cshtml:line 666
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.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 RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   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:2,State:0,Class:20

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 @using Dynamicweb.Frontend.Devices 3 @using Dynamicweb.Extensibility 4 @using System.Web.UI 5 @using Dynamicweb.Content 6 @using Dynamicweb.Security 7 @using System 8 @using System.Linq 9 @using System.Web 10 @using System.IO 11 @using Dynamicweb.Security.UserManagement; 12 @{ 13 //General settings 14 string favicon = Model.Area.Item.GetFile("LogoFavicon") != null ? Model.Area.Item.GetFile("LogoFavicon").Path : "/Files/Images/favicon.ico"; 15 string logo = Model.Area.Item.GetFile("LogoImage") != null ? Model.Area.Item.GetFile("LogoImage").Path : "/Files/Images/logo-dynamicweb.png"; 16 string logoAltText = Model.Area.Item.GetString("LogoAltText"); 17 18 //Tracking 19 string gatagTrackingId = Model.Area.Item.GetItem("CustomSettings").GetField("GATrackingID").GetString(); 20 21 if (Path.GetExtension(logo).ToLower() != ".svg") 22 { 23 logo = "/Admin/Public/GetImage.ashx?height=40&crop=5&Compression=75&image=" + @logo; 24 } 25 26 string searchPlaceholder = Translate("Search products", "Search products"); 27 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") != null ? HttpContext.Current.Request.QueryString.Get("Search") : ""; 28 string wireframeMode = Model.Area.Item.GetBoolean("WireframeMode").ToString(); 29 30 //Font settings 31 string navigationFont = Model.Area.Item.GetItem("NavigationFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 32 string mobileNavigationFont = Model.Area.Item.GetItem("MobileNavigationFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 33 string headerFont = Model.Area.Item.GetItem("ContentLayoutHeaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 34 string subHeaderFont = Model.Area.Item.GetItem("ContentLayoutSubheaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 35 string contentFont = Model.Area.Item.GetItem("ContentLayoutBodyText").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 36 string newStickersFont = Model.Area.Item.GetItem("NewStickersFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 37 string customStickersFont = Model.Area.Item.GetItem("CustomStickersFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 38 string toolsMenuFont = Model.Area.Item.GetItem("ToolsMenuFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 39 40 41 //Page IDs for use in the template 42 int pageId = Model.TopPage.ID; 43 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 44 bool firstPageIdBool = Model.Area.FirstActivePage.ID.Equals("GroupdID"); 45 string test = HttpContext.Current.Request.Url.ToString(); 46 47 int cartPageId = GetPageIdByNavigationTag("CartPage"); 48 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 49 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 50 int productsPageId = GetPageIdByNavigationTag("ProductsPage"); 51 int productsSearchFeedId = productsPageId; 52 int productGroupsPageId = GetPageIdByNavigationTag("ProductGroupsFeed"); 53 int impersonationPageId = GetPageIdByNavigationTag("Impersonation"); 54 55 bool stickyMenu = Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet" ? true : Model.Area.Item.GetBoolean("NavigationStickyMenu"); 56 string stickyTop = stickyMenu ? "top-container--sticky" : ""; 57 string pagePos = stickyMenu ? "js-page-pos" : ""; 58 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue; 59 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 60 string toolbarText = Model.Area.Item.GetString("ToolbarText"); 61 string toolbarIcon = Model.Area.Item.GetFile("ToolbarIcon") != null ? Model.Area.Item.GetFile("ToolbarIcon").Path : ""; 62 string toolbarTextSecond = Model.Area.Item.GetString("ToolbarTextSecond"); 63 string toolbarIconSecond = Model.Area.Item.GetFile("ToolbarIconSecond") != null ? Model.Area.Item.GetFile("ToolbarIconSecond").Path : ""; 64 string toolbarTextThird = Model.Area.Item.GetString("ToolbarTextThird"); 65 string toolbarIconThird = Model.Area.Item.GetFile("ToolbarIconThird") != null ? Model.Area.Item.GetFile("ToolbarIconThird").Path : ""; 66 string toolbarTextFourth = Model.Area.Item.GetString("ToolbarTextFourth"); 67 string toolbarIconFourth = Model.Area.Item.GetFile("ToolbarIconFourth") != null ? Model.Area.Item.GetFile("ToolBarIconFourth").Path : ""; 68 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 69 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 70 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 71 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 72 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 73 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 74 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 75 bool onlyPreviewForAnonymousUsers = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous"); 76 bool onlyPreview = onlyPreviewForAnonymousUsers ? Model.CurrentUser.ID == 0 : false; 77 78 string autoCssLink = "/Files/Templates/Designs/Rapido/css/rapido/rapido_" + Model.Area.ID.ToString() + ".min.css?ticks=" + Model.Area.UpdatedDate.Ticks; 79 80 string userInitials = Model.CurrentUser.Name; 81 82 string siteURL = Pageview.SearchFriendlyUrl.ToString(); 83 string businessPhotoPath = Model.Area.Item.GetFile("BusinessPhoto") != null ? Model.Area.Item.GetFile("BusinessPhoto").Path : ""; 84 string businessName = Model.Area.Item.GetString("BusinessName"); 85 var address = Model.Area.Item.GetItem("Address"); 86 string streetAddress = ""; 87 string addressLocality = ""; 88 string addressRegion = ""; 89 string postalCode = ""; 90 string addressCountry = ""; 91 92 if (address != null) 93 { 94 streetAddress = address.GetString("StreetAddress"); 95 addressLocality = address.GetString("City"); 96 addressRegion = address.GetString("Region"); 97 postalCode = address.GetString("PostalCode"); 98 addressCountry = address.GetString("Country"); 99 } 100 string contactEmail = Model.Area.Item.GetString("ContactEmail"); 101 string contactNumber = Model.Area.Item.GetString("ContactNumber"); 102 103 string testurls = Dynamicweb.Context.Current.Request.Url.ToString(); 104 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme"); 105 var noFollowBool = Pageview.Page.Nofollow; 106 var noIndexBool = Pageview.Page.Noindex; 107 string assetsVersion = "20"; 108 } 109 <!DOCTYPE html> 110 <html lang="@Pageview.Area.CultureInfo"> 111 <head> 112 <meta charset="utf-8" /> 113 114 @if (isLrtSite) 115 { 116 <meta name="facebook-domain-verification" content="jkwhlhfmivuttu6z964lvpuc65mfjk" /> 117 } 118 else 119 { 120 <meta name="facebook-domain-verification" content="f4udlfxqt2oxgqksxhwxnjo93plfi2" /> 121 } 122 123 <title>@Model.Title</title> 124 <meta name="description" content="@Model.Description" /> 125 <meta name="keywords" content="@Model.Keywords" /> 126 127 @if (testurls.Contains("groupid") || testurls.Contains("productid")) 128 { 129 @RenderSnippet("canonical") 130 } 131 132 else 133 { 134 <link rel="canonical" href="@siteURL"> 135 136 } 137 138 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"> 139 @if (Dynamicweb.Context.Current.Request.Url.Host.EndsWith("nozebrahosting.dk")) 140 { 141 <meta name="robots" content="noindex, nofollow"> 142 } 143 144 @if (noIndexBool && noFollowBool) 145 { 146 <meta name="robots" content="noindex, nofollow"> 147 } 148 else if (noFollowBool) 149 { 150 <meta name="robots" content="nofollow"> 151 152 } 153 else if (noIndexBool) 154 { 155 <meta name="robots" content="noindex"> 156 } 157 <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script> 158 <!-- Favicon --> 159 <link href="@favicon" rel="icon" type="image/png"> 160 <!-- Font awesome --> 161 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/rapido/font-awesome.min.css" type="text/css"> 162 <!-- Base (Default, wireframe) styles --> 163 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/base/base.min.css" type="text/css"> 164 <!-- Rapido Css from Website Settings --> 165 <link id="rapidoCss" rel="stylesheet" href="@autoCssLink" type="text/css"> 166 <!-- Ignite Css (Custom site specific styles) --> 167 @if (isLrtSite) 168 { 169 <link id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/lrt.min.css?v=@assetsVersion" rel="stylesheet"> 170 } 171 172 else 173 { 174 <link id="igniteCss" type="text/css" href="/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css?v=@assetsVersion" rel="stylesheet"> 175 } 176 177 <!-- Google fonts --> 178 @{ 179 var fonts = new string[8] { navigationFont, mobileNavigationFont, headerFont, subHeaderFont, contentFont, newStickersFont, customStickersFont, toolsMenuFont }; 180 var family = string.Join("%7C", fonts.Distinct().Select(x => string.Format("{0}:100,200,300,400,500,600,700,800,900", x))); 181 182 } 183 <link href="https://fonts.googleapis.com/css?family=@family" rel="stylesheet"> 184 @if (!string.IsNullOrEmpty(businessPhotoPath) && !string.IsNullOrEmpty(businessName) && !string.IsNullOrEmpty(streetAddress) && !string.IsNullOrEmpty(addressLocality) && !string.IsNullOrEmpty(addressRegion) && !string.IsNullOrEmpty(postalCode) && !string.IsNullOrEmpty(addressCountry)) 185 { 186 var baseURl = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host; 187 var logoUrl = baseURl + logo; 188 189 <script type="application/ld+json"> 190 191 { 192 193 "@@context":"https://schema.org/", 194 "@@type": ["Organization", "LocalBusiness"], 195 "url": "@baseURl", 196 "mainEntityOfPage": { 197 "@@type": "WebPage", 198 "id": "@baseURl" 199 }, 200 "name": "@businessName", 201 "legalName": "@businessName", 202 "logo": "@logoUrl", 203 "image": [ 204 "@baseURl/Admin/Public/GetImage.ashx?width=2509&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=/Files/Images/Lauridsen/img/4026092007839.w293.h293.fill.jpg", 205 "@baseURl/Admin/Public/GetImage.ashx?width=2509&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=/Files/Images/Lauridsen/img/about-bg-img.png", 206 "@baseURl/Admin/Public/GetImage.ashx?width=2500&height=1100&crop=0&Compression=85&DoNotUpscale=true&image=/Files/Images/Lauridsen/img/hero-img.png" 207 ], 208 "openingHours": ["Mo, Tu, We, Th 07:30-16:00", "Fr 07:30-14:30"], 209 210 @if (!string.IsNullOrEmpty(contactNumber)) 211 { 212 <text>"telephone": "@Model.Area.Item.GetString("ContactNumber")",</text> 213 } 214 215 @if (!string.IsNullOrEmpty(contactEmail)) 216 { 217 <text>"email": "@Model.Area.Item.GetString("ContactEmail")",</text> 218 } 219 220 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0) 221 { 222 223 <text> 224 "sameAs": [ 225 </text> 226 227 foreach (var socialitem in Model.Area.Item.GetItems("FooterSocialLinks")) 228 { 229 230 string socialLink = socialitem.GetString("Link"); 231 <text>"@socialLink"@(socialitem != Model.Area.Item.GetItems("FooterSocialLinks").Last() ? "," : "")</text> 232 } 233 234 <text>],</text> 235 236 } 237 238 "address": { 239 240 "@@type": "PostalAddress", 241 "streetAddress": "@streetAddress", 242 "addressLocality": "@addressLocality", 243 "addressRegion": "@addressRegion", 244 "postalCode": "@postalCode", 245 "addressCountry": "@addressCountry" 246 247 }, 248 249 "contactPoint": [ 250 251 { 252 "@@type": "ContactPoint", 253 254 @if (!string.IsNullOrEmpty(contactNumber)) 255 { 256 <text>"telephone": "@Model.Area.Item.GetString("ContactNumber")",</text> 257 } 258 259 @if (!string.IsNullOrEmpty(contactEmail)) 260 { 261 <text>"email": "@Model.Area.Item.GetString("ContactEmail")",</text> 262 } 263 264 "contactType": "customer service", 265 "areaServed": "DK", 266 "hoursAvailable": [ 267 { 268 269 "@@type": "OpeningHoursSpecification", 270 "opens": "07:30:00", 271 "closes": "16:00:00", 272 "dayOfWeek": [ 273 "http://schema.org/Monday", 274 "http://schema.org/Tuesday", 275 "http://schema.org/Wednesday", 276 "http://schema.org/Thursday" 277 ] 278 }, 279 { 280 "@@type": "OpeningHoursSpecification", 281 "opens": "07:30:00", 282 "closes": "14:30:00", 283 "dayOfWeek": "http://schema.org/Friday" 284 } 285 ] 286 } 287 ] 288 } 289 290 </script> 291 292 } 293 294 @*START GOOGLE TAG MANAGER*@ 295 296 <script> 297 (function (w, d, s, l, i) { 298 w[l] = w[l] || []; w[l].push({ 299 'gtm.start': 300 new Date().getTime(), event: 'gtm.js' 301 }); var f = d.getElementsByTagName(s)[0], 302 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 303 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 304 })(window, document, 'script', 'dataLayer', '@gatagTrackingId');</script> 305 306 @*END GOOGLE TAG MANAGER*@ 307 <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="48ec1431-21ad-425d-bd0a-bd07fe0e0b96" type="text/javascript"></script> 308 309 310 </head> 311 <body class="@isLrtSite"> 312 <!-- Google Tag Manager (noscript) --> 313 <noscript> 314 <iframe src="https://www.googletagmanager.com/ns.html?id=@gatagTrackingId" 315 height="0" width="0" style="display:none;visibility:hidden"></iframe> 316 </noscript> 317 <!-- End Google Tag Manager (noscript) --> 318 @* 319 <p>@testurls @pageId @test</p> 320 *@ 321 @MobileNavigation(userInitials) 322 @LoginModal() 323 @{ 324 string getCurrentUserCurrency = ""; 325 326 string parameter = HttpContext.Current.Request.QueryString.Get("LoggedIn"); 327 if (User.IsExtranetUserLoggedIn()) 328 { 329 var user = User.GetCurrentUser(); 330 if (parameter == "true") 331 { 332 if (user != null) 333 { 334 foreach (var value in user.CustomFieldValues) 335 { 336 if (value != null && value.CustomField.SystemName.Equals("AccessUserCurrencyCharacter")) 337 { 338 getCurrentUserCurrency = value.Value.ToString(); 339 } 340 } 341 } 342 343 foreach (var item in Dynamicweb.Ecommerce.Common.Application.Currencies) 344 { 345 if (item.Code == getCurrentUserCurrency) 346 { 347 Dynamicweb.Ecommerce.Common.Context.Currency = item; 348 } 349 } 350 } 351 } 352 } 353 <main class="site dw-mod"> 354 <header class="top-container @stickyTop dw-mod js-header" id="Top"> 355 @if (renderPagesInToolBar && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 356 { 357 <div class="tools-navigation dw-mod d-none d-lg-block"> 358 <div class="center-container header-nav grid top-container__center-container dw-mod"> 359 <div class="grid grid--align-center grid--justify-space-between u-margin-top u-margin-bottom"> 360 <div class="grid__cell--align-middle-left"><img src="@toolbarIcon" class="grid__cell-img" alt="@toolbarText"><span class="u-margin-left">@toolbarText</span></div> 361 <div class="grid__cell--align-middle-left"><img src="@toolbarIconSecond" class="grid__cell-img" alt="@toolbarTextSecond"><span class="u-margin-left">@toolbarTextSecond</span></div> 362 <div class="grid__cell--align-middle-left"><img src="@toolbarIconThird" class="grid__cell-img" alt="@toolbarTextThird"><span class="u-margin-left">@toolbarTextThird</span></div> 363 <div class="grid__cell--align-middle-left"><img src="@toolbarIconFourth" class="grid__cell-img" alt="@toolbarTextFourth"><span class="u-margin-left">@toolbarTextFourth</span></div> 364 </div> 365 </div> 366 </div> 367 } 368 @if (topLayout == "normal") 369 { 370 <!-- Header --> 371 <div class="header header-top dw-mod"> 372 <div class="center-container top-container__center-container dw-mod"> 373 <div class="grid"> 374 @* Logo *@ 375 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 376 { 377 <div class="logo d-inline-block dw-mod"> 378 <a href="/Default.aspx?ID=@firstPageId"> 379 <img class="d-inline-block" src="@logo" alt="@logoAltText" /> 380 </a> 381 </div> 382 } 383 384 @if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 385 { 386 <div class="grid__col-12"> 387 <div class="grid__cell"> 388 <div class="logo u-max-w220px u-middle u-margin-bottom dw-mod"> 389 <a href="/Default.aspx?ID=@firstPageId"> 390 <img class="grid__cell-img" src="@logo" alt="@logoAltText" /> 391 </a> 392 </div> 393 </div> 394 </div> 395 } 396 397 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 398 { 399 @* Search *@ 400 <div class="grid__col-6 grid__col--bleed-y grid--align-self-center"> 401 <div class="typeahead u-margin u-color-inherit js-typeahead" data-page-size="10" id="TopProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId"> 402 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button> 403 <ul class="dropdown dropdown--absolute-position js-handlebars-root js-typeahead-groups-content u-min-w220px dw-mod" id="TopProductSearchGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@productGroupsPageId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul> 404 <input type="text" class="typeahead-search-field u-no-margin js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue"> 405 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content u-full-width dw-mod" id="TopProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false" data-preloader="minimal"></ul> 406 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="fa fa-search"></i></button> 407 </div> 408 </div> 409 410 <div class="grid__cell grid__cell--align-middle-right"> 411 <ul class="menu dw-mod u-pull--right"> 412 @RenderSignIn("outsideNavigation", userInitials) 413 @RenderLanguageSelector("outsideNavigation") 414 @RenderFavorites("outsideNavigation") 415 @if (!onlyPreview) 416 { 417 @RenderMiniCart("outsideNavigation") 418 } 419 </ul> 420 </div> 421 } 422 423 @* Mobile search *@ 424 @if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 425 { 426 <div class="grid__col-12 grid__col--bleed-y grid--align-self-center"> 427 <div class="grid__cell"> 428 <div class="js-typeahead" data-page-size="10" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId"> 429 <input type="text" class="u-full-width js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue"> 430 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul> 431 </div> 432 </div> 433 </div> 434 } 435 </div> 436 </div> 437 </div> 438 439 <!-- Main navigation --> 440 <nav class="main-navigation dw-mod"> 441 <div class="center-container top-container__center-container dw-mod"> 442 <div class="grid"> 443 <div class="grid__col-12 grid--align-self-center grid__col--bleed"> 444 <div class="grid__cell"> 445 @MobileNavigationTrigger() 446 @if ((Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") && !onlyPreview) 447 { 448 <ul class="menu dw-mod u-pull--right"> 449 @RenderMiniCart() 450 </ul> 451 } 452 </div> 453 </div> 454 </div> 455 </div> 456 </nav> 457 } 458 @if (topLayout == "splitted") 459 { 460 <!-- Header --> 461 <div class="header header-top dw-mod"> 462 <div class="center-container top-container__center-container dw-mod"> 463 <div class="grid"> 464 @* Logo *@ 465 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 466 { 467 <div class="grid__col-md-3 grid__col-sm-3 grid--align-self-center grid__col--bleed-y"> 468 <div class="logo dw-mod"> 469 <a href="/Default.aspx?ID=@firstPageId"> 470 <img class="grid__cell-img" src="@logo" alt="@logoAltText" /> 471 </a> 472 </div> 473 </div> 474 } 475 else 476 { 477 <div class="grid__col-xs-6"> 478 <div class="grid__cell"> 479 <div class="logo u-max-w220px dw-mod"> 480 <a href="/Default.aspx?ID=@firstPageId"> 481 <img class="grid__cell-img" src="@logo" alt="@logoAltText" /> 482 </a> 483 </div> 484 </div> 485 </div> 486 } 487 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 488 { 489 @* Search *@ 490 <div class="grid__cell grid__cell--align-middle-right"> 491 <div class="grid__col-sm-8 grid__col--bleed"> 492 <div class="typeahead u-margin u-color-inherit js-typeahead" data-page-size="3" id="TopProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId"> 493 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button> 494 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="TopProductSearchGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@productGroupsPageId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul> 495 <input type="text" class="typeahead-search-field u-no-margin js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue"> 496 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content u-full-width dw-mod" id="TopProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false" data-preloader="minimal"></ul> 497 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="fa fa-search"></i></button> 498 </div> 499 </div> 500 </div> 501 } 502 else 503 { 504 @* Mobile search *@ 505 <div class="grid__col-xs-6"> 506 <div class="grid__cell"> 507 <div class="js-typeahead" data-page-size="10" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId"> 508 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin" placeholder="@searchPlaceholder" value="@searchValue"> 509 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul> 510 </div> 511 </div> 512 </div> 513 } 514 </div> 515 </div> 516 </div> 517 518 <!-- Main navigation --> 519 <nav class="main-navigation dw-mod"> 520 <div class="center-container top-container__center-container dw-mod"> 521 <div class="grid"> 522 <div class="u-pull--left"> 523 @MobileNavigationTrigger() 524 </div> 525 <div class="grid__cell grid__cell--align-middle-right"> 526 <ul class="menu dw-mod u-pull--right"> 527 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 528 { 529 @RenderSignIn("inNavigation", userInitials) 530 @RenderLanguageSelector() 531 @RenderFavorites() 532 } 533 @if (!onlyPreview) 534 { 535 @RenderMiniCart() 536 } 537 </ul> 538 </div> 539 </div> 540 </div> 541 </nav> 542 } 543 544 @if (topLayout == "condensed") 545 { 546 <!-- Main navigation --> 547 <nav class="main-navigation dw-mod"> 548 <div class="center-container top-container__center-container dw-mod"> 549 <div class="grid"> 550 @* Navigation *@ 551 @MobileNavigationTrigger() 552 <div class="logo d-inline-block dw-mod"> 553 <a href="/Default.aspx?ID=@firstPageId"> 554 <img class="grid__cell-img d-inline-block" src="@logo" alt="@logoAltText" /> 555 </a> 556 </div> 557 <div class="grid__cell grid__cell--align-middle-right"> 558 <ul class="menu dw-mod u-pull--right"> 559 @RenderSignIn("inNavigation", userInitials) 560 @RenderLanguageSelector() 561 @RenderFavorites() 562 @if (!onlyPreview) 563 { 564 @RenderMiniCart() 565 } 566 </ul> 567 </div> 568 </div> 569 </div> 570 </nav> 571 572 <!-- Searchbar --> 573 <div class="u-box-shadow u-color-light-gray--bg u-inline-block u-full-width"> 574 <div class="center-container top-container__center-container dw-mod"> 575 <div class="typeahead typeahead--centered u-color-inherit js-typeahead dw-mod" data-page-size="10" id="ProductSearchBar" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId"> 576 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button> 577 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="ProductSearchBarGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@productGroupsPageId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul> 578 <div class="typeahead-search-field"> 579 <input type="text" class="u-no-margin js-typeahead-search-field font-weight-normal" placeholder="@searchPlaceholder" value="@searchValue"> 580 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul> 581 </div> 582 <button type="button" class="btn btn--condensed btn--primary u-no-margin dw-mod js-typeahead-enter-btn"><i class="fa fa-search"></i></button> 583 </div> 584 </div> 585 </div> 586 } 587 588 @if (topLayout == "minimal") 589 { 590 <!-- Main navigation --> 591 <nav class="main-navigation dw-mod"> 592 <div class="center-container header-nav top-container__center-container dw-mod"> 593 <div class="grid"> 594 @* Navigation *@ 595 @MobileNavigationTrigger() 596 <div class="logo d-inline-block dw-mod"> 597 <a href="/Default.aspx?ID=@firstPageId"> 598 <img class="header-logo d-inline-block" src="@logo" alt="@logoAltText" /> 599 </a> 600 </div> 601 602 <div class="grid__cell grid__cell--align-middle-right"> 603 <ul class="menu dw-mod u-pull--right"> 604 <li class="menu__item menu__item--horizontal menu__item--top-level u-hidden-xxs dw-mod"> 605 <div class="menu__link d-none d-md-block"> 606 <a href="@navigationIconFifthLink"> 607 <img src="@navigationIconFifth" class="d-inline-block align-text-top" alt=""> 608 </a> 609 </div> 610 </li> 611 <!-- HEADSET ICON --> 612 <li class="menu__item menu__item--horizontal menu__item--top-level u-hidden-xxs dw-mod"> 613 <div class="menu__link d-none d-md-block"> 614 <a href="tel:@contactNumber"> 615 <img src="@navigationIcon" class="d-inline-block align-text-top" alt="@navigationText"> 616 <span class="small d-inline-block text-black font-weight-semi-bold align-middle">@navigationText</span> 617 </a> 618 </div> 619 </li> 620 <!-- END HEADSET ICON --> 621 @* Search *@ 622 <li class="menu__item menu__item--horizontal menu__item--top-level search-icon-navigation menu__item--icon u-hidden-xxs is-dropdown is-dropdown--no-icon dw-mod js-header-nav-item"> 623 <a class="openbtn js-toggle-overlay menu__link is-dropdown is-dropdown--no-icon dw-mod"> 624 <div class="js-openBtn" style="display:block;"> 625 <img src="/Files/Images/Lauridsen/icons/navigation-icons/icon-search.svg" class="d-inline-block align-text-top" alt=""> 626 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Search")</span> 627 </div> 628 <div class="js-closeBtn" style="display:none;"> 629 <div class="closebtn small d-inline-block text-black text-uppercase font-weight-semi-bold" id="closebtn" title="Close Overlay"><span class="modal__close"></span> @Translate("Close")</div> 630 </div> 631 </a> 632 <div id="myOverlay" class="overlay js-overlay"> 633 <div class="overlay-content"> 634 <div class="menu menu--dropdown-right u-no-padding u-w380px grid__cell dw-mod"> 635 <div class="typeahead u-margin u-color-inherit js-typeahead" data-page-size="10" id="ProductSearchBar" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId" data-groups-page-id="@productGroupsPageId"> 636 <input type="text" class="fullscreen-input-field typeahead-search-field u-no-margin js-typeahead-search-field dw-mod" placeholder="@searchPlaceholder" value="@searchValue"> 637 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content u-full-width dw-mod" id="ProductSearchBarContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false" data-preloader="minimal"></ul> 638 639 <span class="icon-nz icon-nz-arrow-long-right input-arrow-icon js-typeahead-enter-btn"></span> 640 </div> 641 </div> 642 643 </div> 644 </div> 645 </li> 646 647 @if (!onlyPreview) 648 { 649 @RenderMiniCart() 650 } 651 @RenderSignIn("inNavigation", userInitials) 652 @RenderLanguageSelector() 653 </ul> 654 </div> 655 </div> 656 </div> 657 </nav> 658 } 659 660 @if (renderPagesInToolBar && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 661 { 662 <div class="second-tools-menu dw-mod u-box-shadow"> 663 <div class="grid bottom-container__center-container dw-mod u-margin-left"> 664 <div class="grid grid--align-center grid--justify-start header-nav center-container"> 665 <div> 666 @RenderHeaderNavigation() 667 </div> 668 </div> 669 </div> 670 </div> 671 } 672 673 @* Impersonation bar *@ 674 @if (Model.CurrentUser.ID > 0 && Model.SecondaryUsers.Count > 0) 675 { 676 <div class="u-color-warning--bg"> 677 <div class="center-container top-container__center-container dw-mod"> 678 @*Impersonation*@ 679 <div class="grid"> 680 <div class="grid--align-self-center grid__col-x"> 681 @if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0) 682 { 683 string stopImpersonateTranslation = Translate("Stop impersonation"); 684 string username = ""; 685 if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.FirstName) && !string.IsNullOrEmpty(Model.CurrentSecondaryUser.LastName)) 686 { 687 username = Model.CurrentSecondaryUser.FirstName + " " + Model.CurrentSecondaryUser.LastName; 688 } 689 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Name)) 690 { 691 username = Model.CurrentSecondaryUser.Name; 692 } 693 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Email)) 694 { 695 username = Model.CurrentSecondaryUser.Email; 696 } 697 else 698 { 699 username = Model.CurrentSecondaryUser.UserName; 700 } 701 <div class="grid-cell"> 702 <div class="u-pull--left u-bold u-margin-top"> 703 <i class="fa fa-user-secret"></i> 704 @username<text>&nbsp;</text>@Translate("is impersonated by")<text>&nbsp;</text>@Pageview.User.UserName 705 </div> 706 <form method="post" class="u-pull--right u-no-margin"> 707 <input type="submit" class="btn btn--secondary dw-mod u-no-margin" name="DwExtranetRemoveSecondaryUser" value="@stopImpersonateTranslation"> 708 </form> 709 </div> 710 } 711 712 else 713 { 714 string viewListTranslation = Translate("View the list of users you can impersonate"); 715 <div class="grid-cell u-bold"> 716 <i class="fa fa-user-secret"></i> 717 <a href="/Default.aspx?ID=@impersonationPageId" title="@viewListTranslation" class="u-color-font-black">@viewListTranslation</a> 718 </div> 719 } 720 </div> 721 </div> 722 </div> 723 </div> 724 } 725 </header> 726 <!-- Floating mini cart --> 727 @if (!onlyPreview && !stickyMenu && pageId == productsPageId && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 728 { 729 <div class="floating-mini-cart u-hidden dw-mod" id="FloatingMiniCart"> 730 <div class="mini-cart m-0 dw-mod"> 731 <a href="/Default.aspx?ID=@cartPageId&Purge=True" class="menu-tools__link menu__link--condensed dw-mod js-mini-cart-button" onmouseenter="Cart.UpdateMiniCart(event, 'miniCart', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart&rnd='+ Date.now() +'')"> 732 <img src="@navigationIconThird" class="d-inline-block align-text-top" alt=""> 733 <div class="mini-cart__counter mini-cart__counter--lg dw-mod"> 734 <div class="js-handlebars-root js-mini-cart-counter" id="FloatingCartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-preloader="false" data-init-onload="false"> 735 <div class="js-mini-cart-counter-content">@Model.Cart.TotalProductsCount</div> 736 </div> 737 </div> 738 </a> 739 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="SecondaryMiniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="true"></div> 740 </div> 741 </div> 742 } 743 <!-- Render the content --> 744 <div id="Page" class="page @pagePos"> 745 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Frontend.PageViewModel> 746 @using System.Linq 747 748 749 750 @{ 751 string pageUrl = GetGlobalValue("Global:Pageview.Url.Raw"); 752 string searchQuery = HttpContext.Current.Request.QueryString.Get("Search"); 753 bool isProduct = Dynamicweb.Context.Current.Request.Url.ToString().ToLower().Contains("productid"); 754 bool hasGroupSpots = Dynamicweb.Context.Current.Request.RawUrl.Split('/').Count() <= 5 && string.IsNullOrEmpty(searchQuery); 755 bool fourthLayer = Dynamicweb.Context.Current.Request.RawUrl.Split('/').Count() == 4; 756 bool thirdLayer = Dynamicweb.Context.Current.Request.RawUrl.Split('/').Count() == 3; 757 758 var group = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(HttpContext.Current.Request.QueryString.Get("GroupID")); 759 string feedFullUrl = pageUrl + "&feed=true"; 760 int i = 0; 761 } 762 @if (Model.PropertyItem.GetList("ShowBreadcrumb").SelectedValue == "True") 763 { 764 <div class="center-container"> 765 <div class="grid__col-12"> 766 <ul class="breadcrumb"> 767 <li class="breadcrumb__item dw-mod"> 768 <a href="/">@Model.Area.FirstPage.Name</a> 769 </li> 770 @RenderNavigation(new 771 { 772 id = "breadcrumb", 773 template = "Breadcrumb.xslt" 774 }) 775 </ul> 776 </div> 777 </div> 778 } 779 780 <div class="shop-page"> 781 782 @if (!isProduct && group != null) 783 { 784 <div class="center-container"> 785 <div class="grid"> 786 <section class="grid__col-12 grid__col-sm-6 grid__col-md-8 grid__col-lg-8"> 787 <h1 class="display-3 font-weight-bold mb-2">@group.Name</h1> 788 <div class="pr-lg-12">@group.Description</div> 789 </section> 790 <div class="grid__col-12 grid__col-sm-6 grid__col-md-4 grid__col-lg-4 grid__col--bleed page-shop__info-box"> 791 @Model.Placeholder("rightcolumn", "right column", "default:true;sort:1") 792 </div> 793 </div> 794 </div> 795 } 796 797 <div class="center-container"> 798 <div class="grid"> 799 @if (hasGroupSpots && !isProduct) 800 { 801 @RenderNavigation(new 802 { 803 id = "shopnav", 804 startLevel = 1, 805 endlevel = 4, 806 expandmode = "Pathonly", 807 template = "EcomGroupSpots.xslt" 808 }) 809 } 810 </div> 811 </div> 812 813 814 <section class="@(!hasGroupSpots && !isProduct || fourthLayer && !isProduct ? "bg-gray" : "bg-white")"> 815 <div class="center-container dw-mod"> 816 <div class="grid"> 817 @if (Model.PropertyItem.GetList("LeftMenu").SelectedValue == "True") 818 { 819 var navigationMarkup = RenderNavigation(new 820 { 821 id = "leftnav", 822 cssclass = "menu dwnavigation", 823 startLevel = 2, 824 endlevel = 5, 825 template = "LeftNavigation.xslt" 826 }); 827 if (!string.IsNullOrEmpty(navigationMarkup)) 828 { 829 <nav class="grid__col-md-3 grid__col-sm-12 grid__col-xs-12"> 830 <div class="grid"> 831 <div class="grid__col-12"> 832 <div class="grid__cell">@navigationMarkup</div> 833 </div> 834 </div> 835 </nav> 836 } 837 } 838 839 @if (!isProduct && group != null && hasGroupSpots && thirdLayer) 840 { 841 <section class="bg-gray bg-gray-overflow py-10 mt-lg-10 center-container"> 842 <div class="grid"> 843 <div class="grid__col-12 grid__col-lg-8"> 844 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureHeadline")).Value.ToString())) 845 { 846 <h2 class="h4 mb-6">@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureHeadline")).Value</h2> 847 } 848 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureText")).Value.ToString())) 849 { 850 <div>@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureText")).Value</div> 851 } 852 </div> 853 <div class="grid__col-12 grid__col-lg-4"> 854 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureColumnHeadline")).Value.ToString())) 855 { 856 <h2 class="h4 mb-6">@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureColumnHeadline")).Value</h2> 857 } 858 <div class="row no-gutters"> 859 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOne")).Value.ToString())) 860 { 861 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString() : "#"; 862 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOneLink")).Value.ToString().Split('/').Last() : ""; 863 <div class="grid__col-6"> 864 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank"> 865 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureOne")).Value" alt="@linkName"> 866 <u class="small text-primary d-block">@linkName</u> 867 </a> 868 </div> 869 } 870 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwo")).Value.ToString())) 871 { 872 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString() : "#"; 873 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwoLink")).Value.ToString().Split('/').Last() : ""; 874 875 <div class="grid__col-6"> 876 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank"> 877 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureTwo")).Value" alt="@linkName"> 878 <u class="small text-primary d-block">@linkName</u> 879 </a> 880 </div> 881 } 882 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThree")).Value.ToString())) 883 { 884 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString() : "#"; 885 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThreeLink")).Value.ToString().Split('/').Last() : ""; 886 887 <div class="grid__col-6"> 888 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank"> 889 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureThree")).Value" alt="@linkName"> 890 <u class="small text-primary d-block">@linkName</u> 891 </a> 892 </div> 893 } 894 @if (!string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFour")).Value.ToString())) 895 { 896 string link = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString() : "#"; 897 string linkName = !string.IsNullOrEmpty(group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString()) ? group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFourLink")).Value.ToString().Split('/').Last() : ""; 898 899 <div class="grid__col-6"> 900 <a href="@link" class="p-0 d-inline-block mb-5" target="_blank"> 901 <img class="img-fluid d-inline-block b-lazy" src="/Files/Images/placeholder.gif" data-src="/Admin/Public/GetImage.ashx?width=96&Compression=80&image=/Files/Images/@group.ProductGroupFieldValues.Single(x => x.ProductGroupField.SystemName.Equals("brochureFour")).Value" alt="@linkName"> 902 <u class="small text-primary d-block">@linkName</u> 903 </a> 904 </div> 905 } 906 </div> 907 </div> 908 </div> 909 </section> 910 911 } 912 913 @Model.Placeholder("dwcontent", "content", "default:true;sort:1") 914 </div> 915 </div> 916 </section> 917 </div> 918 919 920 921 </div> 922 </main> 923 @RenderFooter() 924 925 926 <!-- Content rendering helpers --> 927 @helper MobileNavigation(string userInitials) 928 { 929 int pageId = Model.TopPage.ID; 930 string mobileNavigationLevels = Model.Area.Item.GetBoolean("MobileNavigationLevels") ? Model.Area.Item.GetString("MobileNavigationLevels") : "3"; 931 932 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink"); 933 934 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 935 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 936 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 937 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 938 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 939 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 940 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 941 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 942 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 943 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 944 string navigationIconUserWhite = Model.Area.Item.GetFile("NavigationIconUserWhite") != null ? Model.Area.Item.GetFile("NavigationIconUserWhite").Path : ""; 945 string contactNumber = Model.Area.Item.GetString("ContactNumber"); 946 int productsPageId = GetPageIdByNavigationTag("ProductsPage"); 947 int productsSearchFeedId = productsPageId; 948 string searchPlaceholder = Translate("Search"); 949 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") != null ? HttpContext.Current.Request.QueryString.Get("Search") : ""; 950 string searchQuery = HttpContext.Current.Request.QueryString.Get("Search"); 951 string myDashboardPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("CustomerDashboard").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerDashboard").ToString() : GetPageIdByNavigationTag("CustomerDashboard").ToString(); 952 953 string myProfilePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerProfile").ToString() : GetPageIdByNavigationTag("CustomerProfile").ToString(); 954 string myOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders").ToString() : GetPageIdByNavigationTag("CustomerOrders").ToString(); 955 string myFavoritesPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerFavorites").ToString() : GetPageIdByNavigationTag("CustomerFavorites").ToString(); 956 bool showMyProfileLink = Model.Area.Item.GetBoolean("ShowMyProfileLink"); 957 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 958 bool showMyFavoritesLink = Model.Area.Item.GetBoolean("ShowMyFavoritesLink"); 959 960 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 961 int startLevel = renderPagesInToolBar ? 1 : 0; 962 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme"); 963 964 bool onlyPreview = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous"); 965 966 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 967 { 968 <!-- Trigger for mobile navigation --> 969 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger" /> 970 971 <!-- Mobile navigation --> 972 <nav class="mobile-navigation dw-mod"> 973 @if (Model.CurrentUser.ID > 0) 974 { 975 string userName = Model.CurrentUser.FirstName != null ? Model.CurrentUser.FirstName : ""; 976 userName += " " + Model.CurrentUser.LastName != null ? Model.CurrentUser.LastName : ""; 977 userName += userName == "" && Model.CurrentUser.UserName != null ? Model.CurrentUser.UserName : ""; 978 979 <ul class="menu menu-mobile"> 980 <li class="menu-mobile__item w-50 bg-primary menu-mobile__container"> 981 <a href="/default.aspx?ID=@myDashboardPageId" class="menu-mobile__link hover-bg-green dw-mod text-white"><img src="@navigationIconUserWhite" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">@Translate("My user")</a> 982 </li> 983 984 <li class="menu-mobile__item w-50 js-typeahead" data-page-size="2" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId"> 985 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin mobile-search-input" placeholder="@searchPlaceholder" value="@searchValue"> 986 <ul class="dropdown dropdown--absolute-position mobile-search-dropdown u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul> 987 </li> 988 989 </ul> 990 991 } 992 <ul class="menu menu-mobile"> 993 994 @if (Model.CurrentUser.ID <= 0) 995 { 996 <li class="menu-mobile__item w-50 bg-primary menu-mobile__container"> 997 <label for="SignInModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false;" class="menu-mobile__link text-white hover-bg-green dw-mod"><img src="@navigationIconUserWhite" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">@Translate("Sign in")</label> 998 </li> 999 <li class="menu-mobile__item w-50 js-typeahead" data-page-size="2" id="MobileProductSearch" data-search-feed-id="@productsSearchFeedId&feed=true" data-result-page-id="@productsPageId"> 1000 <input type="text" class="u-full-width js-typeahead-search-field u-no-margin mobile-search-input" placeholder="@searchPlaceholder" value="@searchValue"> 1001 <ul class="dropdown dropdown--absolute-position mobile-search-dropdown u-min-w220px js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchContent" data-template="SearchContentTemplate" data-json-feed="/Default.aspx?ID=@productsSearchFeedId&feedType=productsOnly&feed=true" data-init-onload="false"></ul> 1002 </li> 1003 1004 } 1005 1006 </ul> 1007 1008 @RenderNavigation(new 1009 { 1010 id = "mobilenavigation", 1011 cssclass = "menu menu-mobile dwnavigation", 1012 startLevel = 0, 1013 ecomStartLevel = 1, 1014 endlevel = 5, 1015 expandmode = "all", 1016 template = "BaseMenuForMobile.xslt" 1017 }) 1018 1019 <ul class="menu menu-mobile"> 1020 @if (Model.CurrentUser.ID <= 0) 1021 { 1022 1023 if (showCreateAccountLink) 1024 { 1025 <li class="menu-mobile__item menu-mobile__container"> 1026 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Default.aspx?ID=@createAccountPageId"><img src="@navigationIconFourth" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText">@Translate("Create account")</a> 1027 </li> 1028 } 1029 } 1030 1031 else 1032 { 1033 if (showMyProfileLink && User.IsExtranetUserLoggedIn()) 1034 { 1035 <li class="menu-mobile__item"> 1036 <a href="tel:@contactNumber" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"> 1037 <img src="@navigationIcon" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText"> 1038 <span>@contactNumber</span> 1039 </a> 1040 </li> 1041 } 1042 1043 <li class="menu-mobile__item"> 1044 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId"><img src="@navigationIconFourth" class="d-inline-block align-text-top menu-mobile__link-icon" alt="@navigationText"> @Translate("Sign out")</a> 1045 </li> 1046 } 1047 1048 1049 1050 @if (Model.Languages.Count > 0 && !isLrtSite) 1051 { 1052 string selectedLanguage = ""; 1053 1054 foreach (var lang in Model.Languages) 1055 { 1056 if (lang.IsCurrent) 1057 { 1058 selectedLanguage = lang.Name; 1059 } 1060 } 1061 1062 <li class="menu-mobile__item dw-mod"> 1063 <label for="MobileMenuCheck_Language" class="menu-mobile__link menu-mobile__link--highlighted dw-mod"> @selectedLanguage</label> 1064 <input id="MobileMenuCheck_Language" type="checkbox" class="expand-trigger"> 1065 <label for="MobileMenuCheck_Language" class="menu-mobile__trigger"></label> 1066 <ul class="menu-mobile menu-mobile__submenu expand-menu"> 1067 @foreach (var lang in Model.Languages) 1068 { 1069 if (lang.Name != "Deutcsh") 1070 { 1071 <li class="menu-mobile__item dw-mod"> 1072 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod menu-mobile__link--level-1" href="/Default.aspx?ID=@lang.Page.ID&CurrencyCode=@Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCurrencyId">@lang.Name</a> 1073 </li> 1074 } 1075 } 1076 </ul> 1077 </li> 1078 } 1079 1080 </ul> 1081 </nav> 1082 1083 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label> 1084 if (!onlyPreview) 1085 { 1086 <div class="u-visually-hidden js-handlebars-root js-mini-cart" id="miniCart" data-template="MiniCartContent" data-cart-id="@cartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 1087 } 1088 } 1089 } 1090 1091 @helper LoginModal() 1092 { 1093 int pageId = Model.TopPage.ID; 1094 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue; 1095 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 1096 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 1097 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery"; 1098 string userSignedInError = !Model.LogOnFailed ? "" : "checked"; 1099 string userSignedInErrorText = ""; 1100 1101 if (Model.LogOnFailed) 1102 { 1103 switch (Model.LogOnFailedReason) 1104 { 1105 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordLengthInvalid: 1106 userSignedInErrorText = Translate("Password length is invalid"); 1107 break; 1108 case Dynamicweb.Security.UserManagement.LogOnFailedReason.IncorrectLogin: 1109 userSignedInErrorText = Translate("Invalid email or password"); 1110 break; 1111 case Dynamicweb.Security.UserManagement.LogOnFailedReason.ExceededFailedLogOnLimit: 1112 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked"); 1113 break; 1114 case Dynamicweb.Security.UserManagement.LogOnFailedReason.LoginLocked: 1115 userSignedInErrorText = Translate("The user account is temporarily locked"); 1116 break; 1117 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordExpired: 1118 userSignedInErrorText = Translate("The password has expired and needs to be renewed"); 1119 break; 1120 default: 1121 userSignedInErrorText = Translate("An unknown error occured"); 1122 break; 1123 } 1124 } 1125 <!-- Trigger for the login modal --> 1126 1127 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger @topLayout" @userSignedInError /> 1128 1129 <!-- Login modal --> 1130 <div class="modal-container"> 1131 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label> 1132 <div class="modal modal--xs login-modal" id="SignInModal"> 1133 <label for="SignInModalTrigger" class="modal__close"></label> 1134 <div class="modal__header"> 1135 <h1 class="mb-0">@Translate("Sign in")</h1> 1136 </div> 1137 <div class="modal__body"> 1138 <form method="post" id="LoginForm" action="?LoggedIn=true" class="u-no-margin"> 1139 <input type="hidden" name="ID" value="@pageId" /> 1140 <input type="hidden" name="DWExtranetUsernameRemember" value="True" /> 1141 <input type="hidden" name="DWExtranetPasswordRemember" value="True" /> 1142 <label for="LoginUsername">@Translate("Type Email")</label> 1143 <input type="text" class="u-full-width" id="LoginUsername" name="username" placeholder="@Translate(" placerholder email")" /> 1144 <label for="LoginPassword">@Translate("Type Password")</label> 1145 <input type="password" class="u-full-width" id="LoginPassword" name="password" placeholder="@Translate(" placeholder password")" /> 1146 <div class="field-error dw-mod">@userSignedInErrorText</div> 1147 <label> 1148 <input type="checkbox" id="RememberMe" name="Autologin" checked="checked" value="True"> 1149 <span>@Translate("Remember me", "Remember me")</span> 1150 </label> 1151 <button type="submit" class="btn btn--primary mb-2 btn--full dw-mod" name="LoginAction" value="Login" onclick="Buttons.LockButton(event)">@Translate("Sign in")</button> 1152 <a class="text-primary float-right btn-sm" href="/Default.aspx?id=@forgotPasswordPageId">@Translate("Forgot your password?", "Forgot your password?")</a> 1153 <div class="splitter mb-3 mt-4"> 1154 <span class="splitter__text">@Translate("CreateAccountText")</span> 1155 <hr class="splitter__line"> 1156 </div> 1157 <a class="btn btn-secondary bg-black w-100 mt-0" href="/default.aspx?ID=@createAccountPageId">@Translate("Create account")?</a> 1158 </form> 1159 </div> 1160 </div> 1161 </div> 1162 1163 } 1164 1165 @helper RenderHeaderNavigation() 1166 { 1167 bool megaMenu = Model.Area.Item.GetList("NavigationMegaMenu").SelectedValue.ToLower() == "true" ? true : false; 1168 string megamenuPromotionImage = Model.Area.Item.GetFile("NavigationMegamenuPromotionImage") != null ? Model.Area.Item.GetFile("NavigationMegamenuPromotionImage").Path : ""; 1169 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 1170 int startLevel = renderPagesInToolBar ? 1 : 0; 1171 1172 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 1173 { 1174 if (!megaMenu) 1175 { 1176 @RenderNavigation(new 1177 { 1178 id = "topnavigation", 1179 cssclass = "menu dw-mod dwnavigation", 1180 startLevel = 0, 1181 ecomStartLevel = @startLevel, 1182 endlevel = 5, 1183 expandmode = "all", 1184 template = "BaseMenuWithDropdown.xslt" 1185 }); 1186 } 1187 1188 else 1189 { 1190 @RenderNavigation(new 1191 { 1192 id = "topnavigation", 1193 cssclass = "menu dw-mod dwnavigation", 1194 startLevel = @startLevel, 1195 ecomStartLevel = @startLevel, 1196 endlevel = 5, 1197 promotionImage = megamenuPromotionImage, 1198 promotionLink = Model.Area.Item.GetString("NavigationMegamenuPromotionLink"), 1199 expandmode = "all", 1200 template = "BaseMegaMenu.xslt" 1201 }); 1202 } 1203 } 1204 } 1205 1206 @helper MobileNavigationTrigger() 1207 { 1208 @* Mobile navigation trigger *@ 1209 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 1210 { 1211 <div class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1212 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link dw-mod"></label> 1213 </div> 1214 } 1215 } 1216 1217 1218 1219 @helper RenderLanguageSelector(string type = "inNavigation") 1220 { 1221 1222 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu--clean dw-mod"; 1223 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1224 bool isLrtSite = Model.Area.Item.GetBoolean("LRT_Theme"); 1225 1226 if (Model.Languages.Count > 1 && !isLrtSite) 1227 { 1228 <li class="@liClasses is-dropdown is-dropdown--no-icon"> 1229 <div class="@menuLinkClass menu__link--icon dw-mod text-dark text-uppercase"> 1230 1231 @foreach (var langnav in Model.Languages) 1232 { 1233 1234 if (langnav.IsCurrent && langnav.Name != "Deutcsh") 1235 { 1236 string langInfonav = Dynamicweb.Services.Areas.GetArea(langnav.ID).EcomCountryCode.ToLower(); 1237 1238 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@langInfonav</span> 1239 <img alt="arrow-down" class="d-inline-block align-text-middle lang-arrow-down" src="/Files/Images/arrow-down.svg" /> 1240 } 1241 1242 } 1243 1244 </div> 1245 <div class="menu menu--dropdown dw-mod"> 1246 @foreach (var lang in Model.Languages) 1247 { 1248 1249 1250 string langInfo = lang.Name; 1251 if (langInfo != "Deutcsh") 1252 { 1253 <a href="/Default.aspx?AreaID=@Dynamicweb.Services.Pages.GetPage(lang.Page.ID).Area.ID" class="menu-dropdown__item menu-dropdown__item--link dw-mod">@langInfo</a> 1254 } 1255 } 1256 </div> 1257 </li> 1258 } 1259 1260 1261 1262 1263 } 1264 1265 @helper RenderMiniCart(string type = "inNavigation") 1266 { 1267 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod" : "menu__item menu__item--horizontal menu--clean dw-mod"; 1268 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1269 1270 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 1271 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 1272 int cartPageId = GetPageIdByNavigationTag("CartPage"); 1273 double cartProductsCount = Model.Cart.TotalProductsCount; 1274 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 1275 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 1276 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 1277 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 1278 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 1279 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 1280 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 1281 string openingBracket = "("; 1282 string closingBracket = ")"; 1283 1284 @* Mini cart *@ 1285 <li class="@liClasses"> 1286 <div class="mini-cart dw-mod m-0"> 1287 <a href="/Default.aspx?ID=@cartPageId&Purge=True" id="miniCartCounterWrap" class="@menuLinkClass dw-mod js-mini-cart-button" onmouseenter="Cart.UpdateMiniCart(event, 'miniCart', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart&rnd='+ Date.now() +'')"> 1288 <img src="@navigationIconThird" class="d-inline-block align-top" alt="@navigationIconThird"> 1289 <div class="mini-cart__counter mini-cart__counter--inline dw-mod"> 1290 <div class="js-handlebars-root js-mini-cart-counter" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false"> 1291 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Cart")</span> 1292 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-start">@openingBracket</span> 1293 <span class="js-mini-cart-counter-content mini-cart__counter-quantity">@cartProductsCount</span> 1294 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-close">@closingBracket</span> 1295 </div> 1296 </div> 1297 </a> 1298 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 1299 { 1300 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="miniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 1301 } 1302 </div> 1303 </li> 1304 } 1305 1306 @helper RenderSignIn(string type = "inNavigation", string userInitials = "") 1307 { 1308 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs u-margin-left" : "menu__item menu__item--horizontal menu__item--clean dw-mod"; 1309 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1310 1311 int pageId = Model.TopPage.ID; 1312 string myProfilePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerProfile").ToString() : GetPageIdByNavigationTag("CustomerProfile").ToString(); 1313 string myOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders").ToString() : GetPageIdByNavigationTag("CustomerOrders").ToString(); 1314 string myDashboardPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("CustomerDashboard").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerDashboard").ToString() : GetPageIdByNavigationTag("CustomerDashboard").ToString(); 1315 string myFavoritesPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerFavorites").ToString() : GetPageIdByNavigationTag("CustomerFavorites").ToString(); 1316 string mySavedCardsPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("SignInPage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("SavedCards").ToString() : GetPageIdByNavigationTag("SavedCards").ToString(); 1317 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 1318 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 1319 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery"; 1320 1321 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink"); 1322 bool showMyProfileLink = Model.Area.Item.GetBoolean("ShowMyProfileLink"); 1323 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 1324 bool showMyFavoritesLink = Model.Area.Item.GetBoolean("ShowMyFavoritesLink"); 1325 bool showMySavedCardsLink = Model.Area.Item.GetBoolean("ShowMySavedCardsLink"); 1326 1327 string navigationText = Model.Area.Item.GetString("NavigationPhoneText"); 1328 string navigationIcon = Model.Area.Item.GetFile("NavigationIcon") != null ? Model.Area.Item.GetFile("NavigationIcon").Path : ""; 1329 string navigationIconSecond = Model.Area.Item.GetFile("NavigationIconSecond") != null ? Model.Area.Item.GetFile("NavigationIconSecond").Path : ""; 1330 string navigationIconThird = Model.Area.Item.GetFile("NavigationIconThird") != null ? Model.Area.Item.GetFile("NavigationIconThird").Path : ""; 1331 string navigationIconFourth = Model.Area.Item.GetFile("NavigationIconFourth") != null ? Model.Area.Item.GetFile("NavigationIconFourth").Path : ""; 1332 string navigationIconFifth = Model.Area.Item.GetFile("NavigationIconFifth") != null ? Model.Area.Item.GetFile("NavigationIconFifth").Path : ""; 1333 string navigationIconFifthLink = Model.Area.Item.GetString("navigationIconFifthLink"); 1334 1335 @* Sign in + Customer center links *@ 1336 <li class="@liClasses"> 1337 <div class="@menuLinkClass is-dropdown is-dropdown--no-icon dw-mod"> 1338 <img src="@navigationIconFourth" class="d-inline-block align-text-top" alt="@Translate(" Userprofile")"> 1339 @if (Model.CurrentUser.ID <= 0) 1340 { 1341 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Login")</span> 1342 } 1343 else 1344 { 1345 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Model.CurrentUser.FirstName</span> 1346 } 1347 <div class="menu menu--dropdown sign-in-dropdown dw-mod"> 1348 <ul class="list list--clean dw-mod"> 1349 @if (Model.CurrentUser.ID <= 0) 1350 { 1351 <li> 1352 <label for="SignInModalTrigger" class="btn btn--primary btn--full u-no-margin sign-in-modal-trigger-button dw-mod" onclick="setTimeout(function () { document.getElementById('LoginUsername').focus() }, 10)">@Translate("Sign in")</label> 1353 </li> 1354 if (showCreateAccountLink) 1355 { 1356 <li> 1357 <a href="/default.aspx?ID=@createAccountPageId" class="btn btn--secondary u-no-margin">@Translate("Create account")</a> 1358 </li> 1359 } 1360 if (showMyProfileLink || showMyOrdersLink || showMyFavoritesLink || showMySavedCardsLink && User.IsExtranetUserLoggedIn()) 1361 { 1362 <li class="list__seperator dw-mod"></li> 1363 } 1364 } 1365 1366 else 1367 { 1368 if (!string.IsNullOrWhiteSpace(myDashboardPageId)) 1369 { 1370 <li> 1371 <a href="/default.aspx?ID=@myDashboardPageId" class="list__link dw-mod"><i class="fa fa-user"></i> @Translate("My Account")</a> 1372 </li> 1373 } 1374 } 1375 1376 @if (showMyProfileLink && User.IsExtranetUserLoggedIn()) 1377 { 1378 <li> 1379 <a href="/default.aspx?ID=@myProfilePageId" class="list__link dw-mod"><i class="fa fa-user"></i> @Translate("My Profile")</a> 1380 </li> 1381 } 1382 1383 @if (showMyOrdersLink && User.IsExtranetUserLoggedIn()) 1384 { 1385 <li> 1386 <a href="/default.aspx?ID=@myOrdersPageId" class="list__link dw-mod"><i class="fa fa-list"></i> @Translate("My Orders")</a> 1387 </li> 1388 } 1389 1390 @if (showMyFavoritesLink && User.IsExtranetUserLoggedIn()) 1391 { 1392 <li> 1393 <a href="/default.aspx?ID=@myFavoritesPageId" class="list__link dw-mod"><i class="fa fa-star"></i> @Translate("My Favorites")</a> 1394 </li> 1395 } 1396 1397 @if (showMySavedCardsLink) 1398 { 1399 <li> 1400 <a href="/default.aspx?ID=@mySavedCardsPageId" class="list__link dw-mod"><i class="fa fa-credit-card"></i> @Translate("My Saved cards")</a> 1401 </li> 1402 } 1403 1404 @if (Model.CurrentUser.ID > 0) 1405 { 1406 if (showMyProfileLink || showMyOrdersLink || showMyFavoritesLink || showMySavedCardsLink) 1407 { 1408 <li class="list__seperator dw-mod"></li> 1409 } 1410 <li> 1411 <a href="/Admin/Public/ExtranetLogoff.aspx?ID=@pageId" class="list__link dw-mod">@Translate("Sign out")</a> 1412 </li> 1413 } 1414 </ul> 1415 </div> 1416 </div> 1417 </li> 1418 } 1419 1420 @helper RenderFavorites(string type = "inNavigation") 1421 { 1422 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu--clean dw-mod"; 1423 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1424 string myFavoritesPageId = GetPageIdByNavigationTag("CustomerFavorites").ToString(); 1425 1426 @* Favorites *@ 1427 if (Model.CurrentUser.ID > 0) 1428 { 1429 <li class="@liClasses"> 1430 <a href="/Default.aspx?ID=@myFavoritesPageId" class="@menuLinkClass dw-mod"> 1431 <i class="fa fa-star fa-1_5x"></i> 1432 </a> 1433 </li> 1434 } 1435 } 1436 1437 @helper RenderFooter() 1438 { 1439 string footerColumnThreeContent = !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterColumnThree")) ? Model.Area.Item.GetString("FooterColumnThree") : ""; 1440 string footerColumnOneHeader = Model.Area.Item.GetString("FooterColumnOneHeader"); 1441 string footerColumnTwoHeader = Model.Area.Item.GetString("FooterColumnTwoHeader"); 1442 string footerColumnThreeHeader = Model.Area.Item.GetString("FooterColumnThreeHeader"); 1443 int newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp"); 1444 string TextUnderLogo = Model.Area.Item.GetString("TextUnderLogo"); 1445 string footerlogo = Model.Area.Item.GetFile("Logo") != null ? Model.Area.Item.GetFile("Logo").Path : "/Files/Images/logo-dynamicweb.png"; 1446 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 1447 string logoAltText = Model.Area.Item.GetString("LogoAltText"); 1448 1449 string fullBackgroundImage = ""; 1450 if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet" && Model.Area.Item.GetFile("BackgroundImage") != null) 1451 { 1452 fullBackgroundImage = "background-image:url(/Admin/Public/GetImage.ashx?width=2500&amp;height=1100&amp;crop=0&amp;Compression=85&amp;DoNotUpscale=true&amp;image=" + Model.Area.Item.GetFile("BackgroundImage").Path + ");"; 1453 fullBackgroundImage += " background-position: center center; background-size: cover; "; 1454 } 1455 else if ((Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") && Model.Area.Item.GetFile("Mobile_BackgroundImage") != null) 1456 { 1457 fullBackgroundImage = "background-image:url(/Admin/Public/GetImage.ashx?width=2500&amp;height=1100&amp;crop=5&amp;Compression=85&amp;DoNotUpscale=true&amp;image=" + Model.Area.Item.GetFile("Mobile_BackgroundImage").Path + ");"; 1458 fullBackgroundImage += " background-position: center center; background-size: cover; "; 1459 } 1460 1461 <!-- Footer section --> 1462 <footer class="footer dw-mod" style="@fullBackgroundImage"> 1463 <div class="center-container header-nav top-container__center-container dw-mod"> 1464 <div class="grid"> 1465 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0) 1466 { 1467 <div class="grid__col-md-auto logo-col"> 1468 <div class="footer__content dw-mod"> 1469 <div class="collection dw-mod"> 1470 <a href="/Default.aspx?ID=@firstPageId"> 1471 <img class="grid__cell-img logo-footer dw-mod" src="@footerlogo" alt="@logoAltText" /> 1472 </a> 1473 <div class="footer__content social-links-container mt-4 dw-mod"> 1474 @foreach (var socialitem in Model.Area.Item.GetItems("FooterSocialLinks")) 1475 { 1476 //Fields.FirstOrDefault(x => x.SystemName == "Icon").GetString() 1477 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel; 1478 string socialIconClass = socialIcon.SelectedValue; 1479 string socialIconTitle = socialIcon.SelectedName; 1480 string socialLink = socialitem.GetString("Link"); 1481 1482 <a href="@socialLink" target="_blank" title="@socialIconTitle"><i class="fa @socialIconClass fa-2x"></i></a> 1483 } 1484 </div> 1485 </div> 1486 </div> 1487 </div> 1488 } 1489 1490 @if (!string.IsNullOrEmpty(footerColumnOneHeader)) 1491 { 1492 <div class="grid__col-md-auto"> 1493 <h4 class="footer__heading dw-mod">@footerColumnOneHeader</h4> 1494 <div class="footer__content dw-mod"> 1495 <ul class="small list dw-mod"> 1496 @foreach (var footerLink in Model.Area.Item.GetItems("FooterColumnOneLink")) 1497 { 1498 string footerlinkText = footerLink.GetString("LinkText"); 1499 string footerlinkUrl = footerLink.GetString("LinkUrl"); 1500 <li> 1501 <a class="font-weight-semi-bold" href="@footerlinkUrl">@footerlinkText</a> 1502 </li> 1503 } 1504 </ul> 1505 </div> 1506 </div> 1507 } 1508 1509 @if (!string.IsNullOrEmpty(footerColumnTwoHeader)) 1510 { 1511 <div class="grid__col-md-auto"> 1512 <h4 class="footer__heading dw-mod">@footerColumnTwoHeader</h4> 1513 <div class="footer__content dw-mod"> 1514 <ul class="small list dw-mod"> 1515 @foreach (var footerLinkSecond in Model.Area.Item.GetItems("FooterColumnTwoLink")) 1516 { 1517 string footerlinkTextSecondary = footerLinkSecond.GetString("LinkTextSecondary"); 1518 string footerlinkUrlSecondary = footerLinkSecond.GetString("LinkUrlSecondary"); 1519 <li> 1520 <a class="font-weight-semi-bold" href="@footerlinkUrlSecondary">@footerlinkTextSecondary</a> 1521 </li> 1522 } 1523 </ul> 1524 </div> 1525 </div> 1526 } 1527 1528 @if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader)) 1529 { 1530 <div class="grid__col-md-auto"> 1531 <h4 class="footer__heading dw-mod">@footerColumnThreeHeader</h4> 1532 <div class="footer__content dw-mod"> 1533 @footerColumnThreeContent 1534 </div> 1535 </div> 1536 } 1537 1538 @if (Model.Area.Item.GetBoolean("FooterNewsletterSignUp")) 1539 { 1540 <div class="grid__col-md-auto"> 1541 <h4 class="footer__heading dw-mod">@Translate("Mailing list", "Mailing list")</h4> 1542 <div class="footer__content dw-mod"> 1543 <p>@Translate("Sign up if you would like to receive occasional treats from us", "Sign up if you would like to receive occasional treats from us").</p> 1544 <form class="form dw-mod" name="NewsletterRedirect" action='/Default.aspx' method="get" enctype="multipart/form-data"> 1545 <input name="ID" id="ID" value="@newsletterSignUpPageId" type="hidden" /> 1546 <div class="form__field-combi"> 1547 <input name="NewsletterEmail" id="NewsletterEmail" type="text" class="u-w160px" placeholder='@Translate("Your email address", "Your email address")' /> 1548 <input class="btn btn--primary btn--condensed dw-mod" type="submit" id="Submitter" value='@Translate("Go", "Go")' /> 1549 </div> 1550 </form> 1551 </div> 1552 </div> 1553 } 1554 1555 <div class="grid__col-12 footer__copyright dw-mod"> 1556 <p>@Model.Area.Item.GetString("FooterCopyrightText")</p> 1557 </div> 1558 </div> 1559 </div> 1560 </footer> 1561 1562 } 1563 1564 1565 @* Templates for Typeahead *@ 1566 <script id="SearchGroupsTemplate" type="text/x-template"> 1567 {{#.}} 1568 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li> 1569 {{/.}} 1570 </script> 1571 1572 <script id="SearchContentTemplate" type="text/x-template"> 1573 {{#each .}} 1574 {{#Product}} 1575 {{#ifCond template "!==" "SearchMore"}} 1576 <li class="search-dropdown-item dropdown__item dropdown__item--seperator dw-mod"> 1577 <div> 1578 <a href="{{link}}" class="search-dropdown-item__anchor js-typeahead-link u-color-inherit u-pull--left"> 1579 <div class="search-dropdown-item__image u-margin-right u-pull--left {{noimage}} u-hidden-xs u-hidden-xxs"><img src="/Admin/Public/GetImage.ashx?width=45&height=36&crop=5&FillCanvas=True&Compression=75&image={{image}}" alt="{{name}}"></div> 1580 <div class="search-dropdown-item__content u-pull--left mb-3"> 1581 <div class="small font-weight-normal js-typeahead-name">@Translate("Product number") {{number}}</div> 1582 <div class="small font-weight-normal js-typeahead-name">{{name}}</div> 1583 @if (!onlyPreview) 1584 { 1585 <div class="{{onlyPreview}} search-product-price font-weight-normal">{{price}}</div> 1586 } 1587 </div> 1588 </a> 1589 <div class="u-w80px hidden-xs-down"> 1590 <a href="{{link}}" class="btn btn--secondary btn--condensed btn--full u-no-margin dw-mod {{hideViewMore}} js-ignore-click-outside">@Translate("View")</a> 1591 </div> 1592 </div> 1593 </li> 1594 {{/ifCond}} 1595 {{#ifCond template "===" "SearchMore"}} 1596 {{>SearchMore}} 1597 {{/ifCond}} 1598 {{/Product}} 1599 {{else}} 1600 <li class="dropdown__item dropdown__item--seperator dw-mod"> 1601 @Translate("No products found") 1602 </li> 1603 {{/each}} 1604 </script> 1605 <script id="SearchMore" type="text/x-template"> 1606 <li class="dropdown__item dropdown__item--not-selectable dw-mod"> 1607 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link"> 1608 @Translate("View all") 1609 </a> 1610 </li> 1611 </script> 1612 1613 @* Templates for the mini cart *@ 1614 <script id="MiniCartCounterContent" type="text/x-template"> 1615 {{#.}} 1616 <span class="small d-inline-block text-black text-uppercase font-weight-semi-bold">@Translate("Cart")</span> 1617 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-start">(</span> 1618 <span class="js-mini-cart-counter-content mini-cart__counter-quantity">{{numberofproducts}}</span> 1619 <span class="mini-cart__counter-quantity mini-cart__counter-bracket-close">)</span> 1620 {{/.}} 1621 </script> 1622 1623 <script id="MiniCartContent" type="text/x-template"> 1624 {{#.}} 1625 <div class="mini-cart-dropdown__inner {{isempty}} dw-mod"> 1626 <h4 class="u-ta-left u-no-margin u-margin-bottom u-margin-top font-weight-normal h4">@Translate("Shopping cart")</h4> 1627 <div class="mini-cart-dropdown__body dw-mod"> 1628 <table class="table table-responsive mini-cart-table border-bottom dw-mod"> 1629 <thead> 1630 <tr class="font-weight-normal h6"> 1631 <hr /> 1632 <td>&nbsp;</td> 1633 <td>@Translate("Product")</td> 1634 <td class="u-ta-center">@Translate("Qty")</td> 1635 <td class="u-ta-right" width="120">@Translate("Total price excl. vat")</td> 1636 </tr> 1637 </thead> 1638 {{#OrderLines}} 1639 {{#ifCond template "===" "CartOrderline"}} 1640 {{>MiniCartOrderline}} 1641 {{/ifCond}} 1642 {{#ifCond template "===" "CartOrderlineMobile"}} 1643 {{>MiniCartOrderlineMobile}} 1644 {{/ifCond}} 1645 {{#ifCond template "===" "CartOrderlineDiscount"}} 1646 {{>MiniCartOrderlineDiscount}} 1647 {{/ifCond}} 1648 {{/OrderLines}} 1649 <tr> 1650 <td class="h6 font-weight-normal">@Translate("Shipping")</td> 1651 <td colspan="3" class="u-ta-right" width="130">{{shippingfee}}</td> 1652 </tr> 1653 <tr class="mini-cart-totals dw-mod"> 1654 <td colspan="2" class="h6 font-weight-semi-bold">@Translate("Total")</td> 1655 <td class="h6 font-weight-semi-bold u-ta-right js-mini-cart-quantity">{{numberofproducts}}</td> 1656 <td class="h6 font-weight-semi-bold u-ta-right" width="130"> 1657 1658 {{totalprice}} 1659 1660 </td> 1661 </tr> 1662 </table> 1663 </div> 1664 <table class="table mini-cart-table dw-mod"> 1665 <tbody> 1666 <tr class="mini-cart-orderlines__footer dw-mod"> 1667 <td colspan="2"><button type="button" class="btn btn--secondary btn--condensed u-pull--left u-no-margin btn--sm" onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=EmptyCart', false);">@Translate("Empty cart")</button></td> 1668 <td colspan="2" class="u-ta-right"><a href="/Default.aspx?ID=@cartPageId" class="btn btn--primary u-pull--right u-no-margin btn--sm">@Translate("Proceed to checkout")</a></td> 1669 </tr> 1670 </tbody> 1671 </table> 1672 </div> 1673 {{/.}} 1674 </script> 1675 1676 <script id="MiniCartOrderline" type="text/x-template"> 1677 <tr class="{{isempty}}"> 1678 <td class="mini-cart-table__product-image"><a href="{{link}}" class="{{hideimage}}"><img src="/Admin/Public/GetImage.ashx?width=300&height=300&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td> 1679 <td> 1680 <a href="{{link}}" class="mini-cart-orderlines__name product-number">@Translate("Product number") {{productnumber}}</a> 1681 <a href="{{link}}" class="mini-cart-orderlines__name font-weight-normal small">{{name}}</a> 1682 1683 @* IF SENTENCE FROM DISCOUNT LIST IN JSON FEED FILE (NZPRODUTLISTFEED.CSHTML) *@ 1684 1685 {{#if Discount.[1].discountPrice}} 1686 <div class="js-popup minicart_popup_container"> 1687 <a class="js-popup-trigger">@Translate("DiscountText")</a> 1688 1689 <div class="js-popup-modal minicart_popup_modal"> 1690 <div class="js-popout-close nz-icon icon-nz-close-circled"></div> 1691 1692 <ul class="grid__col-12 pt-5 p-0 d-flex flex-row flex-wrap"> 1693 @* FOREACH DISCOUNT LOOP FROM JSON FEED *@ 1694 {{#each Discount}} 1695 {{#unless @@first}} 1696 1697 <li class="p-0 mb-0 grid__col-12 align-items-start">@Translate("UnitPriceText") {{this.discountQuantity}} @Translate("UnitPriceTextStk")</li> 1698 <li class="p-0 pb-3 grid__col-12 align-items-start">{{this.discountPrice}} {{this.discountCurrency}}</li> 1699 {{/unless}} 1700 {{/each}} 1701 1702 </ul> 1703 </div> 1704 1705 </div> 1706 {{/if}} 1707 1708 <div class="item-number">{{unitname}}</div> 1709 1710 <span class="small product-card__quantity-alert js-product-quantity-error-{{id}} {{limitReached}}">@Translate("Max stock level is reached")</span> 1711 1712 </td> 1713 <td class="u-ta-right"> 1714 <div class="mini-cart-quantity"> 1715 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DecOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__subtract" data-icon-nz="minus"></span> 1716 <input class="mini-cart-quantity__input js-quantity-input text-center" id="Quantity_{{id}}" name="Quantity{{id}}" type="number" value="{{quantity}}" min="1" style="pointer-events:none;" /> 1717 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=IncOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__add" data-icon-nz="plus"></span> 1718 </div> 1719 </td> 1720 <td class="u-ta-right mini-cart-remove-product-container"> 1721 <span class="minicart-totalprice"> 1722 <span> 1723 {{totalunitpricewithdiscounts}} 1724 </span> 1725 1726 1727 </span><a class="btn btn--link u-no-margin mini-cart-remove-product mt-1 pt-0 pr-0 text-right" onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DelOrderLine&key={{orderLineId}}', false);">@Translate("Remove product")</a> 1728 </td> 1729 </tr> 1730 </script> 1731 1732 <script id="MiniCartOrderlineMobile" type="text/x-template"> 1733 <tr class="{{isempty}}"> 1734 <td class="mini-cart-table__product-image"><a href="{{link}}" class="{{hideimage}}"><img src="/Admin/Public/GetImage.ashx?width=50&height=50&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td> 1735 <td> 1736 <a href="{{link}}" class="mini-cart-orderlines__name">{{name}}</a> 1737 <a href="{{link}}" class="mini-cart-orderlines__name item-number">{{variantname}}</a> 1738 <div class="item-number">{{unitname}}</div> 1739 </td> 1740 <td class="u-ta-right"> 1741 <div class="mini-cart-quantity"> 1742 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=DecOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__subtract" data-icon-nz="minus"></span> 1743 <input class="mini-cart-quantity__input js-quantity-input text-center" id="Quantity_{{id}}" name="Quantity{{id}}" type="number" value="{{quantity}}" min="1" /> 1744 <span onclick="Cart.UpdateCart('Cart', '/Default.aspx?ID=@miniCartFeedPageId', '&CartCmd=IncOrderLine&key={{orderLineId}}', false);" class="mini-cart-quantity__add" data-icon-nz="plus"></span> 1745 </div> 1746 </td> 1747 <td class="u-ta-right">{{totalprice}}</td> 1748 </tr> 1749 </script> 1750 1751 <script id="MiniCartOrderlineDiscount" type="text/x-template"> 1752 1753 1754 </script> 1755 1756 <!-- Javascript --> 1757 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.11.js"></script> 1758 <script src="/assets/javascripts/lib/searchparams-polyfill.js"></script> 1759 <script src="/Files/Templates/Designs/Rapido/js/master.min.js"></script> 1760 1761 @if (Model.Area.Item.GetBoolean("UseCustomJavascript")) 1762 { 1763 <script>window.jQuery || document.write('<script src="/assets/javascripts/lib/jquery-3.2.1.min.js"><\/script>')</script> 1764 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script> 1765 <script src="/assets/javascripts/lib/es6-shim.min.js"></script> 1766 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?v=@assetsVersion"></script> 1767 } 1768 1769 <script> 1770 Wireframe.Init(@wireframeMode.ToLower()); 1771 </script> 1772 1773 1774 1775 1776 <!-- Modal --> 1777 <div class="nz-modal fade js-video-modal" tabindex="-1" role="dialog" aria-hidden="true"> 1778 <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> 1779 <div class="modal-content"> 1780 <div class="modal-header"> 1781 <button type="button" class="close btn-primary" data-dismiss="modal" aria-label="Close"> 1782 <span aria-hidden="true" data-icon-nz="close"></span> 1783 </button> 1784 </div> 1785 <div class="modal-body js-modal-content p-0"> 1786 1787 <div class="embed-responsive embed-responsive-16by9"> 1788 <iframe class="js-video-container embed-responsive-item" data-cookieconsent="marketing" data-src="" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> 1789 </div> 1790 </div> 1791 </div> 1792 </div> 1793 </div> 1794 1795 <!-- Alert Modal --> 1796 <div class="nz-modal fade alert-modal js-alert-modal" tabindex="-1" role="dialog" aria-hidden="true"> 1797 <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> 1798 <div class="modal-content"> 1799 <div class="modal-header"> 1800 <button type="button" class="close btn-primary" data-dismiss="modal" aria-label="Close"> 1801 <span aria-hidden="true" data-icon-nz="close"></span> 1802 </button> 1803 </div> 1804 <div class="modal-body js-modal-content p-0"> 1805 <div class="cookies-text text-center"> 1806 <p> 1807 @Translate("CookiesMarketing", "Please accept marketing cookies to watch this video") 1808 </p> 1809 <a href="javascript:Cookiebot.renew()" class="btn btn-nav-lg btn-outline-secondary "> 1810 @Translate("CookiesSettings", "Update cookie settings") 1811 </a> 1812 </div> 1813 1814 </div> 1815 </div> 1816 </div> 1817 </div> 1818 1819 </body> 1820 </html> 1821