Error executing template "Designs/StandardWebshop/_parsed/StandardPage.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): Transaction (Process ID 61) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
   at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
   at System.Data.SqlClient.SqlDataReader.Read()
   at Dynamicweb.Ecommerce.Products.GroupRelation.get_CachedGroupRelations(GroupRelationType type)
   at Dynamicweb.Ecommerce.Products.GroupRelation.get_GroupRelationsByChildId(String childId)
   at Dynamicweb.Ecommerce.Products.Group.get_IsTopGroup()
   at Dynamicweb.Ecommerce.Shops.Shop.get_TopLevelGroups(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_e8803404c2764dc39bcd86de3e51929c.Execute() in D:\Dynamicweb.net\Solutions\twodayco3\aras.cloud.dynamicweb-cms.com\Release-3\StandardWebshop\Files\Templates\Designs\StandardWebshop\_parsed\StandardPage.parsed.cshtml:line 68
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()
ClientConnectionId:99db62eb-6417-410b-aa26-8d85ec06d588
Error Number:1205,State:51,Class:13

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 @using NORRIQ.Common8.Razor; 3 <!DOCTYPE html> 4 <html lang="@Pageview.Area.Culture"> 5 <head> 6 <title>@Model.Title</title> 7 @if (Model.Area.Item.GetBoolean("NoIndex")) 8 { 9 <meta name="robots" content="noindex, nofollow" /> 10 <!-- TODO: remove on launch--> 11 } 12 <meta charset='utf-8' /> 13 <meta name="description" content="@Model.Description" /> 14 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 15 <link rel="shortcut icon" href="/Files/Images/Website/favicon.ico" /> 16 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no" /> 17 <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic' rel='stylesheet' type='text/css' /> 18 <link href='/dist/css/accelerator/style-min.css' rel='stylesheet' /> 19 @if (Model.Area.Item.GetList("Tracking_Provider").SelectedValue == "GTM") 20 { 21 @Model.Area.Item.GetString("GTM_Header_Script") 22 } 23 <!--[if IE]> 24 <style>.productlist-grid { float: left; }</style> 25 <![endif]--> 26 <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> 27 <!--[if lt IE 9]> 28 <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> 29 <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> 30 <![endif]--> 31 </head> 32 33 <body data-is-desktop="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop ? "true" : "false")" data-is-tablet="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Tablet ? "true" : "false")" data-is-phone="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile ? "true" : "false")"> 34 @if (Model.Area.Item.GetList("Tracking_Provider").SelectedValue == "GTM") 35 { 36 @Model.Area.Item.GetString("GTM_BodyIFrame") 37 } 38 @using NORRIQ.Common8.Razor; 39 @using Dynamicweb 40 @using Dynamicweb.Ecommerce.Common; 41 @using Dynamicweb.Ecommerce.Orders 42 @using Dynamicweb.Ecommerce.Prices 43 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 44 @{ 45 var isCartEmpty = (Dynamicweb.Ecommerce.Common.Context.Cart == null || Dynamicweb.Ecommerce.Common.Context.Cart.OrderLines.Count == 0); 46 } 47 <header class="header-default"> 48 <div class="header-default-top"> 49 <div class="container"> 50 <div class="header-default-helper"> 51 <a href="#languages" data-toggle="modal" class="culture"> 52 <img src='@Pageview.Area.Flag16X16' width="16" alt='@Pageview.Area.Culture.Split('-').Last()-Flag' /> <span>@Pageview.Area.CultureInfo.NativeName.Split('(').First()</span> 53 </a> 54 @if (Pageview.Security.UserLoggedIn) 55 { 56 <span class="header-default-user"> 57 <span class="header-default-username"><i class="icon-user" aria-hidden="true"></i> <span>@Pageview.User.Name - </span></span> 58 <a href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)'> 59 @Translate("Sign out") 60 </a> 61 </span> 62 } 63 </div> 64 @*@if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop || Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Tablet) 65 { 66 @RenderNavigation(new { Template = "navbar-nav-secondary-inline.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 }) 67 }*@ 68 @RenderNavigation(new { Template = "navbar-nav-secondary-inline.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 }) 69 </div> 70 </div> 71 <div class="container"> 72 <div class="header-default-logo"> 73 <a href='@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("home")' title='@Translate("Go to frontpage", "Go to frontpage")'> 74 @{ 75 var logo = Model.Area.Item.GetFile("Logo"); 76 77 if (logo != null) 78 { 79 <img class="img-responsive" src="@logo.Path" alt='@Translate("Website Logo Alt", "Shutter - Standard Webshop")' /> 80 } 81 else 82 { 83 <i>@Translate("No logo found", "Intet logo fundet...")</i> 84 } 85 } 86 </a> 87 <p class="tagline"><span class="visible-lg">@Model.Area.Item.GetString("LogoTagline")</span></p> 88 </div> 89 <ul class="nav navbar-nav header-default-nav"> 90 <li class="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile ? "dropdown dropdown-icon dropdown-mobile" : "header-default-search")"> 91 @if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile) 92 { 93 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 94 <i class="icon-search"></i> 95 <span class="dropdown-label">@Translate("Search", "Search")</span> 96 </a> 97 <div class="dropdown-menu"> 98 @using NORRIQ.Common8.Razor; 99 @{ 100 var searchLabel = Translate("Search products"); 101 var searchResultPageId = NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("search"); 102 var searchQuery = @System.Web.HttpContext.Current.Request.QueryString["ecomQuery"]; 103 } 104 105 <div class="form-search" id="instantsearch"> 106 <form class="form form-search-form" id="search-form" action="/Default.aspx" method="get"> 107 <input type="hidden" value="@searchQuery" id="searchstring"> 108 <input type="hidden" name="ID" value="@searchResultPageId" /> 109 <label for="searchTerm" class="sr-only"> 110 @searchLabel 111 </label> 112 <div class="input-group"> 113 <input type="search" class="form-control" id="searchTerm" name="eComQuery" placeholder="@searchLabel" autocomplete="off" data-tabindex="0" value="@searchQuery" /> 114 <span class="input-group-btn"> 115 <button type="submit" id="instantSearchBtn" class="btn btn-primary js-search-btn"> 116 <i id="instantSearchIcon" class="icon-search" aria-hidden="true"></i><span class="sr-only">@Translate("Search")</span> 117 </button> 118 </span> 119 </div> 120 </form> 121 <div class="form-search-collapse collapse" id="search-result-foldout"> 122 <div class="form-search-result" id="search-result-container"></div> 123 </div> 124 </div> 125 126 127 <script type="text/x-jsrender" id="quicksearchtemplate"> 128 129 <table class="table table-condensed productlist-table"> 130 <tbody> 131 {{for Products}} 132 <tr data-product-id="{{:Id}}" 133 data-product-key='{{:AutoAddProductKey}}' 134 data-product-language-id="{{:LanguageId}}"> 135 @if (Pageview.Security.UserLoggedIn) 136 { 137 <td class="productlist-table-thumb text-center" width="70"> 138 <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> 139 </td> 140 <td class="productlist-table-product"> 141 <a href="{{:Link}}" class="productlist-table-name"> 142 {{:Name}} 143 </a> 144 <div class="clearfix"> 145 <div class="pull-left text-small"> 146 @Translate("Product Number"): {{:Number}}<br /> 147 @Translate("Price"): {{:UnitPrice}} 148 </div> 149 <div class="productlist-table-quantity pull-right"> 150 <div class="input-group"> 151 <input type="text" 152 class="form-control qty-input text-center js-qs-qty-input" 153 value="{{:QtyInBasket}}" 154 onclick="this.focus(); this.select();" 155 data-tabindex="{{:#index + 1}}" /> 156 <span class="input-group-addon qty-input-user-feedback js-qs-qty-input-feedback"> 157 {{if QtyInBasket > 0}} 158 <i class="icon-added"></i> 159 {{else}} 160 <i class="icon-minicart"></i> 161 {{/if}} 162 </span> 163 </div> 164 </div> 165 </div> 166 </td> 167 } 168 else 169 { 170 <td class="productlist-table-thumb text-center" width="70"> 171 <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> 172 </td> 173 <td class="productlist-table-product"> 174 <a href="{{:Link}}" class="productlist-table-name"> 175 {{:Name}} 176 </a> 177 </td> 178 } 179 </tr> 180 {{/for}} 181 </tbody> 182 </table> 183 {{if MoreResults}} 184 <a href="{{:LinkToFullResults}}" class="btn btn-primary btn-sm">@Translate("Show all results") ({{:NumberOfResults}})</a> 185 {{/if}} 186 </script> 187 <script type="text/x-jsrender" id="quicksearchloadingtemplate"> 188 <p class="product-search-label"> 189 <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Searching") 190 </p> 191 </script> 192 <script type="text/x-jsrender" id="noquerytemplate"> 193 <p class="product-search-label"><i class="icon-keyboard" aria-hidden="true"></i> @Translate("Start typing to search")</p> 194 </script> 195 <script type="text/x-jsrender" id="failedsearchtemplate"> 196 <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("An error occured")</p> 197 </script> 198 <script type="text/x-jsrender" id="noresultstemplate"> 199 <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("Search found no products")</p> 200 </script> 201 202 <script type="text/x-jsrender" id="qsautoaddfeedbackloading"> 203 <i class="icon-async icon-pulse"></i> 204 </script> 205 <script type="text/x-jsrender" id="qsautoaddfeedbacksuccess"> 206 <i class="icon-added" title="@Translate("Product added to cart")"></i> 207 </script> 208 <script type="text/x-jsrender" id="qsautoaddfeedbackerror"> 209 {{if error == "badinput"}} 210 <i class="icon-warning" title="@Translate("Please enter a numerical value")"></i> 211 {{else error == "servererror"}} 212 <i class="icon-warning" title="@Translate("An server error occured your cart was not updated")"></i> 213 {{else}} 214 <i class="icon-warning"></i> 215 {{/if}} 216 </script> 217 218 <script append="true"> 219 require(["jquery", "standardwebshop/areas/ecom/instantsearch"], function ($, search) { 220 search.init({ 221 WaitTime: 250, 222 $SearchResultTemplate: $('#quicksearchtemplate'), 223 $SearchInput: $('#searchTerm'), 224 $ResultContainer: $('#search-result-container'), 225 $ResultLoadingTemplate: $('#quicksearchloadingtemplate'), 226 $NoQueryTemplate: $('#noquerytemplate'), 227 $FailedSearchTemplate: $('#failedsearchtemplate'), 228 $CollapseContainer: $('#search-result-foldout'), 229 $NoResulsTemplate: $('#noresultstemplate'), 230 $SearchContainer: $('#instantsearch'), 231 LinkToSearchResults: "/default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("search")", 232 PostPageId: "@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("instant-search")", 233 $searchBtn: $('.js-search-btn') 234 }); 235 }); 236 </script> 237 </div> 238 } 239 else 240 { 241 <text>@using NORRIQ.Common8.Razor; 242 @{ 243 var searchLabel = Translate("Search products"); 244 var searchResultPageId = NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("search"); 245 var searchQuery = @System.Web.HttpContext.Current.Request.QueryString["ecomQuery"]; 246 } 247 248 <div class="form-search" id="instantsearch"> 249 <form class="form form-search-form" id="search-form" action="/Default.aspx" method="get"> 250 <input type="hidden" value="@searchQuery" id="searchstring"> 251 <input type="hidden" name="ID" value="@searchResultPageId" /> 252 <label for="searchTerm" class="sr-only"> 253 @searchLabel 254 </label> 255 <div class="input-group"> 256 <input type="search" class="form-control" id="searchTerm" name="eComQuery" placeholder="@searchLabel" autocomplete="off" data-tabindex="0" value="@searchQuery" /> 257 <span class="input-group-btn"> 258 <button type="submit" id="instantSearchBtn" class="btn btn-primary js-search-btn"> 259 <i id="instantSearchIcon" class="icon-search" aria-hidden="true"></i><span class="sr-only">@Translate("Search")</span> 260 </button> 261 </span> 262 </div> 263 </form> 264 <div class="form-search-collapse collapse" id="search-result-foldout"> 265 <div class="form-search-result" id="search-result-container"></div> 266 </div> 267 </div> 268 269 270 <script type="text/x-jsrender" id="quicksearchtemplate"> 271 272 <table class="table table-condensed productlist-table"> 273 <tbody> 274 {{for Products}} 275 <tr data-product-id="{{:Id}}" 276 data-product-key='{{:AutoAddProductKey}}' 277 data-product-language-id="{{:LanguageId}}"> 278 @if (Pageview.Security.UserLoggedIn) 279 { 280 <td class="productlist-table-thumb text-center" width="70"> 281 <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> 282 </td> 283 <td class="productlist-table-product"> 284 <a href="{{:Link}}" class="productlist-table-name"> 285 {{:Name}} 286 </a> 287 <div class="clearfix"> 288 <div class="pull-left text-small"> 289 @Translate("Product Number"): {{:Number}}<br /> 290 @Translate("Price"): {{:UnitPrice}} 291 </div> 292 <div class="productlist-table-quantity pull-right"> 293 <div class="input-group"> 294 <input type="text" 295 class="form-control qty-input text-center js-qs-qty-input" 296 value="{{:QtyInBasket}}" 297 onclick="this.focus(); this.select();" 298 data-tabindex="{{:#index + 1}}" /> 299 <span class="input-group-addon qty-input-user-feedback js-qs-qty-input-feedback"> 300 {{if QtyInBasket > 0}} 301 <i class="icon-added"></i> 302 {{else}} 303 <i class="icon-minicart"></i> 304 {{/if}} 305 </span> 306 </div> 307 </div> 308 </div> 309 </td> 310 } 311 else 312 { 313 <td class="productlist-table-thumb text-center" width="70"> 314 <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> 315 </td> 316 <td class="productlist-table-product"> 317 <a href="{{:Link}}" class="productlist-table-name"> 318 {{:Name}} 319 </a> 320 </td> 321 } 322 </tr> 323 {{/for}} 324 </tbody> 325 </table> 326 {{if MoreResults}} 327 <a href="{{:LinkToFullResults}}" class="btn btn-primary btn-sm">@Translate("Show all results") ({{:NumberOfResults}})</a> 328 {{/if}} 329 </script> 330 <script type="text/x-jsrender" id="quicksearchloadingtemplate"> 331 <p class="product-search-label"> 332 <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Searching") 333 </p> 334 </script> 335 <script type="text/x-jsrender" id="noquerytemplate"> 336 <p class="product-search-label"><i class="icon-keyboard" aria-hidden="true"></i> @Translate("Start typing to search")</p> 337 </script> 338 <script type="text/x-jsrender" id="failedsearchtemplate"> 339 <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("An error occured")</p> 340 </script> 341 <script type="text/x-jsrender" id="noresultstemplate"> 342 <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("Search found no products")</p> 343 </script> 344 345 <script type="text/x-jsrender" id="qsautoaddfeedbackloading"> 346 <i class="icon-async icon-pulse"></i> 347 </script> 348 <script type="text/x-jsrender" id="qsautoaddfeedbacksuccess"> 349 <i class="icon-added" title="@Translate("Product added to cart")"></i> 350 </script> 351 <script type="text/x-jsrender" id="qsautoaddfeedbackerror"> 352 {{if error == "badinput"}} 353 <i class="icon-warning" title="@Translate("Please enter a numerical value")"></i> 354 {{else error == "servererror"}} 355 <i class="icon-warning" title="@Translate("An server error occured your cart was not updated")"></i> 356 {{else}} 357 <i class="icon-warning"></i> 358 {{/if}} 359 </script> 360 361 <script append="true"> 362 require(["jquery", "standardwebshop/areas/ecom/instantsearch"], function ($, search) { 363 search.init({ 364 WaitTime: 250, 365 $SearchResultTemplate: $('#quicksearchtemplate'), 366 $SearchInput: $('#searchTerm'), 367 $ResultContainer: $('#search-result-container'), 368 $ResultLoadingTemplate: $('#quicksearchloadingtemplate'), 369 $NoQueryTemplate: $('#noquerytemplate'), 370 $FailedSearchTemplate: $('#failedsearchtemplate'), 371 $CollapseContainer: $('#search-result-foldout'), 372 $NoResulsTemplate: $('#noresultstemplate'), 373 $SearchContainer: $('#instantsearch'), 374 LinkToSearchResults: "/default.aspx?ID=@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("search")", 375 PostPageId: "@NORRIQ.Common8.Razor.Navigation.GetPageIdByNavigationTag("instant-search")", 376 $searchBtn: $('.js-search-btn') 377 }); 378 }); 379 </script></text> 380 } 381 </li> 382 383 @*DESIGN: extra icons, if needed *@ 384 @*@if (Pageview.Security.UserLoggedIn && Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop) 385 { 386 <li class="dropdown-icon"> 387 <a href='@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("favorites")'> 388 <i class="icon-favorite-added" aria-hidden="true"></i> 389 <span class="dropdown-label">@Translate("Favorites")</span> 390 </a> 391 </li> 392 <li class="dropdown-icon"> 393 <a href='@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("reorder")'> 394 <i class="icon-tasks" aria-hidden="true"></i> 395 <span class="dropdown-label">@Translate("Reorder")</span> 396 </a> 397 </li> 398 }*@ 399 400 <li class="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop ? "dropdown dropdown-hoverXX" : "dropdown") dropdown-icon"> 401 <a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 402 <i class="icon-user" aria-hidden="true"></i> 403 <span class="dropdown-label"> 404 @if (Pageview.Security.UserLoggedIn) 405 { 406 @Translate("Account") 407 } 408 else 409 { 410 @Translate("Sign in") 411 } 412 </span> 413 </a> 414 @if (Pageview.Security.UserLoggedIn) 415 { 416 <ul class="dropdown-menu"> 417 @RenderNavigation(new { Template = "navbar-nav-customer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 }) 418 <li> 419 <a href="/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)"> 420 <i class="icon-chevron-left" aria-hidden="true"></i> 421 @Translate("Sign out") 422 </a> 423 </li> 424 </ul> 425 } 426 else 427 { 428 <div class="dropdown-menu"> 429 @using NORRIQ.Common8.Razor; 430 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" action="@(System.Web.HttpContext.Current.Request.Url.PathAndQuery)"> 431 <input type="hidden" name="pid" value="@Pageview.Page.ID" /> 432 <div class="form-group"> 433 <label for="Username">@Translate("Username")</label> 434 <input id="Username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 435 </div> 436 <div class="form-group"> 437 <label for="Password">@Translate("Password")</label> 438 <input id="Password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 439 </div> 440 <div class="form-group"> 441 <div id="loginFeedback"></div> 442 <button type="submit" role="button" class="btn btn-primary btn-block" id="loginBtn"> 443 @Translate("Sign in") 444 </button> 445 </div> 446 <ul class="form-login-links"> 447 <li> 448 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("forgot-password")">@Translate("Forgot password")</a> 449 </li> 450 <li> 451 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("new-user")">@Translate("Register user")</a> 452 </li> 453 </ul> 454 </form> 455 <script id="loginBtnDefaultTemplate" type="text/x-jsrender"> 456 @Translate("Sign in") 457 </script> 458 <script id="loginBtnLoggingInTemplate" type="text/x-jsrender"> 459 <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in") 460 </script> 461 <script id="loginLoadingTemplate" type="text/x-jsrender"> 462 <p class="user-login-loading"><i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in")</p> 463 </script> 464 <script id="loginErrorTemplate" type="text/x-jsrender"> 465 <p class="user-login-error">@Translate("An error occured!")</p> 466 </script> 467 <script id="loginBadLoginInfoTemplate" type="text/x-jsrender"> 468 <p class="user-login-error">@Translate("Username or password is incorrect!")</p> 469 </script> 470 </div> 471 } 472 </li> 473 <li class="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop && !isCartEmpty ? "dropdown dropdown-hoverXX" : "dropdown") dropdown-icon" id="cart-information"> 474 @{ 475 double quantity = 0; 476 var price = new PriceInfo(); 477 var emptyCart = Translate("Your cart is empty", "Your cart is empty"); 478 var dropdown = string.Format("title=\"{0}\"", emptyCart); 479 480 if (!isCartEmpty) 481 { 482 quantity = Dynamicweb.Ecommerce.Common.Context.Cart.OrderLines.Where(ol => ol.GetOrderLineType() == OrderLineType.Product).Sum(s => s.Quantity); 483 price = Dynamicweb.Ecommerce.Common.Context.Cart.Price; 484 dropdown = "class=\"dropdown-toggle dropdown-minicart\" data-toggle=\"dropdown\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\""; 485 } 486 } 487 <a href="javascript:void(0)" @dropdown> 488 <i class="icon-minicart" aria-hidden="true"></i> 489 <span class="dropdown-label">@Translate("Cart", "Cart")</span> 490 @if (!isCartEmpty && Pageview.Security.UserLoggedIn || !isCartEmpty) 491 { 492 <span class="dropdown-qty">@quantity</span> 493 } 494 </a> 495 @if (!isCartEmpty && Pageview.Security.UserLoggedIn || !isCartEmpty) 496 { 497 <div class="dropdown-menu"> 498 <table class="table table-mini"> 499 <tr> 500 <td class="text-left">@Translate("Purchase", "Purchase"): @quantity</td> 501 <td class="text-right"> 502 <span class="small">@price.Currency.Symbol</span> 503 <strong>@price.PriceWithoutVATFormattedNoSymbol</strong> 504 </td> 505 </tr> 506 <tr> 507 <td colspan="2" class="text-right"><i>@Translate("Prices without VAT", "Prices without VAT")</i></td> 508 </tr> 509 </table> 510 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("cart")" class="btn btn-primary btn-block">@Translate("Show cart", "Show cart")</a> 511 </div> 512 } 513 </li> 514 <li class="dropdown dropdown-icon dropdown-mobile"> 515 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 516 <i class="icon-hamburger"></i> 517 <span class="dropdown-label">Menu</span> 518 </a> 519 @RenderNavigation(new { Template = "navbar-nav-dropdown.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 }) 520 </li> 521 </ul> 522 </div> 523 </header> 524 <script type="text/x-jsrender" id="cart-information-template-show"> 525 <a href="javascript:void(0) " class="dropdown-toggle dropdown-minicart" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 526 <i class="icon-minicart" aria-hidden="true"></i> 527 <span class="dropdown-label">@Translate("Cart", "Cart")</span> 528 <span class="dropdown-qty">{{:Quantity}}</span> 529 </a> 530 <div class="dropdown-menu"> 531 <table class="table table-mini"> 532 <tr> 533 <td class="text-left">@Translate("Purchase", "Purchase"): {{:Quantity}}</td> 534 <td class="text-right"><strong>{{:Price.PriceWithoutVATFormattedNoSymbol}}</strong></td> 535 </tr> 536 <tr> 537 <td colspan="2" class="text-right"><i>@Translate("Prices without VAT", "Prices without VAT")</i></td> 538 </tr> 539 </table> 540 <a href="@NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("cart")" class="btn btn-primary btn-block">@Translate("Show cart", "Show cart")</a> 541 </div> 542 </script> 543 <script type="text/x-jsrender" id="cart-information-template-empty"> 544 <a href="javascript:void(0) " class="dropdown-toggle dropdown-minicart" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> 545 <span class="dropdown-item"> 546 <i class="icon-minicart" aria-hidden="true"></i> 547 <span class="dropdown-label sr-only">@Translate("Cart", "Cart")</span> 548 </span> 549 </a> 550 <div class="dropdown-menu"> 551 <p>@Translate("Your cart is empty", "Your cart is empty")</p> 552 </div> 553 </script> 554 <nav class="navbar navbar-inverse navbar-mixed"> 555 <div class="container"> 556 @RenderSnippet("EcomNav") 557 @RenderNavigation(new { Template = "navbar-nav-pages.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 }) 558 </div> 559 </nav> 560 @using Dynamicweb.Ecommerce.Products 561 @using Dynamicweb.Frontend; 562 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 563 564 @Title("Standad Page") 565 @Description("Page Template") 566 567 @{ 568 var ecomquery = @System.Web.HttpContext.Current.Request.QueryString["ecomQuery"]; 569 var prodid = @System.Web.HttpContext.Current.Request.QueryString["productid"]; 570 var groupid = @System.Web.HttpContext.Current.Request.QueryString["groupid"]; 571 } 572 573 @if (!Pageview.IsCurrentUserAllowed && !Pageview.Security.UserLoggedIn) 574 { 575 <main data-page-type="protected"> 576 <div class="container"> 577 <h1 class="title-styled" data-align="center"> 578 @Model.Area.Item.GetString("RestrictedTitle") 579 </h1> 580 <div class="row-flex"> 581 @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("NewUserText"))) 582 { 583 <div class="col-xs-12 col-sm-6 col-md-5 col-md-offset-1" data-display="flex"> 584 <div data-align="left" data-content-border="boxed" data-content-type="box"> 585 @Model.Area.Item.GetString("LoginText") 586 @using NORRIQ.Common8.Razor; 587 @{ 588 var ResetPassword = NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("forgot-password"); 589 } 590 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" action="@(System.Web.HttpContext.Current.Request.Url.PathAndQuery)"> 591 <div class="form-group"> 592 <label for="Username">@Translate("Username")</label> 593 <input id="Username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 594 </div> 595 <div class="form-group"> 596 <label for="Password">@Translate("Password")</label> 597 <input id="Password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 598 </div> 599 <div id="loginFeedback"></div> 600 601 <a href="@ResetPassword" class="forgot-password">@Translate("Forgot password")</a> 602 603 <button type="submit" role="button" class="btn btn-primary" id="loginBtn" data-float="right"> 604 @Translate("Sign in") 605 </button> 606 </form> 607 <script id="loginBtnDefaultTemplate" type="text/x-jsrender"> 608 @Translate("Sign in") 609 </script> 610 <script id="loginBtnLoggingInTemplate" type="text/x-jsrender"> 611 <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in") 612 </script> 613 <script id="loginLoadingTemplate" type="text/x-jsrender"> 614 <p class="user-login-loading"><i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in")</p> 615 </script> 616 <script id="loginErrorTemplate" type="text/x-jsrender"> 617 <p class="user-login-error">@Translate("An error occured!")</p> 618 </script> 619 <script id="loginBadLoginInfoTemplate" type="text/x-jsrender"> 620 <p class="user-login-error">@Translate("Username or password is incorrect!")</p> 621 </script> 622 </div> 623 </div> 624 <div class="col-xs-12 col-sm-6 col-md-5" data-display="flex"> 625 <div data-align="left" data-content-border="boxed" data-content-type="box"> 626 @Model.Area.Item.GetString("NewUserText") 627 </div> 628 </div> 629 } 630 else 631 { 632 <div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4" data-display="flex"> 633 <div data-align="left" data-content-border="boxed" data-content-type="box"> 634 @Model.Area.Item.GetString("LoginText") 635 @using NORRIQ.Common8.Razor; 636 @{ 637 var ResetPassword = NORRIQ.Common8.Razor.Navigation.GetUrlByNavigationTag("forgot-password"); 638 } 639 <form name="ExtUserForm" id="loginForm" method="post" class="form" role="form" action="@(System.Web.HttpContext.Current.Request.Url.PathAndQuery)"> 640 <div class="form-group"> 641 <label for="Username">@Translate("Username")</label> 642 <input id="Username" name="Username" type="text" value="" class="form-control" autocomplete="off"> 643 </div> 644 <div class="form-group"> 645 <label for="Password">@Translate("Password")</label> 646 <input id="Password" name="Password" type="password" value="" class="form-control" autocomplete="off"> 647 </div> 648 <div id="loginFeedback"></div> 649 650 <a href="@ResetPassword" class="forgot-password">@Translate("Forgot password")</a> 651 652 <button type="submit" role="button" class="btn btn-primary" id="loginBtn" data-float="right"> 653 @Translate("Sign in") 654 </button> 655 </form> 656 <script id="loginBtnDefaultTemplate" type="text/x-jsrender"> 657 @Translate("Sign in") 658 </script> 659 <script id="loginBtnLoggingInTemplate" type="text/x-jsrender"> 660 <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in") 661 </script> 662 <script id="loginLoadingTemplate" type="text/x-jsrender"> 663 <p class="user-login-loading"><i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in")</p> 664 </script> 665 <script id="loginErrorTemplate" type="text/x-jsrender"> 666 <p class="user-login-error">@Translate("An error occured!")</p> 667 </script> 668 <script id="loginBadLoginInfoTemplate" type="text/x-jsrender"> 669 <p class="user-login-error">@Translate("Username or password is incorrect!")</p> 670 </script> 671 </div> 672 </div> 673 } 674 </div> 675 </div> 676 </main> 677 } 678 else 679 { 680 //Model.Item is NULL if user is NOT allowed to content. 681 682 var image = Model.Item.GetFile("PageImage"); 683 //var ImageHeight = Model.Item.GetString("ImageHeight"); 684 var ImageHeight = Model.Item.GetValue<ListViewModel>("ImageHeight").SelectedValue; 685 var PageText = Model.Item.GetString("Text"); 686 var PageType = Model.Item.GetValue<ListViewModel>("PageType").SelectedValue; 687 // If Password is enabled on page PageType is empty so set it to default 688 if (string.IsNullOrEmpty(PageType)) 689 { 690 PageType = "default"; 691 } 692 693 694 if (image != null) 695 { 696 <div class="pageimage" style="background-image:url(@image.Path);height:@ImageHeight"></div> 697 } 698 @RenderBreadcrumb() 699 <main class="page-content" data-page-type="@PageType"> 700 @if (PageType == "default") 701 { 702 <div class="container"> 703 <div class="row-flex"> 704 <div class="col-xs-12 col-sm-12 col-md-3" data-content="sidebar" id="sidebar"> 705 @RenderNavigation() 706 @RenderSidebar() 707 </div> 708 <div class="col-xs-12 col-sm-12 col-md-9 pull-right"> 709 @RenderHeader() 710 @RenderPageText() 711 @RenderPrimary() 712 @RenderSecondary() 713 @RenderTertiary() 714 </div> 715 </div> 716 </div> 717 } 718 else if (PageType == "ecom") 719 { 720 <div class="container"> 721 @RenderPageText() 722 @RenderPrimary() 723 @RenderSecondary() 724 @RenderTertiary() 725 @RenderSidebar() 726 </div> 727 } 728 else if (PageType == "boxed" || PageType == "cart" || PageType == "frontpage") 729 { 730 <div class="container"> 731 @RenderHeader() 732 @RenderPageText() 733 @RenderPrimary() 734 @RenderSecondary() 735 @RenderTertiary() 736 @RenderSidebar() 737 </div> 738 } 739 </main> 740 } 741 @* Default content for pages *@ 742 @helper RenderPrimary() 743 { 744 if (!String.IsNullOrEmpty(Model.Placeholder("Primary"))) 745 { 746 <div class="row-flex"> 747 @Model.Placeholder("Primary", "Content", "unwrap:true;default:true") 748 </div> 749 } 750 } 751 @helper RenderSecondary() 752 { 753 if (!String.IsNullOrEmpty(Model.Placeholder("Secondary"))) 754 { 755 <div class="row-flex"> 756 @Model.Placeholder("Secondary", "Content", "unwrap:true") 757 </div> 758 } 759 } 760 @helper RenderTertiary() 761 { 762 if (!String.IsNullOrEmpty(Model.Placeholder("Tertiary"))) 763 { 764 <div class="row-flex"> 765 @Model.Placeholder("Tertiary", "Content", "unwrap:true") 766 </div> 767 } 768 } 769 @helper RenderSidebar() 770 { 771 if (!String.IsNullOrEmpty(Model.Placeholder("Sidebar"))) 772 { 773 <div class="row-flex"> 774 @Model.Placeholder("Sidebar", "Sidebar", "unwrap:true") 775 </div> 776 } 777 } 778 @helper RenderNavigation() 779 { 780 <nav id="desktop-menu"> 781 @RenderNavigation(new { Template = "nav-sidebar.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 }) 782 </nav> 783 } 784 @helper RenderBreadcrumb() 785 { 786 // Model.PropertyItem may sometimes be null, thus we must check for it. 787 if (Model.PropertyItem != null) 788 { 789 if (!Model.PropertyItem.GetBoolean("HideBreadcrumb")) 790 { 791 <nav class="clearfix breadcrumb-container"> 792 <div class="container"> 793 794 <ol class="breadcrumb"> 795 @RenderSnippet("BreadCrumb") 796 @{ 797 var productId = System.Web.HttpContext.Current.Request.QueryString["ProductID"]; 798 } 799 @*@if (productId != null) 800 { 801 var product = Product.GetProductById(productId); 802 if (product != null) 803 { 804 <li><span class="disabled">@(product.Name)</span></li> 805 } 806 }*@ 807 </ol> 808 809 </div> 810 </nav> 811 } 812 } 813 } 814 @helper RenderHeader() 815 { 816 if (Model.Item.GetString("TitleStyle") != "hidden") 817 { 818 var TitleStyle = Model.Item.GetValue<ListViewModel>("TitleStyle").SelectedValue; 819 <header> 820 <h1 class="@TitleStyle"> 821 @Model.Item.GetString("Title") 822 </h1> 823 </header> 824 } 825 } 826 @helper RenderPageText() 827 { 828 if (!String.IsNullOrEmpty(Model.Item.GetString("Text"))) 829 { 830 <div class="pagetext"> 831 @Model.Item.GetString("Text") 832 @if (!String.IsNullOrEmpty(Model.Item.GetString("Link")) && !String.IsNullOrEmpty(Model.Item.GetString("LinkText"))) 833 { 834 <p> 835 <a class="btn btn-primary" href="@Model.Item.GetString("Link")"> 836 @Model.Item.GetString("LinkText") 837 </a> 838 </p> 839 } 840 <hr /> 841 </div> 842 } 843 } 844 @RenderItemList(new 845 { 846 ItemType = "Footer", 847 ListSourceType = "SelfArea", 848 ItemFieldsList = "*", 849 IncludeParagraphItems = true, 850 IncludeAllChildItems = true, 851 ListOrderBy = "Sort", 852 ListTemplate = "ItemPublisher/List/Footer.cshtml", 853 ListPageSize = "100", 854 }) 855 <script append="true"> 856 require(['standardwebshop/areas/user/login'], 857 function(AsyncLogin) { 858 var login = new AsyncLogin({ 859 $loginForm: $("#loginForm"), 860 $username: $("#Username"), 861 $password: $("#Password"), 862 $pageId: '@Pageview.Page.ID' 863 }); 864 865 login.init(); 866 }); 867 </script> 868 @if (!NORRIQ.Common8.Razor.TimestampSource.LoadMinifiedResources()) 869 { 870 <script src="/scripts/require.js"></script> 871 @NORRIQ.Common8.Razor.TimestampSource.GetJavaScriptWithTimestamp("/scripts/standardwebshop/main.js") 872 } 873 else 874 { 875 @NORRIQ.Common8.Razor.TimestampSource.GetJavaScriptWithTimestamp("/scripts/standardwebshop/main.min.js") 876 } 877 <script> 878 //Loads master along with the localized validation messages (read from the template tag "lang"). 879 880 @* Loading the datepicker localizations via the aliasses in main.js failed and caused them to be loaded from the original files instead of from the minified file. *@ 881 require(['jQueryUI.localization/jquery.ui.datepicker-en-GB', 'jQueryUI.localization/jquery.ui.datepicker-da'], function () { }); 882 require(['standardwebshop/areas/master'], function (master) { master.init(); }); 883 884 @* Fool the minifier to include all validation localizations, but only trigger the one actually needed. *@ 885 require([], 886 function () { 887 @if (string.Equals(Pageview.Area.Culture.Split('-').First(), "da", StringComparison.OrdinalIgnoreCase)) 888 { 889 <text> 890 require(["jquery.validation-1.13.1/localization/messages_da"], function () { }); 891 </text> 892 } else if (string.Equals(Pageview.Area.Culture.Split('-').First(), "en", StringComparison.OrdinalIgnoreCase)) 893 { 894 <text> 895 require(["jquery.validation-1.13.1/localization/messages_en"], function () { }); 896 </text> 897 } 898 }); 899 </script> 900 901 @if (Model.Area.Item.GetList("Tracking_Provider").SelectedValue == "GA") 902 { 903 if (!String.IsNullOrEmpty(Model.Area.Item.GetString("Google"))) 904 { 905 <script> 906 (function(i, s, o, g, r, a, m) { 907 i['GoogleAnalyticsObject'] = r; 908 i[r] = i[r] || 909 function() { 910 (i[r].q = i[r].q || []).push(arguments) 911 }, i[r].l = 1 * new Date(); 912 a = s.createElement(o), 913 m = s.getElementsByTagName(o)[0]; 914 a.async = 1; 915 a.src = g; 916 m.parentNode.insertBefore(a, m) 917 })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 918 919 ga('create', '@Model.Area.Item.GetString("Google")', 'auto'); 920 ga('send', 'pageview'); 921 </script> 922 } 923 } 924 925 <script append="replace"></script> 926 <div class="modal fade" tabindex="-1" role="dialog" id="languages"> 927 <div class="modal-dialog modal-sm" role="document"> 928 <div class="modal-content"> 929 <div class="modal-header"> 930 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 931 <h4 class="modal-title">@Translate("Change language", "Change language")</h4> 932 </div> 933 <div class="modal-body"> 934 @if (Model.Languages.Any()) 935 { 936 var areaService = NLWI.Core.Factory.ObjectFactory.GetInstance<Dynamicweb.Content.AreaService>(); 937 938 foreach (var lang in Model.Languages) 939 { 940 var area = areaService.GetArea(lang.ID); 941 var Domain = lang.PrimaryDomain; 942 if (string.IsNullOrEmpty(Domain)) 943 { 944 Domain = area.Domain.Split(new char[0]).First(); 945 } 946 947 var Flag = "flag_" + lang.Culture.Split('-').Last() + ".png"; 948 949 <a href='/@area.Name.ToLower()?LanguageID=@area.EcomLanguageId'> 950 <img src="/Admin/Images/Flags/@Flag" alt="@lang.Culture.Split('-').Last()-Flag" class="img-responsive lang-select" /> 951 </a> 952 @*<a href='//@Domain'> 953 <img src="/Admin/Images/Flags/@Flag" alt="@lang.Culture.Split('-').Last()-Flag" class="img-responsive lang-select" /> 954 </a>*@ 955 } 956 } 957 </div> 958 </div> 959 </div> 960 </div> 961 @*DW Hack, because ecom nav need to be rendered after ContentPlaceHolder() when using the new viewmodels WTF*@ 962 @SnippetStart("EcomNav") 963 @RenderNavigation(new {Template = "navbar-nav-ecom-mega.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3}) 964 @SnippetEnd("EcomNav") 965 @SnippetStart("BreadCrumb") 966 @RenderNavigation(new {Template = "breadcrumb.xslt", StartLevel = 1, EndLevel = 7}) 967 @SnippetEnd("BreadCrumb") 968 </body> 969 </html>