Error executing template "Designs/CapoStarter/eCom/Product/M_Product_global.cshtml"
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at App_Code.SimilarProducts.GetSimilarProducts(String groupId, String productId, Boolean isGlobal)
   at CompiledRazorTemplates.Dynamic.RazorEngine_290ab7bbe31b4e9fa09cd0c437b64fbc.Execute() in D:\dynamicweb.net\Solutions\Capo\sundqvist.cloud.dynamicweb-cms.com\files\Templates\Designs\CapoStarter\eCom\Product\M_Product_global.cshtml:line 2089
   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()

1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using System.Globalization 3 @using App_Code 4 @using Dynamicweb.Extensibility 5 @using Dynamicweb.Content 6 7 @{ 8 9 var loggedIn = HelperClass.IsLoggedIn(); 10 var currrencySymbol = GetGlobalValue("Global:eCommerce.Currency.Symbol"); 11 var culture = GetGlobalValue("Global:Area.Culture.Name"); 12 13 var buttonClass = "consument"; 14 15 var hideCart = Convert.ToBoolean(Pageview.Area.Item["Hide_Cart"]); 16 17 int buyHerePageID = GetPageIdByNavigationTag("BuyHere"); 18 19 decimal priceWithVat = Convert.ToDecimal(!string.IsNullOrEmpty(GetString("Ecom:Product.Price.PriceWithVAT")) ? GetString("Ecom:Product.Price.PriceWithVAT") : "0"); 20 string priceFormattedWithVat = priceWithVat.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 21 22 //This is needed to be able to use the same Combined product template on all sites 23 bool NorwegianSite = false; 24 25 // Consumer old price - for campaign price graphics 26 double ConsumerOldPrice = GetDouble("Ecom:Product:Field.OldProductPrice"); 27 ConsumerOldPrice = ConsumerOldPrice * 1.25; 28 string ConsumerOldPriceFormatted = ConsumerOldPrice.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 29 30 } 31 32 33 <section class="content productpage"> 34 <div class="div-max1170-centered"> 35 <div class="productcard"> 36 <div class="row"> 37 <div class="go-back-button"> 38 <button class="btn" onclick="Misc.goBack()">@Translate("productBackButton", "Tillbaka")</button> 39 </div> 40 </div> 41 42 <div class="row"> 43 <div class="col-sm-5 col-sm-offset-1"> 44 <!-- Left Column --> 45 <div class="productimages-area"> 46 <div class="productimages-wrapp"> 47 @{ 48 bool imgControl = false; 49 bool imgFunctions = false; 50 string disabledState = ""; 51 } 52 53 <div class="carousel slide" id="carousel-productimages"> 54 <!-- Wrapper for slides --> 55 <div class="carousel-inner"> 56 @{ 57 var counter = 0; 58 59 string prodnumber = GetString("Ecom:Product.Number").Replace("/", "-"); 60 61 var curprodpath = "/Files/Images/ProductImages/" + prodnumber; 62 var imglist = new List<string>(); 63 string[] imgfiles = new string[0]; 64 65 var relatedImages1 = GetString("Ecom:Product:Field.relatedImages1.FullPath"); 66 var relatedImages2 = GetString("Ecom:Product:Field.relatedImages2.FullPath"); 67 var relatedImages3 = GetString("Ecom:Product:Field.relatedImages3.FullPath"); 68 var relatedImages4 = GetString("Ecom:Product:Field.relatedImages4.FullPath"); 69 var relatedImages5 = GetString("Ecom:Product:Field.relatedImages5.FullPath"); 70 try 71 { 72 imgfiles = System.IO.Directory.GetFiles(System.Web.HttpContext.Current.Server.MapPath(curprodpath)); 73 74 } 75 catch 76 { 77 <div class="item active"> 78 <img src="/Files/Images/NoImageAvailable.png" alt="" class="img-responsive" /> 79 </div> 80 } 81 string[] fieldRelatedImages = { @relatedImages1, @relatedImages2, @relatedImages3, @relatedImages4, @relatedImages5 }; 82 83 //Check that first found image has list-image pattern productnumber_1.jpg 84 if (!imgfiles.Any(x => x.Contains(prodnumber + "_1.jpg"))) 85 { 86 87 <div class="item active"> 88 <img src="/Files/Images/NoImageAvailable.png" alt="" class="img-responsive" /> 89 </div> 90 } 91 else 92 { 93 94 for (int i = 0; i < imgfiles.Length; i++) 95 { 96 if (!imgfiles[i].EndsWith(".jpg")) { continue; } 97 98 string imgname = System.IO.Path.GetFileName(imgfiles[i]); 99 string fullpath = curprodpath + "/" + imgname; 100 imglist.Add(fullpath); 101 102 var active = (counter == 0 ? "active" : ""); 103 <div data-slide-number="@counter" class="item @active" data-hires="/admin/public/getimage.ashx?Image=@fullpath&Format=jpg&Compression=85&width=1900&height=1200&Crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png"> 104 <img src="/admin/public/getimage.ashx?Image=@fullpath&Format=jpg&Compression=85&width=400&height=400&Crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png" alt="" title="@imgname" class="img-responsive panzoom-elements" data-original="@fullpath" /> 105 </div> 106 107 counter = counter + 1; 108 109 } 110 111 foreach (var url in fieldRelatedImages) 112 { 113 if (!string.IsNullOrEmpty(url)) 114 { 115 <div data-slide-number="@counter" class="item " data-hires="/admin/public/getimage.ashx?Image=@url&Format=jpg&Compression=85&width=1900&height=1200&Crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png"> 116 <img src="/admin/public/getimage.ashx?Image=@url&Format=jpg&Compression=85&width=400&height=400&Crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png" alt="" title="@url" class="img-responsive panzoom-elements" data-original="@url" /> 117 </div> 118 119 counter = counter + 1; 120 } 121 } 122 123 // Only show image functions if there is at least one image 124 if (counter > 0) { imgFunctions = true; } 125 126 // Only show image controls if there is at least two images 127 if (counter > 1) { imgControl = true; } 128 129 } 130 131 132 133 } 134 135 </div> 136 137 @if (imgControl) 138 { 139 <!-- Controls --> 140 <a class="left carousel-control" href="#carousel-productimages" data-slide="prev"> 141 <i class="fa fa-angle-left"></i> 142 </a> 143 <a class="right carousel-control" href="#carousel-productimages" data-slide="next"> 144 <i class="fa fa-angle-right"></i> 145 </a> 146 } 147 </div> 148 149 @if (imgFunctions) 150 { 151 <div class="img-controls text-right hidden-xs"> 152 <a href="javascript:;" id="download" title="@Translate("productImageDownloadLinkText", "Ladda ner högupplöst...")"><i class="fa fa-download"></i></a> 153 <a href="javascript:;" id="y-zoom" title="@Translate("productImageEnlargeLinkText", "Förstora...")"><i class="fa fa-search-plus"></i></a> 154 </div> 155 } 156 157 158 @if (imgControl) 159 { 160 161 var counterThumbs = 0; 162 foreach (var src in imglist) 163 { 164 <div class="carousel-item col-sm-4 hidden-xs"> 165 <a id="carousel-selector-@counterThumbs"> 166 <img class="img-responsive" src="/admin/public/getimage.ashx?Image=@src&Format=jpg&Compression=80&width=100&height=70&crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png"> 167 </a> 168 </div> 169 counterThumbs = counterThumbs + 1; 170 } 171 172 <!--Start RelatedImages thumbs --> 173 foreach (var val in fieldRelatedImages) 174 { 175 var url = val; 176 if (!string.IsNullOrEmpty(url)) 177 { 178 179 <div class="carousel-item col-sm-4 hidden-xs"> 180 <a id="carousel-selector-@counterThumbs"> 181 <img class="img-responsive" src="/admin/public/getimage.ashx?Image=@url&Format=jpg&Compression=80&width=100&height=70&crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png"> 182 </a> 183 </div> 184 } 185 186 counterThumbs = counterThumbs + 1; 187 } 188 <!--End RelatedImages thumbs --> 189 190 } 191 </div> <!-- #END carousel area --> 192 <!-- YouTube banner--> 193 @{ 194 string youtubeVId = string.Empty; // string.Empty; 195 if (GetString("Ecom:Product:Field.YouTypeLink").Contains("?v=")) 196 { 197 var tempArr = GetString("Ecom:Product:Field.YouTypeLink").Split('='); 198 youtubeVId = tempArr[1]; 199 } 200 } 201 202 @if (!string.IsNullOrEmpty(youtubeVId)) 203 { 204 var videoThumb = "http://img.youtube.com/vi/" + youtubeVId + "/0.jpg"; 205 <div class="col-sm-6 col-md-4 youtube-vid hidden-xs"> 206 <div class="thumbnail display-box"> 207 <a class="y-video" data-video="@GetValue("Ecom:Product:Field.YouTypeLink")" data-toggle="modal" data-target="#videoModal"> 208 <div class="display-img img-wrapp"> 209 <div class="img-inner youtube product"> 210 <img src="@videoThumb" class="img-responsive" alt="..."> 211 </div> 212 </div> 213 </a> 214 </div> 215 </div> 216 } 217 </div> 218 </div> 219 <!-- #END Left Column --> 220 221 <div class="product-right col-sm-4 col-sm-offset-1"> 222 <!-- Right Column --> 223 <div class="row"> 224 <div class="col-sm-12 text-common"> 225 <!--Start show brand logo--> 226 227 @{ 228 229 230 var myListId = (int)Pageview.Area.Item["BrandList"]; 231 var itemList = Dynamicweb.Content.Items.ItemList.GetItemListById(myListId); 232 int count = 0; 233 var loop = itemList.Relations.Cast<Dynamicweb.Content.Items.Item>(); 234 string Link = string.Empty; 235 236 foreach (var c in loop) 237 { 238 239 string nameId = ""; 240 241 string LogoPath = String.Empty; 242 string LogoSmallPath = String.Empty; 243 string LogoUrl = String.Empty; 244 string Match = GetString("Ecom:Product:Field.productTrademark").ToLower(); 245 Link = c["Link"].ToString(); 246 247 if (c["NameID"] != null) 248 { 249 nameId = c["NameID"].ToString().ToLower(); 250 } 251 252 if (c["Image"] != null) 253 { 254 LogoPath = c["Image"].ToString(); 255 } 256 257 if (c["ImageSmall"] != null) 258 { 259 LogoSmallPath = c["ImageSmall"].ToString(); 260 261 } 262 263 if (!string.IsNullOrEmpty(LogoSmallPath)) 264 { 265 266 LogoUrl = LogoSmallPath; 267 268 } 269 270 else if (!string.IsNullOrEmpty(LogoPath)) 271 { 272 273 LogoUrl = LogoPath; 274 } 275 276 if (nameId == Match && !string.IsNullOrEmpty(LogoUrl)) 277 { 278 279 <a href="@Link" target="_self" class="logo-container" style="background-image: url('/admin/public/getimage.ashx?Image=@LogoUrl&amp;Format=jpg&amp;Compression=90&amp;height=140&amp;crop=0&amp;altFmImage_path=/Files/Images/NoImageAvailable.png'); background-position-y: bottom; " title="@nameId"></a> 280 281 count++; 282 283 } 284 if (nameId == Match && count == 0) 285 { 286 <a href="@Link" target="_self"> 287 <div class="itemBrand" style="height: 30px;padding-top: 12px">@GetString("Ecom:Product:Field.productTrademark")</div> 288 </a> 289 break; 290 } 291 292 } 293 294 } 295 296 <!--End show brand logo --> 297 298 <h1 class="Product-Title">@GetString("Ecom:Product.Name")</h1> 299 <span class="art-nr">Art. Nr: @GetValue("Ecom:Product.Number")</span> 300 @{ 301 var descr = GetString("Ecom:Product.LongDescription"); 302 303 <div class="lead"> 304 @descr 305 </div> 306 } 307 308 <div class="intro-black-collapse print-show collapse" id="viewdetails"> 309 </div> 310 311 <a class="pull-left las-mer hidden-print" data-toggle="collapse" data-target="#viewdetails">@Translate("productLongDescriptionReadMore", "Läs mer")<i class="fa fa-angle-right"></i></a> 312 </div> 313 </div> 314 315 <div class="x-print"> 316 <!-- well row --> 317 <div class="row well"> 318 <div class="col-md-12 no-padding"> 319 <div class="item-main-info"> 320 321 @{ 322 var stock = GetInteger("Ecom:Product:Field.ProductStockGlobal"); 323 324 if (stock <= 2) 325 { 326 disabledState = "disabled"; 327 } 328 329 var globalStockStatus = HelperClass.GetGlobalStockStatusByProductId(GetString("Ecom:Product.ID")); 330 331 332 var stockstatusClass = globalStockStatus.ExpectedDeliveryValue; 333 334 } 335 336 @if (!hideCart) 337 { 338 <div class="clearfix"> 339 <p> 340 <i class="fa stock-icon @stockstatusClass"></i><span>@globalStockStatus.Text</span> 341 </p> 342 </div> 343 } 344 </div> 345 346 <form class="form-inline"> 347 <div class="item-main-info"> 348 @{ 349 if (GetBoolean("Ecom:Product:Field.productCampaign") && ConsumerOldPrice > 0) 350 { 351 <div class="inline-price"> 352 <h5 class="campaign-price">@priceFormattedWithVat</h5> 353 &nbsp; 354 <h6 class="old-price">@ConsumerOldPriceFormatted</h6> 355 </div> 356 } 357 else 358 { 359 <h5>@priceFormattedWithVat</h5> 360 } 361 } 362 </div> 363 364 @if (!hideCart) 365 { 366 <div class="form-group inline @disabledState "> 367 <button id="btnBuy" 368 onclick="Cart.addToBasket(@GetValue("Ecom:Product:Page.ID"), '@GetValue("Ecom:Product.ID")', '@GetValue("Ecom:Product.Number")', this);gtag('event', 'Konsument Global - Köp');" 369 class="btn btn-default consument" type="button"> 370 @Translate("productAddToCartButtonText", "LÄGG I VARUKORG") 371 <i class="fa fa-refresh"></i> 372 </button> 373 </div> 374 } 375 else 376 { 377 <a href="/Default.aspx?ID=@buyHerePageID" class="buyHereLink"> 378 <div class="form-group inline"> 379 <button id="btnBuy" class="btn btn-default consument" type="button"> 380 @Translate("productBuyInShopButtonText", "KÖP I BUTIK") 381 </button> 382 </div> 383 </a> 384 } 385 386 <div class="form-group inline"> 387 @if (!string.IsNullOrEmpty(GetString("Ecom:Product.AddToFavorites"))) 388 { 389 string favorite = GetBoolean("Ecom:Product.IsProductInFavoriteList") ? "favorite checked" : "favorite "; 390 <a href="javascript:;" onclick="Product.addToFavorites('?CCAddToMyLists=@GetString("Ecom:Product.ID")&CCAddToListVariantID=&CCAddToListLanguageID=LANG2', this)" class="btn btn-default @favorite " type="button"></a> 391 392 } 393 </div> 394 395 </form> 396 397 @if (!hideCart && !GetBoolean("Ecom:Product:Field.productOutlet")) 398 { 399 <div style="margin-top: 3px"> 400 <a href="#" onclick="$('#findStore').modal('show'); gtag('event', 'Konsument Global - Köp i butik');"> 401 @Translate("productBuyInShopButtonText", "KÖP I BUTIK") 402 </a> 403 </div> 404 } 405 406 407 @if (!hideCart && stock <= 2) 408 { 409 410 <div id="priceDetails" class=""> <p class="outOfstocInfoText">@Translate("productButtonOutOfStockContactUS", "Varan är slut på lager - vänligen kontakta oss för mer information")</p></div> 411 412 } 413 414 </div> 415 <div style="margin-bottom: 15px;" class="visible-sm visible-xs clearfix"></div> 416 </div> 417 </div> 418 </div> 419 </div> 420 421 <div class="row tabs"> 422 423 <div class="col-md-10 tab-list"> 424 425 <ul class="nav nav-pills"> 426 427 <li class="active"><a data-toggle="tab" href="#product-description">@Translate("productTabHeaderDescription", "Beskrivning")</a></li> 428 429 <li><a data-toggle="tab" href="#product-tecnical">@Translate("productTabHeaderTechInfo", "Teknisk info")</a></li> 430 431 @if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.guaranteeText"))) 432 { 433 <li><a data-toggle="tab" href="#product-warranty">@Translate("productTabHeaderWarrenty", "Garanti")</a></li> 434 } 435 @if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.CareInstructions1")) || !string.IsNullOrEmpty(GetString("Ecom:Product:Field.CareInstructions2")) || !string.IsNullOrEmpty(GetString("Ecom:Product:Field.CareInstructions3"))) 436 { 437 <li><a data-toggle="tab" href="#product-care">@Translate("productTabHeaderCare", "Skötsel")</a></li> 438 } 439 @{ 440 try 441 { 442 string[] docfiles = System.IO.Directory.GetFiles(System.Web.HttpContext.Current.Server.MapPath(curprodpath + "/docs")); 443 444 if (docfiles.Length > 0) 445 { 446 <li><a data-toggle="tab" href="#product-documents">@Translate("productTabHeaderDocs", "Dokument")</a></li> 447 448 } 449 else 450 { 451 foreach (LoopItem i in GetLoop("Details")) 452 { 453 if (!string.IsNullOrEmpty(@i.GetString("Ecom:Product:Detail.Image.Clean"))) 454 { 455 <li><a data-toggle="tab" href="#product-documents">@Translate("productTabHeaderDocs", "Dokument")</a></li> 456 break; 457 } 458 } 459 } 460 } 461 catch 462 { 463 foreach (LoopItem i in GetLoop("Details")) 464 { 465 if (!string.IsNullOrEmpty(@i.GetString("Ecom:Product:Detail.Image.Clean"))) 466 { 467 468 <li><a data-toggle="tab" href="#product-documents">@Translate("productTabHeaderDocs", "Dokument")</a></li> 469 break; 470 } 471 } 472 } 473 } 474 475 476 </ul> 477 478 <div class="tab-content"> 479 <div id="product-description" class="tab-pane fade in active"> 480 @GetValue("Ecom:Product:Field.DescriptionLong") 481 </div> 482 483 <div id="product-tecnical" class="tab-pane fade"> 484 485 @if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.TechInfo"))) 486 { 487 @GetValue("Ecom:Product:Field.TechInfo") 488 } 489 490 <div class="product-tecnical"> 491 492 @{ 493 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.productTrademark.Value.Clean"))) 494 { 495 496 <div class="left"><label>@Translate("productTecnicalBrand", "Varumärke")</label></div> 497 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.productTrademark.Value.Clean")</span></div> 498 499 } 500 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.productSeries.Value.Clean"))) 501 { 502 503 <div class="left"><label>@Translate("productTecnicalSeries", "Serie")</label></div> 504 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.productSeries.Value.Clean")</span></div> 505 } 506 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.ProductColor.Value.Clean"))) 507 { 508 509 <div class="left"><label>@Translate("productTecnicalColor", "Färg")</label></div> 510 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.ProductColor.Value.Clean")</span></div> 511 512 } 513 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.productMaterial.Value.Clean"))) 514 { 515 516 <div class="left"><label>@Translate("productTecnicalMaterial", "Material")</label></div> 517 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.productMaterial.Value.Clean")</span></div> 518 519 520 } 521 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.productSize.Value.Clean"))) 522 { 523 524 <div class="left"><label>@Translate("productTecnicalSize", "Storlek")</label></div> 525 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.productSize.Value.Clean")</span></div> 526 } 527 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.productsVolume.Value.Clean"))) 528 { 529 <div class="left"><label>Volym</label></div> 530 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.productsVolume.Value.Clean") &nbsp;m&sup3;</span></div> 531 532 } 533 534 if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.produktEAN.Value.Clean"))) 535 { 536 <div class="left"><label>@Translate("productTecnicalEAN", "EAN")</label></div> 537 <div class="right"><span class="tech-details-value">@GetString("Ecom:Product:Field.produktEAN.Value.Clean")</span></div> 538 539 } 540 541 } 542 </div> 543 </div> 544 545 <div id="product-warranty" class="tab-pane fade"> 546 @{ 547 string pageId; 548 int id; 549 550 var path = GetString("Ecom:Product:Field.guaranteeText"); 551 552 if (!string.IsNullOrEmpty(path)) 553 { 554 555 pageId = path.Substring(path.IndexOf('=') + 1); 556 557 if (int.TryParse(pageId, out id)) 558 { 559 // Function that renders either pageItem "General_TextEditor" content OR all content from a regular page 560 @GetPageContent(id) 561 } 562 } 563 } 564 </div> 565 566 <div id="product-care" class="tab-pane fade"> 567 @{ 568 string[] fields = { "Ecom:Product:Field.CareInstructions1", "Ecom:Product:Field.CareInstructions2", "Ecom:Product:Field.CareInstructions3" }; 569 570 foreach (var fieldName in fields) 571 { 572 path = GetString(fieldName); 573 if (!string.IsNullOrEmpty(path)) 574 { 575 576 pageId = path.Substring(path.IndexOf('=') + 1); 577 id = Int32.Parse(pageId); 578 // Function that renders either pageItem "General_TextEditor" content OR all content from a regular page 579 @GetPageContent(id) 580 } 581 } 582 } 583 </div> 584 585 <div id="product-documents" class="tab-pane fade"> 586 <div class="dokument-div"> 587 <ul> 588 @{ 589 //Documents 590 try 591 { 592 string[] docfiles = System.IO.Directory.GetFiles(System.Web.HttpContext.Current.Server.MapPath(curprodpath + "/docs")); 593 594 if (docfiles.Length > 0) 595 { 596 597 for (int i = 0; i < docfiles.Length; i++) 598 { 599 var filename = System.IO.Path.GetFileName(docfiles[i]); 600 string fullpath = curprodpath + "/docs/" + filename; 601 602 <li> 603 <a href="@fullpath" target="_blank"> 604 <i class="fa fa-file-text-o"></i> @filename 605 </a> 606 </li> 607 } 608 } 609 } 610 catch (System.Exception e) 611 { 612 613 } 614 615 foreach (LoopItem i in GetLoop("Details")) 616 { 617 // You can get the details text fields using "Ecom:Product:Detail.Text" 618 if (!string.IsNullOrEmpty(i.GetString("Ecom:Product:Detail.Image.Clean"))) 619 { 620 string fullpath = i.GetString("Ecom:Product:Detail.Image.Clean"); 621 var filename = fullpath.Split('/').Last(); 622 <li> 623 <a href="@fullpath" target="_blank"> 624 <i class="fa fa-file-text-o"></i> @filename 625 </a> 626 </li> 627 } 628 } 629 } 630 </ul> 631 </div> 632 </div> 633 634 </div> <!-- #END Table --> 635 <!-- #END prod-list --> 636 </div> 637 </div> 638 639 @* MODAL CODE HAS BEEN MOVED TO \Files\Templates\Designs\CapoStarter\PageProduct.cshtml *@ 640 641 </div> 642 643 <div class="row"> 644 <div class="div-max1170-centered no-padding"> 645 @if (GetLoop("ProductRelatedGroups").Count() > 0) 646 { 647 <div class="col-md-12 prod-list"> 648 <!-- Prod-list --> 649 650 <h2 class="data-section-header">@Translate("productHeaderSimilarProducts", "Liknande produkter:")</h2> 651 <div class="row"> 652 @foreach (var relatedG in GetLoop("ProductRelatedGroups")) 653 { 654 foreach (var related in relatedG.GetLoop("RelatedProducts")) 655 { 656 657 658 <a href="@related.GetString("Ecom:Product.Link.Clean")"> 659 660 <div class="col-xs-12 col-sm-6 col-md-3"> 661 <div class="thumbnail dropdown-info"> 662 @{ 663 var imgsrc = "/admin/public/getimage.ashx?Image=/Files/Images/productImages/" + related.GetValue("Ecom:Product.Number") + "/" + related.GetValue("Ecom:Product.Number") + "_1.jpg&width=330&height=330&compression=85&Crop=5&Format=jpg&altFmImage_path=/Files/Images/NoImageAvailable.png"; 664 <div class="display-img"> 665 <img alt="@related.GetValue("Ecom:Product.Name")" src="@imgsrc" data-original="@imgsrc" class="img-responsive lazy"> 666 </div> 667 } 668 669 @if (related.GetString("Ecom:Product.MetaDescription").Length > 156) 670 { 671 @related.GetString("Ecom:Product.MetaDescription").Substring(0, 156)<text>...</text> 672 } 673 else 674 { 675 @related.GetValue("Ecom:Product.MetaDescription") 676 } 677 678 <div class="display-name"> 679 <div class="name-info"> 680 681 <div class="itemBrand">@GetValue("Ecom:Product:Field.productTrademark")</div> 682 <div class="itemName">@related.GetString("Ecom:Product.Name")</div> 683 <div class="itemNumber">Art. nr: @related.GetValue("Ecom:Product.Number")</div> 684 <div class="itemPrice" id='id_@related.GetValue("Ecom:Product.Number")'> 685 <b> 686 </b> 687 688 @if (related.GetValue("Ecom:Product.Price.Clean") != related.GetValue("Ecom:Product.ActualPrice.Clean")) 689 { 690 <span>(@related.GetValue("Ecom:Product.ActualPrice"))</span> 691 } 692 </div> 693 </div> 694 </div> 695 696 </div> 697 </div> 698 </a> 699 } 700 } 701 </div> 702 703 </div> 704 705 } 706 </div> 707 </div> 708 709 <!-- Start Flowbox Dynamic Product Flow--> 710 711 @{ 712 var enableFlowBoxScript = Convert.ToBoolean(Pageview.Area.Item["Enable_FlowboxScript"]); 713 var flowKey = Pageview.Area.Item["FlowKeyProductPage"]; 714 var locale = Pageview.Area.Item["FlowLocale"]; 715 var link = Pageview.Area.Item["FlowCarouselButtonLink"]; 716 717 var enableFlowBox = enableFlowBoxScript && !string.IsNullOrEmpty(flowKey.ToString()) && !string.IsNullOrEmpty(locale.ToString()); 718 719 if (enableFlowBox) 720 { 721 722 <div class="flow-text"> 723 <h2>@Translate("FlowboxHeaderText", "DELA DINA BILDER MED GLOBALKNIVAR")</h2> 724 <p>@Translate("FlowboxParagraphText", "Tagga #yesGlobalknivar så kanske dina bilder blir visade här.")</p> 725 </div> 726 727 <div id="js-flowbox-flow"></div> 728 729 <script> 730 window.flowbox('init', { 731 container: '#js-flowbox-flow', 732 key: '@flowKey', 733 locale: '@locale', 734 productId: '@GetValue("Ecom:Product.Number")' 735 }) 736 </script> 737 738 if (link != null) 739 { 740 <div class="button-section"> 741 <a class="inspiration-button" href="@link">@Translate("FlowboxLinkText", "FÅ MER INSPIRATION HÄR")</a> 742 </div> 743 } 744 } 745 } 746 747 748 749 <!-- End Flowbox Dynamic Product Flow--> 750 <!--Start Related catagory --> 751 <div class="row related-catagories-hide-if-empty"> 752 <div class="div-max1170-centered no-padding"> 753 <div class="col-md-12 related-categories"> 754 <h2>@Translate("productHeaderRelatedCategories", "Relaterade kategorier:")</h2> 755 <div class="form-group inline"> 756 757 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 758 759 760 @{ 761 var shopID = "SHOP1"; 762 var langID = "LANG2"; 763 var shop = new Dynamicweb.Ecommerce.Shops.Shop(shopID); 764 765 foreach (var group in shop.get_TopLevelGroups(langID)) 766 { 767 @GroupTemplate(group, 0, "", "") 768 } 769 770 } 771 772 @helper GroupTemplate(Dynamicweb.Ecommerce.Products.Group group, int level, string SubID, string Name) 773 { 774 775 776 var subID = SubID; 777 var name = Name; 778 779 780 foreach (LoopItem item in GetLoop("CustomGroupFields")) 781 { 782 783 if (!string.IsNullOrEmpty(item.GetString("related_Product_Catagories"))) 784 { 785 786 787 string[] listOfCats = item.GetString("related_Product_Catagories").Split(','); 788 789 790 for (int i = 0; i < listOfCats.Length; i++) 791 { 792 var groupId = listOfCats[i]; 793 794 groupId = groupId + "-at-SHOP1"; 795 796 if (subID == groupId) 797 { 798 799 800 <a href="Default.aspx?ID=2&GroupID=@groupId" class="btn btn-categories">@name</a> 801 } 802 803 } 804 } 805 } 806 807 if (group.Subgroups.Count > 0) 808 { 809 810 foreach (var subgroup in group.Subgroups) 811 { 812 @GroupTemplate(subgroup, level + 1, subgroup.Id, subgroup.Name) 813 814 } 815 816 } 817 818 } 819 820 821 </div> 822 </div> 823 </div> 824 </div> 825 <!--End Related catagory --> 826 <!--Start Combined products --> 827 <!--Get the no of combined products to adjust the layout --> 828 <!--if no combined products hide both combined and people also looked at--> 829 830 @{ 831 832 833 //var combinedProduct = true; 834 var headingClass = String.Empty; 835 var headingStyle = String.Empty; 836 837 //combinedProduct = GetBoolean("Ecom:Product:Field.CombinedProducts"); 838 var hasCombinedProducts = !string.IsNullOrEmpty(GetString("Ecom:Product:Field.CombinedProducts")) ? GetString("Ecom:Product:Field.CombinedProducts") : string.Empty; 839 840 841 842 843 if (hasCombinedProducts != string.Empty) 844 { 845 846 string[] getCombinedProducts = hasCombinedProducts.Replace(" ", "").Split(','); 847 848 //If there are combined products show header 849 if (GetString("Ecom:Product:Field.CombinedProducts").Length < 1) 850 { 851 headingStyle = "display:none"; 852 853 } 854 855 var noOfCombinedProducts = getCombinedProducts.Length; 856 857 //change layout per no of products 858 switch (noOfCombinedProducts) 859 { 860 case 1: 861 862 headingClass = "margin-left:-27%"; 863 864 break; 865 case 2: 866 headingClass = "margin-right:4%"; 867 break; 868 case 3: 869 headingClass = "Float:rleft; margin-left:-0%"; 870 break; 871 872 } 873 874 <!--Start Combined products --> 875 if (noOfCombinedProducts <= 2) 876 { 877 <div class="row combinedProducts" style="@headingStyle"> 878 <div class="div-max1170-centered no-padding"> 879 880 <h2 class="combined-products">@Translate("productHeaderCombinedProducts_global", "Kombinera Med:") <span class="hedear-pull-right" style="@headingClass">@Translate("productHeaderAlsoLookedAt", "Andra Har även tittat på:")</span></h2> 881 <!--Start Customers also looked at (Embed in same div as combined products) --> 882 <div class="combined-products"> 883 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 884 @using System 885 @using System.Activities.Expressions 886 @using System.Globalization 887 @using System.Linq 888 @using System.Web.Script.Serialization 889 @using App_Code 890 @using Dynamicweb.Controls 891 @using Dynamicweb.Controls.Extensibility 892 @using Dynamicweb.Ecommerce.Cart 893 @using Dynamicweb.Ecommerce.Notifications 894 @using Dynamicweb.Ecommerce.Products 895 @using Dynamicweb.Management.Ecommerce 896 @using Lucene.Net.Search 897 @using Microsoft.CodeAnalysis.VisualBasic.Syntax 898 @using Newtonsoft.Json 899 900 901 902 903 904 @{ 905 906 907 908 //Get the real data for the combined products 909 var combinedProductString = GetValue("Ecom:Product:Field.CombinedProducts").ToString(); 910 911 //If no products to combine dont continue 912 if (combinedProductString.Length < 1) 913 { 914 return; 915 } 916 917 var productServise = new ProductService(); 918 var baseProductId = prodnumber; 919 var listOfCombinedProducts = new List<string>(); 920 var prodLink = "#"; 921 var columnClass = ""; 922 var wrapperCount = ""; 923 var buyButtonStyle = ""; 924 925 926 // Split the product IDs into array 927 string[] dataSplit = (combinedProductString).Replace(" ", "").Split(','); 928 929 //Add to list 930 foreach (var product in dataSplit) 931 { 932 var productId = product; 933 934 listOfCombinedProducts.Add(productId); 935 } 936 937 //change layout per no of products 938 switch (dataSplit.Length) 939 { 940 case 1: 941 columnClass = "2"; 942 wrapperCount = "6"; 943 buyButtonStyle = "bottom:20px; margin-right:-28px; width:190px; padding-left:15px"; //Use this to add extra style to buy button 944 break; 945 case 2: 946 columnClass = "3"; 947 wrapperCount = "9"; 948 buyButtonStyle = "bottom:20px; margin-right:5px;"; //Use this to add extra style to buy button 949 break; 950 case 3: 951 columnClass = "4"; 952 wrapperCount = "12"; 953 wrapperCount = null; 954 buyButtonStyle = "bottom:-458px"; //Use this to add extra style to buy button 955 break; 956 } 957 958 var listOffProducts = new List<Product>(); 959 960 //Make the base product first item 961 listOffProducts.Add(productServise.GetProductByNumber(baseProductId, true)); 962 //get and and add product price to combined total price 963 964 double combinedPriceTotal = 0; 965 double combinedDiscounts = 0; 966 967 if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 968 { 969 var baseProductPrice = Convert.ToDouble(productServise.GetProductByNumber(baseProductId, true).GetPrice("SEK", "SE").PriceWithoutVAT); 970 combinedPriceTotal = baseProductPrice; 971 } 972 else 973 { 974 975 var baseProductPrice = Convert.ToDouble(productServise.GetProductByNumber(baseProductId, true).GetPrice("SEK", "SE").PriceWithVAT); 976 combinedPriceTotal = baseProductPrice; 977 } 978 979 var productCount = listOfCombinedProducts.Count; 980 var itemCounter = 0; 981 var listOfIds = new List<string>(); 982 var containsCampaign = false; 983 984 //Add main product to list of ids 985 listOfIds.Add(productServise.GetProductByNumber(baseProductId, true).Id); 986 987 //Add combined products to list of ids 988 foreach (var item in listOfCombinedProducts) 989 { 990 var items = productServise.GetProductByNumber(item, true); 991 992 //If product Id is incorrect do not continue 993 if (items == null) 994 { 995 return; 996 } 997 998 listOffProducts.Add(items); 999 listOfIds.Add(items.Id); 1000 1001 containsCampaign = (bool)productServise.GetProductByNumber(items.Number, false).ProductFieldValues.GetProductFieldValue("productCampaign").Value; 1002 1003 //check if there is a campaign product in the list and add them together 1004 if (containsCampaign == true) 1005 { 1006 // Consumer old price - for campaign price graphics 1007 var test = items.Number.ToString(); 1008 var productConsumerOldPrice = 0.0; 1009 var oldPriceAsString = productServise.GetProductByNumber(items.Number, false).ProductFieldValues.GetProductFieldValue("OldProductPrice").Value.ToString(); 1010 productConsumerOldPrice = Convert.ToDouble(oldPriceAsString, CultureInfo.InvariantCulture); 1011 1012 var productConsumerOldPriceWithVat = productConsumerOldPrice * 1.25; 1013 var productPrice = Convert.ToDouble(productServise.GetProductByNumber(items.Number, false).GetPrice("SEK", "SE").PriceWithVAT); 1014 combinedDiscounts = productConsumerOldPriceWithVat - productPrice; 1015 1016 } 1017 1018 //get and and add each combined products price and add to the combined total price 1019 if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1020 { 1021 1022 var productPrice = Convert.ToDouble(productServise.GetProductByNumber(items.Number, false).GetPrice("SEK", "SE").PriceWithoutVAT); 1023 combinedPriceTotal = productPrice + combinedPriceTotal; 1024 } 1025 else 1026 { 1027 var productPrice = Convert.ToDouble(productServise.GetProductByNumber(items.Number, false).GetPrice("SEK", "SE").PriceWithVAT); 1028 combinedPriceTotal = productPrice + combinedPriceTotal; 1029 } 1030 1031 } 1032 1033 1034 1035 if (baseProductId != null) 1036 { 1037 1038 var simProdStock = 0; 1039 1040 <div class="fixed-height-boxes col-md-@wrapperCount"> 1041 1042 @foreach (var i in listOffProducts) 1043 { 1044 itemCounter++; 1045 var showHoverEfect = ""; 1046 if (itemCounter > 1) 1047 { 1048 showHoverEfect = "combinedProductLinkHover"; 1049 } 1050 1051 <div class=" col-md-@columnClass combindeProducts @showHoverEfect"> 1052 1053 @{ 1054 1055 string productNumberClean = i.Number.Replace("/", "-"); 1056 var imgsrc = "/admin/public/getimage.ashx?Image=/Files/Images/ProductImages/" + productNumberClean + "/" + productNumberClean + "_1.jpg&width=250&height=250&compression=85&Crop=5&Format=jpg&altFmImage_path=/Files/Images/NoImageAvailable.png"; 1057 var isCampaigne = (Boolean)i.GetProductFieldValue("productCampaign"); 1058 var isnews = (Boolean)i.GetProductFieldValue("productNews"); 1059 string ProductsPageId = GetPageIdByNavigationTag("ProductsPage").ToString(); 1060 string productId = i.Number + "-at-SHOP1"; 1061 var combindeProductsBuy = ""; 1062 var classAHref = ""; 1063 1064 if (isCampaigne && isnews) 1065 { 1066 <div class="labels"> 1067 <button class="btn btn-small btn-danger product-flag campaign">@Translate("product_Campaign_tag", "Campaign")</button> 1068 1069 <button class="btn btn-small btn-default product-flag news">@Translate("product_News_tag", "News")</button> 1070 </div> 1071 } 1072 1073 else if (isnews) 1074 { 1075 <button class="btn btn-small btn-default product-flag news alone">@Translate("product_News_tag", "News")</button> 1076 } 1077 1078 else if (isCampaigne) 1079 { 1080 <button class="btn btn-small btn-danger product-flag campaign alone">@Translate("product_Campaign_tag", "Campaign")</button> 1081 } 1082 1083 } 1084 1085 @if (itemCounter > 1) 1086 { 1087 1088 1089 prodLink = "/Default.aspx?ID=" + ProductsPageId + "&GroupID=" + GetValue("Ecom:Product.PrimaryOrFirstGroupID") + "&ProductID=" + i.IdUrlEncoded; 1090 1091 combindeProductsBuy = ""; 1092 //showHoverEfect = "combinedProductLinkHover"; 1093 } 1094 else 1095 { 1096 combindeProductsBuy = "combindeProductsBuy"; 1097 } 1098 1099 @if (itemCounter == 1) 1100 { 1101 classAHref = "buyHref"; 1102 } 1103 1104 <div class="thumbnail dropdown-info @showHoverEfect"> 1105 <a href=@prodLink class="@classAHref" > 1106 <div class="display-img"> 1107 <img alt="@i.Name" src="@imgsrc" data-original="@imgsrc" class="img-responsive lazy"> 1108 </div> 1109 1110 <div class="display-name"> 1111 <div class="name-info"> 1112 <div class="itemBrand">@i.GetProductFieldValue("productTrademark")</div> 1113 1114 <div class="itemName">@i.Name</div> 1115 1116 @if (!string.IsNullOrEmpty(i.GetProductFieldValue("productSeries").ToString())) 1117 { 1118 <div class="itemBrand">@Translate("productListSeriesLabel", "Serie:") @i.GetProductFieldValue("productSeries")</div> 1119 } 1120 1121 <div class="itemNumber">@Translate("productListArticleNrLabel", "Art. nr:") @i.Number</div> 1122 1123 </div> 1124 </div> 1125 </a> 1126 </div> 1127 @*//Add the + sign on combined products.*@ 1128 @if (itemCounter > 1) 1129 { 1130 <div class="circle"><h1 class="relatedProduct">+</h1></div> 1131 } 1132 </div> 1133 1134 1135 1136 <div class="@combindeProductsBuy" style="@buyButtonStyle"> 1137 @if (itemCounter <= 1) 1138 { 1139 1140 <div class="itemPrice" id='id_@i.Number'> 1141 1142 @if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1143 { 1144 1145 string CustomerPriceFormatted = combinedPriceTotal.ToString("n", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1146 1147 <span>@CustomerPriceFormatted</span> 1148 1149 } 1150 else 1151 { 1152 1153 var ConsumerPriceWithVatFormatted = combinedPriceTotal.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1154 1155 if (combinedDiscounts > 0) 1156 { 1157 1158 var ConsumerOldProductPrice = combinedPriceTotal + combinedDiscounts; 1159 1160 string ConsumerOldProductPriceFormatted = ConsumerOldProductPrice.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1161 1162 <div class="item-main-info campaign-price"> 1163 <span class="old-price">@ConsumerOldProductPriceFormatted </span>&nbsp; 1164 <span>@ConsumerPriceWithVatFormatted</span> 1165 </div> 1166 } 1167 else 1168 { 1169 1170 <div class="itemPrice"> 1171 <div class="item-main-info"> 1172 <span>@ConsumerPriceWithVatFormatted</span> 1173 </div> 1174 </div> 1175 } 1176 } 1177 </div> 1178 } 1179 1180 1181 1182 1183 1184 @*//If its the base product add the price and buy button*@ 1185 @if (i.Number == baseProductId) 1186 { 1187 1188 if (!hideCart && itemCounter <= 1) 1189 { 1190 string simProdDisabledState = ""; 1191 var getSimProductId = productId; 1192 1193 simProdStock = HelperClass.StockValue(getSimProductId); 1194 1195 1196 if (simProdStock <= 2) 1197 { 1198 simProdDisabledState = "disabled card"; 1199 } 1200 1201 <form name="multiForm" id="multiForm" method="post" class="form-inline product-card-buy-button relatedProducts @buttonClass @simProdDisabledState "> 1202 1203 @{ 1204 1205 var addedItems = new Dictionary<string, string>(); 1206 1207 addedItems.Add("CartCmd", "addmulti"); 1208 var productLoopCounter = 1; 1209 foreach (var s in listOfIds) 1210 { 1211 1212 var countVal = productLoopCounter.ToString(); 1213 1214 addedItems.Add("ProductLoopCounter" + countVal, countVal); 1215 addedItems.Add("ProductID" + countVal, s); 1216 addedItems.Add("VariantID" + countVal, ""); 1217 addedItems.Add("UnitID" + countVal, ""); 1218 addedItems.Add("Quantity" + countVal, "1"); 1219 1220 productLoopCounter++; 1221 } 1222 1223 } 1224 1225 <span id="multiProductData" data-json=@JsonConvert.SerializeObject(addedItems)> 1226 </span> 1227 <button id="btnBuy" 1228 onclick="Cart.addMultiProduct(@GetValue("Ecom:Product:Page.ID"),this)" 1229 class="btn btn-default" type="button"> 1230 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 1231 <polygon class="st0" points="152.8 42.3 57.1 42.3 36.6 -40.7 18.7 -40.7 18.7 -54.7 47.6 -54.7 68 28.3 143 28.3 160.7 -20.7 64.6 -19.9 64.5 -33.9 180.7 -34.9 " /> 1232 <path class="st0" d="M77.1 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6 11.9 0 21.6 9.7 21.6 21.6C98.7 70.9 89 80.6 77.1 80.6zM77.1 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6 4.2 0 7.6-3.4 7.6-7.6C84.7 54.9 81.3 51.5 77.1 51.5z" /> 1233 <path class="st0" d="M137.4 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6S159 47.1 159 59C159 70.9 149.3 80.6 137.4 80.6zM137.4 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6s7.6-3.4 7.6-7.6C145 54.9 141.6 51.5 137.4 51.5z" /> 1234 <polygon class="st0" points="124.6 -22.6 97.6 -50.9 75.4 -24.5 64.6 -33.5 96.9 -71.9 134.7 -32.3 " /> 1235 <polygon class="st0" points="172.6 -23.6 133.4 -52.5 117 -36.8 107.3 -46.9 132.3 -70.7 180.9 -34.8 " /> 1236 <path d="M19 5.8L19 5.8l-5.4-4 -2 1.9 -1.9-2L6.1 5.9h0l0 1.5 10.7-0.1 -2 5.5H6.5L4.2 3.6H1v1.6h2l2.3 9.2H6c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.3-1.4-0.9-1.9h3.7c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.4-1.4-0.9-1.9h0.2L19 5.8zM8.2 5.9L9.8 4l1.8 1.8L8.2 5.9zM13.7 5.8l-1-1 1-1 2.7 2L13.7 5.8zM7.5 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C8.3 16.7 7.9 17 7.5 17zM14.2 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C15 16.7 14.6 17 14.2 17z" /> 1237 <polygon points="19 5.8 19 5.8 19 5.8 " /> 1238 </svg> 1239 <i class="fa fa-refresh"></i> 1240 @if (loggedIn) 1241 { 1242 <span class="buyText">@Translate("productBuyButtonText", "Köp")</span> 1243 } 1244 </button> 1245 1246 </form> 1247 1248 } 1249 1250 } 1251 1252 </div> 1253 } 1254 </div> 1255 1256 } 1257 1258 } 1259 1260 1261 <div class="combined-products alsoLookedAt"> 1262 <h2 class="combined-products-mobile"><span>@Translate("productHeaderAlsoLookedAt", "Andra Har även tittat på:")</span></h2> 1263 <div class="row"> 1264 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1265 @using System.Activities.Statements 1266 @using Dynamicweb.Ecommerce.Products 1267 @using System.Globalization 1268 @using System.Security.Cryptography 1269 @using App_Code 1270 1271 1272 1273 @{ 1274 1275 // Get and set values 1276 1277 var itemCountToList = 3 - productCount; 1278 var singleItemClass = ""; 1279 1280 if (productCount == 3 || productCount < 1) 1281 { 1282 itemCountToList = 4; 1283 1284 } 1285 1286 if (productCount == 2) 1287 { 1288 singleItemClass = "singleItem"; 1289 1290 } 1291 1292 var customersAlsoLookedAt = GetLoop("eCom:Related.CustomersWhoSawThisAlsoSaw").GetRange(0, itemCountToList); 1293 1294 1295 if (customersAlsoLookedAt != null) 1296 { 1297 1298 var thisProdStock = 0; 1299 1300 1301 foreach (LoopItem loopitem in customersAlsoLookedAt) 1302 { 1303 var product = productServise.GetProductByNumber(loopitem.GetString("Ecom:Product.Number"), false); 1304 1305 <div class="col-md-3"> 1306 1307 @{ 1308 1309 string productNumberClean = product.Number.Replace("/", "-"); 1310 var imgsrc = "/admin/public/getimage.ashx?Image=/Files/Images/ProductImages/" + productNumberClean + "/" + productNumberClean + "_1.jpg&width=250&height=250&compression=85&Crop=5&Format=jpg&altFmImage_path=/Files/Images/NoImageAvailable.png"; 1311 var isCampaigne = (Boolean)product.GetProductFieldValue("productCampaign"); 1312 var isnews = (Boolean)product.GetProductFieldValue("productNews"); 1313 string ProductsPageId = GetPageIdByNavigationTag("ProductsPage").ToString(); 1314 string productId = product.Number + "-at-SHOP1"; 1315 1316 if (isCampaigne && isnews) 1317 { 1318 <div class="labels"> 1319 <button class="btn btn-small btn-danger product-flag campaign">@Translate("product_Campaign_tag", "Campaign")</button> 1320 1321 <button class="btn btn-small btn-default product-flag news">@Translate("product_News_tag", "News")</button> 1322 </div> 1323 } 1324 1325 else if (isnews) 1326 { 1327 <button class="btn btn-small btn-default product-flag news alone">@Translate("product_News_tag", "News")</button> 1328 } 1329 1330 else if (isCampaigne) 1331 { 1332 <button class="btn btn-small btn-danger product-flag campaign alone">@Translate("product_Campaign_tag", "Campaign")</button> 1333 } 1334 1335 } 1336 1337 <div class="thumbnail dropdown-info @singleItemClass"> 1338 <a href="/Default.aspx?ID=@ProductsPageId&GroupID=@GetValue("Ecom:Product.PrimaryOrFirstGroupID")&ProductID=@product.IdUrlEncoded"> 1339 <div class="display-img"> 1340 <img alt="@product.Name" src="@imgsrc" data-original="@imgsrc" class="img-responsive lazy"> 1341 </div> 1342 <div class="display-name"> 1343 <div class="name-info"> 1344 <div class="itemBrand">@product.GetProductFieldValue("productTrademark")</div> 1345 <div class="itemName">@product.Name</div> 1346 @if (!string.IsNullOrEmpty(product.GetProductFieldValue("productSeries").ToString())) 1347 { 1348 <div class="itemBrand">@Translate("productListSeriesLabel", "Serie:") @product.GetProductFieldValue("productSeries")</div> 1349 } 1350 <div class="itemNumber">@Translate("productListArticleNrLabel", "Art. nr:") @product.Number</div> 1351 <div class="itemPrice" id='id_@product.Number'> 1352 1353 @if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1354 { 1355 1356 decimal CustomerPrice = Convert.ToDecimal(!string.IsNullOrEmpty(product.Price.PriceWithoutVAT.ToString()) ? product.Price.PriceWithoutVAT.ToString() : "0"); 1357 string CustomerPriceFormatted = CustomerPrice.ToString("n", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1358 1359 1360 1361 <span>@CustomerPriceFormatted</span> 1362 1363 } 1364 else 1365 { 1366 decimal ConsumnerPriceWithVat = Convert.ToDecimal(!string.IsNullOrEmpty(product.Price.PriceWithVAT.ToString()) ? product.Price.PriceWithVAT.ToString() : "0"); 1367 var ConsumnerPriceWithVatFormatted = ConsumnerPriceWithVat.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1368 1369 //Campaign price graphics 1370 double ConsumerOldProductPrice = double.Parse(product.GetProductFieldValue("OldProductPrice").ToString(), CultureInfo.InvariantCulture); 1371 ConsumerOldProductPrice = ConsumerOldProductPrice * 1.25; 1372 1373 if (isCampaigne && ConsumerOldProductPrice > 0) 1374 { 1375 string ConsumerOldProductPriceFormatted = ConsumerOldProductPrice.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1376 1377 <div class="item-main-info campaign-price"> 1378 <span class="old-price">@ConsumerOldProductPriceFormatted </span>&nbsp; 1379 <span>@ConsumnerPriceWithVatFormatted </span> 1380 </div> 1381 1382 } 1383 else 1384 { 1385 1386 <div class="itemPrice"> 1387 1388 <div class="item-main-info"> 1389 <span>@ConsumnerPriceWithVatFormatted</span> 1390 </div> 1391 1392 </div> 1393 1394 1395 1396 1397 } 1398 1399 } 1400 </div> 1401 </div> 1402 </div> 1403 </a> 1404 1405 @if (!hideCart) 1406 { 1407 string simProdDisabledState = ""; 1408 var thisProductId = productId; 1409 1410 thisProdStock = HelperClass.StockValue(thisProductId); 1411 1412 1413 if (thisProdStock <= 2) 1414 { 1415 simProdDisabledState = "disabled card"; 1416 } 1417 1418 1419 1420 <form class="form-inline product-card-buy-button @buttonClass @simProdDisabledState "> 1421 <span> 1422 <button id="btnBuy" 1423 onclick="Cart.addToBasket(@ProductsPageId, '@productId', '@productNumberClean', this);" 1424 class="btn btn-default @buttonClass" type="button" style="float: right; margin-top: -35px;"> 1425 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 1426 <polygon class="st0" points="152.8 42.3 57.1 42.3 36.6 -40.7 18.7 -40.7 18.7 -54.7 47.6 -54.7 68 28.3 143 28.3 160.7 -20.7 64.6 -19.9 64.5 -33.9 180.7 -34.9 " /> 1427 <path class="st0" d="M77.1 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6 11.9 0 21.6 9.7 21.6 21.6C98.7 70.9 89 80.6 77.1 80.6zM77.1 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6 4.2 0 7.6-3.4 7.6-7.6C84.7 54.9 81.3 51.5 77.1 51.5z" /> 1428 <path class="st0" d="M137.4 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6S159 47.1 159 59C159 70.9 149.3 80.6 137.4 80.6zM137.4 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6s7.6-3.4 7.6-7.6C145 54.9 141.6 51.5 137.4 51.5z" /> 1429 <polygon class="st0" points="124.6 -22.6 97.6 -50.9 75.4 -24.5 64.6 -33.5 96.9 -71.9 134.7 -32.3 " /> 1430 <polygon class="st0" points="172.6 -23.6 133.4 -52.5 117 -36.8 107.3 -46.9 132.3 -70.7 180.9 -34.8 " /> 1431 <path d="M19 5.8L19 5.8l-5.4-4 -2 1.9 -1.9-2L6.1 5.9h0l0 1.5 10.7-0.1 -2 5.5H6.5L4.2 3.6H1v1.6h2l2.3 9.2H6c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.3-1.4-0.9-1.9h3.7c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.4-1.4-0.9-1.9h0.2L19 5.8zM8.2 5.9L9.8 4l1.8 1.8L8.2 5.9zM13.7 5.8l-1-1 1-1 2.7 2L13.7 5.8zM7.5 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C8.3 16.7 7.9 17 7.5 17zM14.2 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C15 16.7 14.6 17 14.2 17z" /> 1432 <polygon points="19 5.8 19 5.8 19 5.8 " /> 1433 </svg> 1434 @if (loggedIn) 1435 { 1436 @Translate("productBuyButtonText", "Köp"); 1437 } 1438 <i class="fa fa-refresh"></i> 1439 </span> 1440 </form> 1441 1442 1443 } 1444 1445 </div> 1446 1447 </div> 1448 1449 } 1450 } 1451 } 1452 1453 1454 1455 </div> 1456 </div> 1457 </div> 1458 <!--End Start Customers also looked at --> 1459 </div> 1460 </div> 1461 1462 } 1463 if (noOfCombinedProducts >= 3) 1464 { 1465 <div class="row combinedProducts"> 1466 <div class="div-max1170-centered no-padding"> 1467 1468 <h2>@Translate("productHeaderCombinedProducts_global", "Kombinera Med:")</h2> 1469 <!--Start Customers also looked at --> 1470 <div class="combined-products"> 1471 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1472 @using System 1473 @using System.Activities.Expressions 1474 @using System.Globalization 1475 @using System.Linq 1476 @using System.Web.Script.Serialization 1477 @using App_Code 1478 @using Dynamicweb.Controls 1479 @using Dynamicweb.Controls.Extensibility 1480 @using Dynamicweb.Ecommerce.Cart 1481 @using Dynamicweb.Ecommerce.Notifications 1482 @using Dynamicweb.Ecommerce.Products 1483 @using Dynamicweb.Management.Ecommerce 1484 @using Lucene.Net.Search 1485 @using Microsoft.CodeAnalysis.VisualBasic.Syntax 1486 @using Newtonsoft.Json 1487 1488 1489 1490 1491 1492 @{ 1493 1494 1495 1496 //Get the real data for the combined products 1497 var combinedProductString = GetValue("Ecom:Product:Field.CombinedProducts").ToString(); 1498 1499 //If no products to combine dont continue 1500 if (combinedProductString.Length < 1) 1501 { 1502 return; 1503 } 1504 1505 var productServise = new ProductService(); 1506 var baseProductId = prodnumber; 1507 var listOfCombinedProducts = new List<string>(); 1508 var prodLink = "#"; 1509 var columnClass = ""; 1510 var wrapperCount = ""; 1511 var buyButtonStyle = ""; 1512 1513 1514 // Split the product IDs into array 1515 string[] dataSplit = (combinedProductString).Replace(" ", "").Split(','); 1516 1517 //Add to list 1518 foreach (var product in dataSplit) 1519 { 1520 var productId = product; 1521 1522 listOfCombinedProducts.Add(productId); 1523 } 1524 1525 //change layout per no of products 1526 switch (dataSplit.Length) 1527 { 1528 case 1: 1529 columnClass = "2"; 1530 wrapperCount = "6"; 1531 buyButtonStyle = "bottom:20px; margin-right:-28px; width:190px; padding-left:15px"; //Use this to add extra style to buy button 1532 break; 1533 case 2: 1534 columnClass = "3"; 1535 wrapperCount = "9"; 1536 buyButtonStyle = "bottom:20px; margin-right:5px;"; //Use this to add extra style to buy button 1537 break; 1538 case 3: 1539 columnClass = "4"; 1540 wrapperCount = "12"; 1541 wrapperCount = null; 1542 buyButtonStyle = "bottom:-458px"; //Use this to add extra style to buy button 1543 break; 1544 } 1545 1546 var listOffProducts = new List<Product>(); 1547 1548 //Make the base product first item 1549 listOffProducts.Add(productServise.GetProductByNumber(baseProductId, true)); 1550 //get and and add product price to combined total price 1551 1552 double combinedPriceTotal = 0; 1553 double combinedDiscounts = 0; 1554 1555 if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1556 { 1557 var baseProductPrice = Convert.ToDouble(productServise.GetProductByNumber(baseProductId, true).GetPrice("SEK", "SE").PriceWithoutVAT); 1558 combinedPriceTotal = baseProductPrice; 1559 } 1560 else 1561 { 1562 1563 var baseProductPrice = Convert.ToDouble(productServise.GetProductByNumber(baseProductId, true).GetPrice("SEK", "SE").PriceWithVAT); 1564 combinedPriceTotal = baseProductPrice; 1565 } 1566 1567 var productCount = listOfCombinedProducts.Count; 1568 var itemCounter = 0; 1569 var listOfIds = new List<string>(); 1570 var containsCampaign = false; 1571 1572 //Add main product to list of ids 1573 listOfIds.Add(productServise.GetProductByNumber(baseProductId, true).Id); 1574 1575 //Add combined products to list of ids 1576 foreach (var item in listOfCombinedProducts) 1577 { 1578 var items = productServise.GetProductByNumber(item, true); 1579 1580 //If product Id is incorrect do not continue 1581 if (items == null) 1582 { 1583 return; 1584 } 1585 1586 listOffProducts.Add(items); 1587 listOfIds.Add(items.Id); 1588 1589 containsCampaign = (bool)productServise.GetProductByNumber(items.Number, false).ProductFieldValues.GetProductFieldValue("productCampaign").Value; 1590 1591 //check if there is a campaign product in the list and add them together 1592 if (containsCampaign == true) 1593 { 1594 // Consumer old price - for campaign price graphics 1595 var test = items.Number.ToString(); 1596 var productConsumerOldPrice = 0.0; 1597 var oldPriceAsString = productServise.GetProductByNumber(items.Number, false).ProductFieldValues.GetProductFieldValue("OldProductPrice").Value.ToString(); 1598 productConsumerOldPrice = Convert.ToDouble(oldPriceAsString, CultureInfo.InvariantCulture); 1599 1600 var productConsumerOldPriceWithVat = productConsumerOldPrice * 1.25; 1601 var productPrice = Convert.ToDouble(productServise.GetProductByNumber(items.Number, false).GetPrice("SEK", "SE").PriceWithVAT); 1602 combinedDiscounts = productConsumerOldPriceWithVat - productPrice; 1603 1604 } 1605 1606 //get and and add each combined products price and add to the combined total price 1607 if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1608 { 1609 1610 var productPrice = Convert.ToDouble(productServise.GetProductByNumber(items.Number, false).GetPrice("SEK", "SE").PriceWithoutVAT); 1611 combinedPriceTotal = productPrice + combinedPriceTotal; 1612 } 1613 else 1614 { 1615 var productPrice = Convert.ToDouble(productServise.GetProductByNumber(items.Number, false).GetPrice("SEK", "SE").PriceWithVAT); 1616 combinedPriceTotal = productPrice + combinedPriceTotal; 1617 } 1618 1619 } 1620 1621 1622 1623 if (baseProductId != null) 1624 { 1625 1626 var simProdStock = 0; 1627 1628 <div class="fixed-height-boxes col-md-@wrapperCount"> 1629 1630 @foreach (var i in listOffProducts) 1631 { 1632 itemCounter++; 1633 var showHoverEfect = ""; 1634 if (itemCounter > 1) 1635 { 1636 showHoverEfect = "combinedProductLinkHover"; 1637 } 1638 1639 <div class=" col-md-@columnClass combindeProducts @showHoverEfect"> 1640 1641 @{ 1642 1643 string productNumberClean = i.Number.Replace("/", "-"); 1644 var imgsrc = "/admin/public/getimage.ashx?Image=/Files/Images/ProductImages/" + productNumberClean + "/" + productNumberClean + "_1.jpg&width=250&height=250&compression=85&Crop=5&Format=jpg&altFmImage_path=/Files/Images/NoImageAvailable.png"; 1645 var isCampaigne = (Boolean)i.GetProductFieldValue("productCampaign"); 1646 var isnews = (Boolean)i.GetProductFieldValue("productNews"); 1647 string ProductsPageId = GetPageIdByNavigationTag("ProductsPage").ToString(); 1648 string productId = i.Number + "-at-SHOP1"; 1649 var combindeProductsBuy = ""; 1650 var classAHref = ""; 1651 1652 if (isCampaigne && isnews) 1653 { 1654 <div class="labels"> 1655 <button class="btn btn-small btn-danger product-flag campaign">@Translate("product_Campaign_tag", "Campaign")</button> 1656 1657 <button class="btn btn-small btn-default product-flag news">@Translate("product_News_tag", "News")</button> 1658 </div> 1659 } 1660 1661 else if (isnews) 1662 { 1663 <button class="btn btn-small btn-default product-flag news alone">@Translate("product_News_tag", "News")</button> 1664 } 1665 1666 else if (isCampaigne) 1667 { 1668 <button class="btn btn-small btn-danger product-flag campaign alone">@Translate("product_Campaign_tag", "Campaign")</button> 1669 } 1670 1671 } 1672 1673 @if (itemCounter > 1) 1674 { 1675 1676 1677 prodLink = "/Default.aspx?ID=" + ProductsPageId + "&GroupID=" + GetValue("Ecom:Product.PrimaryOrFirstGroupID") + "&ProductID=" + i.IdUrlEncoded; 1678 1679 combindeProductsBuy = ""; 1680 //showHoverEfect = "combinedProductLinkHover"; 1681 } 1682 else 1683 { 1684 combindeProductsBuy = "combindeProductsBuy"; 1685 } 1686 1687 @if (itemCounter == 1) 1688 { 1689 classAHref = "buyHref"; 1690 } 1691 1692 <div class="thumbnail dropdown-info @showHoverEfect"> 1693 <a href=@prodLink class="@classAHref" > 1694 <div class="display-img"> 1695 <img alt="@i.Name" src="@imgsrc" data-original="@imgsrc" class="img-responsive lazy"> 1696 </div> 1697 1698 <div class="display-name"> 1699 <div class="name-info"> 1700 <div class="itemBrand">@i.GetProductFieldValue("productTrademark")</div> 1701 1702 <div class="itemName">@i.Name</div> 1703 1704 @if (!string.IsNullOrEmpty(i.GetProductFieldValue("productSeries").ToString())) 1705 { 1706 <div class="itemBrand">@Translate("productListSeriesLabel", "Serie:") @i.GetProductFieldValue("productSeries")</div> 1707 } 1708 1709 <div class="itemNumber">@Translate("productListArticleNrLabel", "Art. nr:") @i.Number</div> 1710 1711 </div> 1712 </div> 1713 </a> 1714 </div> 1715 @*//Add the + sign on combined products.*@ 1716 @if (itemCounter > 1) 1717 { 1718 <div class="circle"><h1 class="relatedProduct">+</h1></div> 1719 } 1720 </div> 1721 1722 1723 1724 <div class="@combindeProductsBuy" style="@buyButtonStyle"> 1725 @if (itemCounter <= 1) 1726 { 1727 1728 <div class="itemPrice" id='id_@i.Number'> 1729 1730 @if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1731 { 1732 1733 string CustomerPriceFormatted = combinedPriceTotal.ToString("n", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1734 1735 <span>@CustomerPriceFormatted</span> 1736 1737 } 1738 else 1739 { 1740 1741 var ConsumerPriceWithVatFormatted = combinedPriceTotal.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1742 1743 if (combinedDiscounts > 0) 1744 { 1745 1746 var ConsumerOldProductPrice = combinedPriceTotal + combinedDiscounts; 1747 1748 string ConsumerOldProductPriceFormatted = ConsumerOldProductPrice.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1749 1750 <div class="item-main-info campaign-price"> 1751 <span class="old-price">@ConsumerOldProductPriceFormatted </span>&nbsp; 1752 <span>@ConsumerPriceWithVatFormatted</span> 1753 </div> 1754 } 1755 else 1756 { 1757 1758 <div class="itemPrice"> 1759 <div class="item-main-info"> 1760 <span>@ConsumerPriceWithVatFormatted</span> 1761 </div> 1762 </div> 1763 } 1764 } 1765 </div> 1766 } 1767 1768 1769 1770 1771 1772 @*//If its the base product add the price and buy button*@ 1773 @if (i.Number == baseProductId) 1774 { 1775 1776 if (!hideCart && itemCounter <= 1) 1777 { 1778 string simProdDisabledState = ""; 1779 var getSimProductId = productId; 1780 1781 simProdStock = HelperClass.StockValue(getSimProductId); 1782 1783 1784 if (simProdStock <= 2) 1785 { 1786 simProdDisabledState = "disabled card"; 1787 } 1788 1789 <form name="multiForm" id="multiForm" method="post" class="form-inline product-card-buy-button relatedProducts @buttonClass @simProdDisabledState "> 1790 1791 @{ 1792 1793 var addedItems = new Dictionary<string, string>(); 1794 1795 addedItems.Add("CartCmd", "addmulti"); 1796 var productLoopCounter = 1; 1797 foreach (var s in listOfIds) 1798 { 1799 1800 var countVal = productLoopCounter.ToString(); 1801 1802 addedItems.Add("ProductLoopCounter" + countVal, countVal); 1803 addedItems.Add("ProductID" + countVal, s); 1804 addedItems.Add("VariantID" + countVal, ""); 1805 addedItems.Add("UnitID" + countVal, ""); 1806 addedItems.Add("Quantity" + countVal, "1"); 1807 1808 productLoopCounter++; 1809 } 1810 1811 } 1812 1813 <span id="multiProductData" data-json=@JsonConvert.SerializeObject(addedItems)> 1814 </span> 1815 <button id="btnBuy" 1816 onclick="Cart.addMultiProduct(@GetValue("Ecom:Product:Page.ID"),this)" 1817 class="btn btn-default" type="button"> 1818 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 1819 <polygon class="st0" points="152.8 42.3 57.1 42.3 36.6 -40.7 18.7 -40.7 18.7 -54.7 47.6 -54.7 68 28.3 143 28.3 160.7 -20.7 64.6 -19.9 64.5 -33.9 180.7 -34.9 " /> 1820 <path class="st0" d="M77.1 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6 11.9 0 21.6 9.7 21.6 21.6C98.7 70.9 89 80.6 77.1 80.6zM77.1 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6 4.2 0 7.6-3.4 7.6-7.6C84.7 54.9 81.3 51.5 77.1 51.5z" /> 1821 <path class="st0" d="M137.4 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6S159 47.1 159 59C159 70.9 149.3 80.6 137.4 80.6zM137.4 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6s7.6-3.4 7.6-7.6C145 54.9 141.6 51.5 137.4 51.5z" /> 1822 <polygon class="st0" points="124.6 -22.6 97.6 -50.9 75.4 -24.5 64.6 -33.5 96.9 -71.9 134.7 -32.3 " /> 1823 <polygon class="st0" points="172.6 -23.6 133.4 -52.5 117 -36.8 107.3 -46.9 132.3 -70.7 180.9 -34.8 " /> 1824 <path d="M19 5.8L19 5.8l-5.4-4 -2 1.9 -1.9-2L6.1 5.9h0l0 1.5 10.7-0.1 -2 5.5H6.5L4.2 3.6H1v1.6h2l2.3 9.2H6c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.3-1.4-0.9-1.9h3.7c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.4-1.4-0.9-1.9h0.2L19 5.8zM8.2 5.9L9.8 4l1.8 1.8L8.2 5.9zM13.7 5.8l-1-1 1-1 2.7 2L13.7 5.8zM7.5 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C8.3 16.7 7.9 17 7.5 17zM14.2 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C15 16.7 14.6 17 14.2 17z" /> 1825 <polygon points="19 5.8 19 5.8 19 5.8 " /> 1826 </svg> 1827 <i class="fa fa-refresh"></i> 1828 @if (loggedIn) 1829 { 1830 <span class="buyText">@Translate("productBuyButtonText", "Köp")</span> 1831 } 1832 </button> 1833 1834 </form> 1835 1836 } 1837 1838 } 1839 1840 </div> 1841 } 1842 </div> 1843 1844 } 1845 1846 } 1847 1848 1849 </div> 1850 <!--End Start Customers also looked at --> 1851 </div> 1852 </div> 1853 1854 <!--If its new row(3 combined products then use normal styling) for the others have also looked at--> 1855 <div class="row similar-Products-hide-if-empty"> 1856 <div class="div-max1170-centered no-padding"> 1857 <div class="similar-products alsoLookedAt"> 1858 <h2>@Translate("productHeaderAlsoLookedAt_global", "Andra Har även tittat på:")</h2> 1859 <div class="form-group inline"> 1860 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1861 @using System.Activities.Statements 1862 @using Dynamicweb.Ecommerce.Products 1863 @using System.Globalization 1864 @using System.Security.Cryptography 1865 @using App_Code 1866 1867 1868 1869 @{ 1870 1871 // Get and set values 1872 1873 var itemCountToList = 3 - productCount; 1874 var singleItemClass = ""; 1875 1876 if (productCount == 3 || productCount < 1) 1877 { 1878 itemCountToList = 4; 1879 1880 } 1881 1882 if (productCount == 2) 1883 { 1884 singleItemClass = "singleItem"; 1885 1886 } 1887 1888 var customersAlsoLookedAt = GetLoop("eCom:Related.CustomersWhoSawThisAlsoSaw").GetRange(0, itemCountToList); 1889 1890 1891 if (customersAlsoLookedAt != null) 1892 { 1893 1894 var thisProdStock = 0; 1895 1896 1897 foreach (LoopItem loopitem in customersAlsoLookedAt) 1898 { 1899 var product = productServise.GetProductByNumber(loopitem.GetString("Ecom:Product.Number"), false); 1900 1901 <div class="col-md-3"> 1902 1903 @{ 1904 1905 string productNumberClean = product.Number.Replace("/", "-"); 1906 var imgsrc = "/admin/public/getimage.ashx?Image=/Files/Images/ProductImages/" + productNumberClean + "/" + productNumberClean + "_1.jpg&width=250&height=250&compression=85&Crop=5&Format=jpg&altFmImage_path=/Files/Images/NoImageAvailable.png"; 1907 var isCampaigne = (Boolean)product.GetProductFieldValue("productCampaign"); 1908 var isnews = (Boolean)product.GetProductFieldValue("productNews"); 1909 string ProductsPageId = GetPageIdByNavigationTag("ProductsPage").ToString(); 1910 string productId = product.Number + "-at-SHOP1"; 1911 1912 if (isCampaigne && isnews) 1913 { 1914 <div class="labels"> 1915 <button class="btn btn-small btn-danger product-flag campaign">@Translate("product_Campaign_tag", "Campaign")</button> 1916 1917 <button class="btn btn-small btn-default product-flag news">@Translate("product_News_tag", "News")</button> 1918 </div> 1919 } 1920 1921 else if (isnews) 1922 { 1923 <button class="btn btn-small btn-default product-flag news alone">@Translate("product_News_tag", "News")</button> 1924 } 1925 1926 else if (isCampaigne) 1927 { 1928 <button class="btn btn-small btn-danger product-flag campaign alone">@Translate("product_Campaign_tag", "Campaign")</button> 1929 } 1930 1931 } 1932 1933 <div class="thumbnail dropdown-info @singleItemClass"> 1934 <a href="/Default.aspx?ID=@ProductsPageId&GroupID=@GetValue("Ecom:Product.PrimaryOrFirstGroupID")&ProductID=@product.IdUrlEncoded"> 1935 <div class="display-img"> 1936 <img alt="@product.Name" src="@imgsrc" data-original="@imgsrc" class="img-responsive lazy"> 1937 </div> 1938 <div class="display-name"> 1939 <div class="name-info"> 1940 <div class="itemBrand">@product.GetProductFieldValue("productTrademark")</div> 1941 <div class="itemName">@product.Name</div> 1942 @if (!string.IsNullOrEmpty(product.GetProductFieldValue("productSeries").ToString())) 1943 { 1944 <div class="itemBrand">@Translate("productListSeriesLabel", "Serie:") @product.GetProductFieldValue("productSeries")</div> 1945 } 1946 <div class="itemNumber">@Translate("productListArticleNrLabel", "Art. nr:") @product.Number</div> 1947 <div class="itemPrice" id='id_@product.Number'> 1948 1949 @if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 1950 { 1951 1952 decimal CustomerPrice = Convert.ToDecimal(!string.IsNullOrEmpty(product.Price.PriceWithoutVAT.ToString()) ? product.Price.PriceWithoutVAT.ToString() : "0"); 1953 string CustomerPriceFormatted = CustomerPrice.ToString("n", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1954 1955 1956 1957 <span>@CustomerPriceFormatted</span> 1958 1959 } 1960 else 1961 { 1962 decimal ConsumnerPriceWithVat = Convert.ToDecimal(!string.IsNullOrEmpty(product.Price.PriceWithVAT.ToString()) ? product.Price.PriceWithVAT.ToString() : "0"); 1963 var ConsumnerPriceWithVatFormatted = ConsumnerPriceWithVat.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1964 1965 //Campaign price graphics 1966 double ConsumerOldProductPrice = double.Parse(product.GetProductFieldValue("OldProductPrice").ToString(), CultureInfo.InvariantCulture); 1967 ConsumerOldProductPrice = ConsumerOldProductPrice * 1.25; 1968 1969 if (isCampaigne && ConsumerOldProductPrice > 0) 1970 { 1971 string ConsumerOldProductPriceFormatted = ConsumerOldProductPrice.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 1972 1973 <div class="item-main-info campaign-price"> 1974 <span class="old-price">@ConsumerOldProductPriceFormatted </span>&nbsp; 1975 <span>@ConsumnerPriceWithVatFormatted </span> 1976 </div> 1977 1978 } 1979 else 1980 { 1981 1982 <div class="itemPrice"> 1983 1984 <div class="item-main-info"> 1985 <span>@ConsumnerPriceWithVatFormatted</span> 1986 </div> 1987 1988 </div> 1989 1990 1991 1992 1993 } 1994 1995 } 1996 </div> 1997 </div> 1998 </div> 1999 </a> 2000 2001 @if (!hideCart) 2002 { 2003 string simProdDisabledState = ""; 2004 var thisProductId = productId; 2005 2006 thisProdStock = HelperClass.StockValue(thisProductId); 2007 2008 2009 if (thisProdStock <= 2) 2010 { 2011 simProdDisabledState = "disabled card"; 2012 } 2013 2014 2015 2016 <form class="form-inline product-card-buy-button @buttonClass @simProdDisabledState "> 2017 <span> 2018 <button id="btnBuy" 2019 onclick="Cart.addToBasket(@ProductsPageId, '@productId', '@productNumberClean', this);" 2020 class="btn btn-default @buttonClass" type="button" style="float: right; margin-top: -35px;"> 2021 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 2022 <polygon class="st0" points="152.8 42.3 57.1 42.3 36.6 -40.7 18.7 -40.7 18.7 -54.7 47.6 -54.7 68 28.3 143 28.3 160.7 -20.7 64.6 -19.9 64.5 -33.9 180.7 -34.9 " /> 2023 <path class="st0" d="M77.1 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6 11.9 0 21.6 9.7 21.6 21.6C98.7 70.9 89 80.6 77.1 80.6zM77.1 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6 4.2 0 7.6-3.4 7.6-7.6C84.7 54.9 81.3 51.5 77.1 51.5z" /> 2024 <path class="st0" d="M137.4 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6S159 47.1 159 59C159 70.9 149.3 80.6 137.4 80.6zM137.4 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6s7.6-3.4 7.6-7.6C145 54.9 141.6 51.5 137.4 51.5z" /> 2025 <polygon class="st0" points="124.6 -22.6 97.6 -50.9 75.4 -24.5 64.6 -33.5 96.9 -71.9 134.7 -32.3 " /> 2026 <polygon class="st0" points="172.6 -23.6 133.4 -52.5 117 -36.8 107.3 -46.9 132.3 -70.7 180.9 -34.8 " /> 2027 <path d="M19 5.8L19 5.8l-5.4-4 -2 1.9 -1.9-2L6.1 5.9h0l0 1.5 10.7-0.1 -2 5.5H6.5L4.2 3.6H1v1.6h2l2.3 9.2H6c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.3-1.4-0.9-1.9h3.7c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.4-1.4-0.9-1.9h0.2L19 5.8zM8.2 5.9L9.8 4l1.8 1.8L8.2 5.9zM13.7 5.8l-1-1 1-1 2.7 2L13.7 5.8zM7.5 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C8.3 16.7 7.9 17 7.5 17zM14.2 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C15 16.7 14.6 17 14.2 17z" /> 2028 <polygon points="19 5.8 19 5.8 19 5.8 " /> 2029 </svg> 2030 @if (loggedIn) 2031 { 2032 @Translate("productBuyButtonText", "Köp"); 2033 } 2034 <i class="fa fa-refresh"></i> 2035 </span> 2036 </form> 2037 2038 2039 } 2040 2041 </div> 2042 2043 </div> 2044 2045 } 2046 } 2047 } 2048 2049 2050 2051 </div> 2052 </div> 2053 </div> 2054 </div> 2055 2056 } 2057 2058 } 2059 <!--End Combined products --> 2060 <!--Start Similar products --> 2061 <div class="row similar-Products-hide-if-empty"> 2062 <div class="div-max1170-centered no-padding"> 2063 <div class="similar-products"> 2064 <h2>@Translate("productHeaderSimilarProducts_global", "Liknande produkter:")</h2> 2065 <div class="form-group inline"> 2066 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2067 @using System.Activities.Statements 2068 @using Dynamicweb.Ecommerce.Products 2069 @using System.Globalization 2070 @using System.Security.Cryptography 2071 @using App_Code 2072 2073 @*Liknande produkter yta - speciell urvalslogik 2074 Dessa ska sökas fram enligt följande logik: 2075 Produkter i samma kategori 2076 Ta 2 som ligger närmast i pris uppåt 2077 Ta 2 som ligger närmast i pris nedåt*@ 2078 2079 @{ 2080 bool isGlobal = Convert.ToBoolean(Pageview.Area.Item["FilterGlobalProductsOnly"]); 2081 2082 // Get and set values 2083 var groupID = GetString("Ecom:Group.ID"); 2084 var productID = GetString("Ecom:Product.ID"); 2085 if (groupID == null & productID == null) 2086 { 2087 return; 2088 } 2089 var similarProducts = new SimilarProducts().GetSimilarProducts(groupID, productID, isGlobal); 2090 2091 if (similarProducts != null) 2092 { 2093 Dynamicweb.Ecommerce.LiveIntegration.Products.ProductManager.FetchProductInfos(similarProducts); 2094 var simProdStock = 0; 2095 2096 <div class="fixed-height-boxes"> 2097 2098 2099 @foreach (var i in similarProducts) 2100 { 2101 2102 <div class="col-md-3"> 2103 2104 @{ 2105 2106 string productNumberClean = i.Number.Replace("/", "-"); 2107 var imgsrc = "/admin/public/getimage.ashx?Image=/Files/Images/ProductImages/" + productNumberClean + "/" + productNumberClean + "_1.jpg&width=250&height=250&compression=85&Crop=5&Format=jpg&altFmImage_path=/Files/Images/NoImageAvailable.png"; 2108 var isCampaigne = (Boolean)i.GetProductFieldValue("productCampaign"); 2109 var isnews = (Boolean)i.GetProductFieldValue("productNews"); 2110 string ProductsPageId = GetPageIdByNavigationTag("ProductsPage").ToString(); 2111 string productId = i.Number + "-at-SHOP1"; 2112 2113 if (isCampaigne && isnews) 2114 { 2115 <div class="labels"> 2116 <button class="btn btn-small btn-danger product-flag campaign">@Translate("product_Campaign_tag", "Campaign")</button> 2117 2118 <button class="btn btn-small btn-default product-flag news">@Translate("product_News_tag", "News")</button> 2119 </div> 2120 } 2121 2122 else if (isnews) 2123 { 2124 <button class="btn btn-small btn-default product-flag news alone">@Translate("product_News_tag", "News")</button> 2125 } 2126 2127 else if (isCampaigne) 2128 { 2129 <button class="btn btn-small btn-danger product-flag campaign alone">@Translate("product_Campaign_tag", "Campaign")</button> 2130 } 2131 2132 } 2133 2134 <div class="thumbnail dropdown-info"> 2135 <a href="/Default.aspx?ID=@ProductsPageId&GroupID=@GetValue("Ecom:Product.PrimaryOrFirstGroupID")&ProductID=@i.IdUrlEncoded"> 2136 <div class="display-img"> 2137 <img alt="@i.Name" src="@imgsrc" data-original="@imgsrc" class="img-responsive lazy"> 2138 </div> 2139 <div class="display-name"> 2140 <div class="name-info"> 2141 <div class="itemBrand">@i.GetProductFieldValue("productTrademark")</div> 2142 <div class="itemName">@i.Name</div> 2143 @if (!string.IsNullOrEmpty(i.GetProductFieldValue("productSeries").ToString())) 2144 { 2145 <div class="itemBrand">@Translate("productListSeriesLabel", "Serie:") @i.GetProductFieldValue("productSeries")</div> 2146 } 2147 <div class="itemNumber">@Translate("productListArticleNrLabel", "Art. nr:") @i.Number</div> 2148 <div class="itemPrice" id='id_@i.Number'> 2149 2150 @if (Dynamicweb.Core.Converter.ToBoolean(GetGlobalValue("Global:Extranet.UserName"))) 2151 { 2152 2153 decimal CustomerPrice = Convert.ToDecimal(!string.IsNullOrEmpty(i.Price.PriceWithoutVAT.ToString()) ? i.Price.PriceWithoutVAT.ToString() : "0"); 2154 string CustomerPriceFormatted = CustomerPrice.ToString("n", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 2155 2156 2157 2158 <span>@CustomerPriceFormatted</span> 2159 2160 } 2161 else 2162 { 2163 decimal ConsumnerPriceWithVat = Convert.ToDecimal(!string.IsNullOrEmpty(i.Price.PriceWithVAT.ToString()) ? i.Price.PriceWithVAT.ToString() : "0"); 2164 var ConsumnerPriceWithVatFormatted = ConsumnerPriceWithVat.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 2165 2166 //Campaign price graphics 2167 double ConsumerOldProductPrice = double.Parse(i.GetProductFieldValue("OldProductPrice").ToString(), CultureInfo.InvariantCulture); 2168 ConsumerOldProductPrice = ConsumerOldProductPrice * 1.25; 2169 2170 if (isCampaigne && ConsumerOldProductPrice > 0) 2171 { 2172 string ConsumerOldProductPriceFormatted = ConsumerOldProductPrice.ToString("n0", new CultureInfo(GetGlobalValue("Global:Area.Culture.Name"))) + GetGlobalValue("Global:eCommerce.Currency.Symbol"); 2173 2174 <div class="item-main-info campaign-price"> 2175 <span class="old-price">@ConsumerOldProductPriceFormatted </span>&nbsp; 2176 <span>@ConsumnerPriceWithVatFormatted </span> 2177 </div> 2178 2179 } 2180 else 2181 { 2182 2183 <div class="itemPrice"> 2184 2185 <div class="item-main-info"> 2186 <span>@ConsumnerPriceWithVatFormatted</span> 2187 </div> 2188 2189 </div> 2190 2191 2192 2193 2194 } 2195 2196 } 2197 </div> 2198 </div> 2199 </div> 2200 </a> 2201 2202 @if (!hideCart) 2203 { 2204 string simProdDisabledState = ""; 2205 var getSimProductId = productId; 2206 2207 simProdStock = HelperClass.StockValue(getSimProductId); 2208 2209 2210 if (simProdStock <= 2) 2211 { 2212 simProdDisabledState = "disabled card"; 2213 } 2214 2215 2216 2217 <form class="form-inline product-card-buy-button @buttonClass @simProdDisabledState "> 2218 <span> 2219 <button id="btnBuy" 2220 onclick="Cart.addToBasket(@ProductsPageId, '@productId', '@productNumberClean', this);" 2221 class="btn btn-default @buttonClass" type="button" style="float: right; margin-top: -35px;"> 2222 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> 2223 <polygon class="st0" points="152.8 42.3 57.1 42.3 36.6 -40.7 18.7 -40.7 18.7 -54.7 47.6 -54.7 68 28.3 143 28.3 160.7 -20.7 64.6 -19.9 64.5 -33.9 180.7 -34.9 " /> 2224 <path class="st0" d="M77.1 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6 11.9 0 21.6 9.7 21.6 21.6C98.7 70.9 89 80.6 77.1 80.6zM77.1 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6 4.2 0 7.6-3.4 7.6-7.6C84.7 54.9 81.3 51.5 77.1 51.5z" /> 2225 <path class="st0" d="M137.4 80.6c-11.9 0-21.6-9.7-21.6-21.6 0-11.9 9.7-21.6 21.6-21.6S159 47.1 159 59C159 70.9 149.3 80.6 137.4 80.6zM137.4 51.5c-4.2 0-7.6 3.4-7.6 7.6 0 4.2 3.4 7.6 7.6 7.6s7.6-3.4 7.6-7.6C145 54.9 141.6 51.5 137.4 51.5z" /> 2226 <polygon class="st0" points="124.6 -22.6 97.6 -50.9 75.4 -24.5 64.6 -33.5 96.9 -71.9 134.7 -32.3 " /> 2227 <polygon class="st0" points="172.6 -23.6 133.4 -52.5 117 -36.8 107.3 -46.9 132.3 -70.7 180.9 -34.8 " /> 2228 <path d="M19 5.8L19 5.8l-5.4-4 -2 1.9 -1.9-2L6.1 5.9h0l0 1.5 10.7-0.1 -2 5.5H6.5L4.2 3.6H1v1.6h2l2.3 9.2H6c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.3-1.4-0.9-1.9h3.7c-0.5 0.4-0.9 1.1-0.9 1.9 0 1.3 1.1 2.4 2.4 2.4s2.4-1.1 2.4-2.4c0-0.8-0.4-1.4-0.9-1.9h0.2L19 5.8zM8.2 5.9L9.8 4l1.8 1.8L8.2 5.9zM13.7 5.8l-1-1 1-1 2.7 2L13.7 5.8zM7.5 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C8.3 16.7 7.9 17 7.5 17zM14.2 17c-0.5 0-0.8-0.4-0.8-0.8 0-0.5 0.4-0.8 0.8-0.8 0.5 0 0.8 0.4 0.8 0.8C15 16.7 14.6 17 14.2 17z" /> 2229 <polygon points="19 5.8 19 5.8 19 5.8 " /> 2230 </svg> 2231 @if (loggedIn) 2232 { 2233 @Translate("productBuyButtonText", "Köp"); 2234 } 2235 <i class="fa fa-refresh"></i> 2236 </span> 2237 </form> 2238 2239 2240 } 2241 2242 </div> 2243 2244 </div> 2245 2246 } 2247 2248 2249 </div> 2250 2251 } 2252 } 2253 2254 2255 2256 </div> 2257 </div> 2258 </div> 2259 </div> 2260 <!--End Similar products --> 2261 } 2262 </div> 2263 2264 </section> 2265 2266 2267 @if (imgFunctions) 2268 { 2269 <div class="modal fade y-modalCarousel" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 2270 <div class="modal-dialog"> 2271 2272 <button class="close" type="button" data-dismiss="modal"> 2273 <i class="fa fa-close"></i> 2274 </button> 2275 2276 <div id="modalCarousel" class="carousel slide"> 2277 <div class="carousel-inner"> 2278 </div> 2279 2280 @if (imgControl) 2281 { 2282 <a class="left carousel-control" href="#modalCarousel" data-slide="prev"> 2283 <i class="fa fa-angle-left"></i> 2284 </a> 2285 <a class="right carousel-control" href="#modalCarousel" data-slide="next"> 2286 <i class="fa fa-angle-right"></i> 2287 </a> 2288 } 2289 <span class="cl-area" data-dismiss="modal"></span> 2290 </div> 2291 </div> 2292 </div> 2293 } 2294 2295 2296 2297 2298 2299 @functions { 2300 string GetPageContent(int pageId) 2301 { 2302 2303 try 2304 { 2305 string output = null; 2306 2307 var page = ServiceLocator.Current.GetPageService().GetPage(pageId); 2308 2309 if (!string.IsNullOrEmpty(page.ItemType) && !string.IsNullOrEmpty(page.ItemId)) 2310 { 2311 var item = Dynamicweb.Content.Items.Item.GetItemById(page.ItemType, page.ItemId); 2312 output = "<div>" + item["General_TextEditor"] + "</div>"; 2313 } 2314 else 2315 { 2316 var contentPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(pageId); 2317 output = contentPageView.Output(); 2318 2319 // Remove everything but the actual page content 2320 var startTag = "<!--PageContentStart-->"; 2321 var endTag = "<!--PageContentEnd-->"; 2322 int startIndex = output.IndexOf(startTag) + startTag.Length; 2323 int endIndex = output.IndexOf(endTag, startIndex); 2324 output = output.Substring(startIndex, endIndex - startIndex); 2325 } 2326 2327 return output; 2328 } 2329 catch { } 2330 return null; 2331 } 2332 2333 } 2334 2335 <!-- Modals --> 2336 2337 @using Dynamicweb.Rendering.Translation 2338 @using System; 2339 2340 2341 @{ var LinkText = Translate("retail_search_webshop_button", "Webshop"); 2342 //var EAN = GetString("Ecom:Product:Field.produktEAN"); 2343 2344 } 2345 2346 2347 @*<input type="hidden" id="EAN" value="@EAN" />*@ 2348 2349 <div class="modal fade" id="findStore" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 2350 <div class="modal-dialog" role="document"> 2351 <div class="modal-content"> 2352 <div class="modal-header"> 2353 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 2354 <h1 class="modal-title" id="myModalLabel">@Translate("ProductlistBuy", "Buy")</h1> 2355 </div> 2356 <div class="modal-body col-sm-12"> 2357 <div class="col-lg-6 col-md-12 modal-search-form"> 2358 <form class="search-form"> 2359 <div class="row"> 2360 <button type="submit" class="button-primary"><i class="fa fa-search"></i></button> 2361 <input type="text" class="u-full-width search-field" autofocus placeholder="@Translate("reseller_post_number", "Enter postal number")" value=""> 2362 </div> 2363 <div class="row address"> 2364 <small class="formatted-address"></small> 2365 </div> 2366 </form> 2367 @*<ul class="search-filter"> 2368 @{ 2369 2370 var BrandlistListId = (int) Pageview.Area.Item["BrandList"]; 2371 var BrandlistItemList = Dynamicweb.Content.Items.ItemList.GetItemListById(BrandlistListId); 2372 var Brandlsloop = BrandlistItemList.Relations.Cast<Dynamicweb.Content.Items.Item>(); 2373 2374 foreach (var i in Brandlsloop) 2375 { 2376 2377 string brand = ""; 2378 try 2379 { 2380 string nameId = i["NameID"].ToString(); 2381 2382 2383 if (!String.IsNullOrEmpty(nameId)) 2384 { 2385 brand = nameId; 2386 2387 <li><label for="@brand"><input type="checkbox" id="@brand"><icon class="check"></icon>@brand</label></li> 2388 } 2389 2390 } 2391 catch (Exception ex) 2392 { 2393 Console.WriteLine(ex.ToString()); 2394 } 2395 2396 2397 } 2398 } 2399 </ul>*@ 2400 <div class="stores-list"></div> 2401 </div> 2402 <div class="col-lg-6 col-md-12 webshops"> 2403 <h2>@Translate("retail_search_webshop", "Online shops")</h2> 2404 2405 <div class="links"> 2406 <ul> 2407 @{ 2408 var ResellersListId = (int) Pageview.Area.Item["Resellers_List"]; 2409 var ResellersItemList = Dynamicweb.Content.Items.ItemList.GetItemListById(ResellersListId); 2410 var Resellersloop = ResellersItemList.Relations.Cast<Dynamicweb.Content.Items.Item>(); 2411 string curentBrand = GetString("Ecom:Product:Field.productTrademark"); 2412 2413 2414 foreach (var c in Resellersloop) 2415 { 2416 string linkText = c["LinkText"].ToString(); 2417 string landinpageLink = String.Empty; 2418 try 2419 { 2420 landinpageLink = c[curentBrand].ToString(); 2421 //landinpageLink = c["Chasseur"].ToString(); 2422 2423 2424 if (!String.IsNullOrEmpty(landinpageLink)) 2425 { 2426 2427 <li> 2428 @linkText 2429 <a href="@landinpageLink" target="_blank" title="@linkText" class="button">@Translate("retail_search_webshop_button", "Webshop")</a> 2430 </li> 2431 2432 } 2433 2434 2435 } 2436 catch (Exception ex) 2437 { 2438 2439 Console.WriteLine(ex.ToString()); 2440 } 2441 2442 } 2443 2444 } 2445 2446 2447 </ul> 2448 </div> 2449 </div> 2450 </div> 2451 </div> 2452 </div> 2453 </div> 2454 2455 2456 2457 @{ 2458 var hostUrl = GetGlobalValue("Global:Request.Host"); 2459 } 2460 2461 @SnippetStart("FacebookOGProductMeta") 2462 2463 <meta property='og:type' content='website' /> 2464 <meta property='og:title' content='@GetString("Ecom:Product.Name")' /> 2465 <meta property='og:image' content='@GetGlobalValue("Global:Request.Scheme")://@hostUrl/Admin/Public/GetImage.ashx?image=@curprodpath/@GetString("Ecom:Product.Number")_1.jpg&Compression=85&width=400&height=400&Crop=5&altFmImage_path=/Files/Images/NoImageAvailable.png' /> 2466 <meta property='og:description' content='@GetString("Ecom:Product:Field.DescriptionLong")'/> 2467 <meta property='og:url' content='@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@GetGlobalValue("Global:Pageview.Url")' /> 2468 2469 @SnippetEnd("FacebookOGProductMeta")

Meny

Cookies på sidan

Denna webbplats använder cookies (kakor) för statistik, anpassat innehåll och annonser.

Du kan alltid ta bort sparade kakor genom de avancerade inställningarna i din webbläsare.

Visa detaljer
F