• Sign in
    • 0
    • Swedish
    Sign in 0
    • Produkter
      Staket och grindar
      Staket och grindar
      Trästaket
      Kompositstaket
      Stålstaket
      Glasstaket
      Pilstaket
      Polyrattanstaket
      Alla trädgårdsgrindar
      Stolpar
      Tillbehör
      Trädgården
      Trädgården
      Terrass trappor
      Pergola
      Daylife
      Högbädd
      Planterings- och blomlådor
      Cubic beslag
      Soptunneskydd
      Torkstativ
      Outdoor fitness
      Rosenportal
      Cubic galler
      Värmepumpskydd
      Vangstycken
      Möbler
      Möbler
      Möbelgrupper
      Bord/bänkset
      Bord/bänkset för barn
      Bänkar
      Trallmöbler
      Planterings- & grillbord
      Lek
      Lek
      Lekställningar
      Gungställningar
      Lekstugor
      Sandlåda/bänk
      Bord/bänkset för barn
      Tillbehör
      Utemiljö
      Utemiljö
      Classic trädgårdshus
      Multi trädgårdshus
      Nordic trädgårdshus
      Redskapsbod/Kombihus
      Cykelskjul
      Eldstuga
      Vedskjul
      Taklösningar
      Picknickhus
      Växthus/Redskapsbod
      Vindskydd
      Utomhus tillbehör
    Produkter
    • Nyheter 2025
    • Inspiration
    • Kataloger
    • FAQ
    Nyheter 2025 Inspiration Kataloger FAQ
    Outlet
    Sök
      • Sign in
        • Logga in
      • 0
      • Swedish
      Sign in 0
      Sorry. There is nothing to view here

      Produkter

      • Staket och grindar
      • Trädgården
      • Möbler
      • Lek
      • Utemiljö
      Staket och grindar Trädgården Möbler Lek Utemiljö

      Service

      • Hitta en återförsäljare
      • Ring oss
      • Kontakt os
      Hitta en återförsäljare Ring oss Kontakt os

      Inspiration

      • Idéer för uterum
      • Idéer för staketprojekt
      • Idéer för trädgårdsinredning
      • Idéer för en barnvänlig trädgård
      • Idéer för nya trädgårdsmöbler
      • Guider och DIY-tips
      Idéer för uterum Idéer för staketprojekt Idéer för trädgårdsinredning Idéer för en barnvänlig trädgård Idéer för nya trädgårdsmöbler Guider och DIY-tips

      PLUS

      • Om oss
      • Nyheter från PLUS
      • Hållbarhet
      • Anställda
      • Försäljningsvillkor & leverans
      • Returer & reklamationer
      • Policy för cookies
      • Integritetspolicy
      Om oss Nyheter från PLUS Hållbarhet Anställda Försäljningsvillkor & leverans Returer & reklamationer Policy för cookies Integritetspolicy
      PLUS A/S • Ådalen 13B • DK-6600 Vejen • CVR: 34564310 • ✆ +45 79963333 • ✉ plus@plus.dk
      • Facebook
      • Instagram
      • LinkedIn
      • Pinterest
      • Youtube
      Facebook Instagram LinkedIn Pinterest Youtube
      Trustpilot
      Error executing template "Designs/Swift/Paragraph/Swift_Accordion.cshtml"
      System.NullReferenceException: Object reference not set to an instance of an object.
         at CompiledRazorTemplates.Dynamic.RazorEngine_ca5460320a5b44e4bfbc1d8f002e6a05.Execute() in C:\inetpub\wwwroot\plus-prod\Files\Templates\Designs\Swift\Paragraph\Swift_Accordion.cshtml:line 221
         at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
         at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
         at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
         at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
         at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
         at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
         at Dynamicweb.Rendering.Template.RenderRazorTemplate()
      
      1 @using System.Text.RegularExpressions; 2 @using Dynamicweb.Core 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using System 5 @using System.Collections.Generic 6 @using System.Linq 7 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 8 9 @{ 10 string title = Model.Item.GetString("Title"); 11 var accordionItems = Model.Item?.GetItems("Accordion_Items") ?? Enumerable.Empty<Dynamicweb.Frontend.ItemViewModel>().ToList(); 12 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 13 string contentPadding = Model.Item.GetRawValueString("ContentPadding", ""); 14 contentPadding = contentPadding == "none" ? "p-0" : contentPadding; 15 contentPadding = contentPadding == "small" ? "p-3 p-md-3" : contentPadding; 16 contentPadding = contentPadding == "large" ? "p-5 p-md-5" : contentPadding; 17 int countJsonObj = 0; 18 19 } 20 21 <div class="accordion@(theme) @(contentPadding) h-100 item_@Model.Item.SystemName.ToLower()" id="accordion-@Pageview.CurrentParagraph.ID"> 22 @RenderTitle() 23 @foreach (var item in accordionItems) 24 { 25 <div class="accordion-item"> 26 <h2 class="accordion-header" id="heading-@Pageview.CurrentParagraph.ID-@item.Id"> 27 <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-@Pageview.CurrentParagraph.ID-@item.Id" aria-expanded="false" aria-controls="collapse-@Pageview.CurrentParagraph.ID-@item.Id"> 28 @item.GetString("Title") 29 </button> 30 </h2> 31 <div id="collapse-@Pageview.CurrentParagraph.ID-@item.Id" class="accordion-collapse collapse" aria-labelledby="heading-@Pageview.CurrentParagraph.ID-@item.Id" data-bs-parent="#accordion-@Pageview.CurrentParagraph.ID"> 32 <div class="accordion-body mb-0-last-child"> 33 @item.GetRawValueString("Content") 34 35 @{ 36 //start Slider settings 37 bool productViewModelFound = false; 38 ProductViewModel product = new ProductViewModel(); 39 40 ProductViewModelSettings productSetting = new ProductViewModelSettings 41 { 42 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 43 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 44 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 45 ShopId = Pageview.Area.EcomShopId 46 }; 47 48 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 49 { 50 productViewModelFound = true; 51 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 52 } 53 if (Pageview.IsVisualEditorMode && !productViewModelFound) 54 { 55 if (Pageview.Item["DummyProduct"] != null) 56 { 57 productViewModelFound = true; 58 string dummyProductId = ""; 59 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 60 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 61 if (productList.Products != null) 62 { 63 foreach (var p in productList.Products) { dummyProductId = p.Id; } 64 ProductViewModel dummyProduct = dummyProductId != "" ? ViewModelFactory.CreateView(productSetting, dummyProductId) : new ProductViewModel(); 65 product = dummyProduct; 66 } 67 else 68 { 69 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 70 } 71 } 72 else if (Pageview.Item["DummyProduct"] == null) 73 { 74 productViewModelFound = true; 75 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 76 } 77 } 78 79 string titleSlider = item.GetString("SliderTitle") != null ? item.GetString("SliderTitle") : Translate("Products"); 80 string customID = item.GetString("Id") != null ? item.GetString("SliderTitle") : Translate("Products"); 81 string customSys = item.GetString("SystemName") != null ? item.GetString("SystemName") : Translate("Products"); 82 83 string campaignValues = item.GetRawValueString("CampaignBadges", string.Empty); 84 85 //Styling 86 string titleFontSize = item.GetRawValueString("TitleFontSize", "h3"); 87 string subtitleFontSize = item.GetRawValueString("SubtitleFontSize", "fs-5"); 88 string buttonStyle = item.GetRawValueString("ButtonStyle", ""); 89 buttonStyle = buttonStyle == "primary" ? " btn-primary" : buttonStyle; 90 buttonStyle = buttonStyle == "secondary" ? " btn-secondary" : buttonStyle; 91 buttonStyle = buttonStyle == "link" ? " btn-link" : buttonStyle; 92 string maxWidth = item.GetRawValueString("TextReadability", ""); 93 maxWidth = maxWidth == "max-width-on" ? " mw-75ch" : maxWidth; 94 maxWidth = maxWidth == "max-width-off" ? "" : maxWidth; 95 //string productsCount = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("ProductsCount").ToString()) ? Model.Item.GetRawValueString("ProductsCount").ToString() : ""; 96 97 string generalTheme = !string.IsNullOrWhiteSpace(item.GetString("GeneralTheme")) ? " theme " + item.GetRawValueString("GeneralTheme").Replace(" ", "").Trim().ToLower() : ""; 98 string themeSlider = !string.IsNullOrWhiteSpace(item.GetRawValueString("SliderTheme")) ? " theme " + item.GetRawValueString("SliderTheme").Replace(" ", "").Trim().ToLower() : ""; 99 string imageTheme = !string.IsNullOrWhiteSpace(item.GetRawValueString("ImageTheme")) ? " theme " + item.GetRawValueString("ImageTheme").Replace(" ", "").Trim().ToLower() : ""; 100 101 //Link generation 102 string pageId = item.GetLink("ProductSliderServicePage") != null ? item.GetLink("ProductSliderServicePage").PageId.ToString() : ""; 103 string servicePageByNavigationTag = GetPageIdByNavigationTag("ProductSliderService") != 0 ? GetPageIdByNavigationTag("ProductSliderService").ToString() : ""; 104 pageId = pageId == "" ? servicePageByNavigationTag : pageId; 105 106 string url = "/Default.aspx?ID=" + pageId; 107 if (!url.Contains("LayoutTemplate")) 108 { 109 url += url.Contains("?") ? "&LayoutTemplate=Designs/Swift/Swift_PageClean.cshtml" : "?LayoutTemplate=Designs/Swift/Swift_PageClean.cshtml"; 110 } 111 if (Pageview.IsVisualEditorMode) 112 { 113 url += "&VisualEdit=True"; 114 } 115 116 bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Ecommerce.DynamicwebLiveIntegration.TemplatesHelper.IsLazyLoadingForProductInfoEnabled; 117 if (isLazyLoadingForProductInfoEnabled) 118 { 119 url += "&getproductinfo=true"; 120 } 121 122 //Source type 123 string sourceType = item.GetRawValueString("RelationType", "trending"); 124 IList<string> relateFromGroupIds = new List<string> { }; 125 IList<string> relateFromProductIds = new List<string> { }; 126 127 //--- VARIANTS --- 128 ProductListViewModel productsToRelateToVariants = item.GetValue<ProductListViewModel>("ProductsToRelateToVariants"); 129 if (productsToRelateToVariants != null && sourceType == "variants") 130 { 131 foreach (var productSelection in productsToRelateToVariants.Products) 132 { 133 relateFromProductIds.Add(productSelection.Id); 134 } 135 } 136 137 //--- MOST SOLD --- 138 IList<ProductGroupViewModel> groupsToRelateToMostSold = item.GetValue<IList<ProductGroupViewModel>>("GroupsToRelateToMostSold"); 139 if (groupsToRelateToMostSold != null && sourceType == "most-sold") 140 { 141 foreach (var fromGroup in groupsToRelateToMostSold) 142 { 143 relateFromGroupIds.Add(fromGroup.Id); 144 } 145 } 146 147 //--- TRENDING --- 148 IList<ProductGroupViewModel> groupsToRelateToTrending = item.GetValue<IList<ProductGroupViewModel>>("GroupsToRelateToTrending"); 149 if (groupsToRelateToTrending != null && sourceType == "trending") 150 { 151 foreach (var fromGroup in groupsToRelateToTrending) 152 { 153 relateFromGroupIds.Add(fromGroup.Id); 154 } 155 } 156 157 //--- LATEST --- 158 IList<ProductGroupViewModel> groupsToRelateToLatest = item.GetValue<IList<ProductGroupViewModel>>("GroupsToRelateToLatest"); 159 if (groupsToRelateToLatest != null && sourceType == "latest") 160 { 161 foreach (var fromGroup in groupsToRelateToLatest) 162 { 163 relateFromGroupIds.Add(fromGroup.Id); 164 } 165 } 166 167 //--- FREQUENTLY BOUGHT --- 168 ProductListViewModel productsToRelateTo = item.GetValue<ProductListViewModel>("ProductsToRelateTo"); 169 if (productsToRelateTo != null && sourceType == "frequently") 170 { 171 foreach (var fromProduct in productsToRelateTo.Products) 172 { 173 relateFromProductIds.Add(fromProduct.Id); 174 } 175 } 176 177 //--- SELECTED PRODUCTS --- 178 ProductListViewModel products = item.GetValue<ProductListViewModel>("Products"); 179 if (products != null && sourceType == "selected") 180 { 181 foreach (var productSelection in products.Products) 182 { 183 relateFromProductIds.Add(productSelection.Id); 184 } 185 } 186 187 //--- RELATED PRODUCTS --- 188 if (sourceType == "related-products") 189 { 190 ProductListViewModel selectedRelationProduct = item.GetValue<ProductListViewModel>("ProductsToRelateTo2"); 191 192 if (selectedRelationProduct?.Products != null) 193 { 194 if (selectedRelationProduct.Products.Count > 0) 195 { 196 int productCount = 0; 197 foreach (var selectedProduct in selectedRelationProduct.Products) 198 { 199 if (productCount == 0) 200 { 201 product = selectedProduct; 202 productCount++; 203 } 204 } 205 } 206 } 207 208 if (product?.RelatedGroups != null) 209 { 210 foreach (var group in product.RelatedGroups) 211 { 212 foreach (var relatedProduct in group.Products) 213 { 214 relateFromProductIds.Add(relatedProduct.ProductId); 215 } 216 } 217 } 218 } 219 220 //Create group id collection and products id collection strings 221 string groupIds = productViewModelFound ? product.PrimaryOrDefaultGroup.Id : string.Join(",", relateFromGroupIds); 222 string productIds = productViewModelFound && relateFromProductIds.Count == 0 ? product.Id : string.Join(",", relateFromProductIds); 223 224 //Set the parameters to the url 225 string linkParameters = ""; 226 linkParameters += sourceType != "related-products" ? "&GroupId=" + groupIds : ""; 227 linkParameters += !string.IsNullOrEmpty(productIds) ? "&MainProductId=" + productIds : ""; 228 var productListPageId = GetPageIdByNavigationTag("Shop"); 229 string link = "/Default.aspx?ID=" + productListPageId + linkParameters; 230 231 // Slider settings (documentation: swiffyslider.com/configuration) 232 string navigationStyle = $"{item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; 233 string navigationPlacement = $"{item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; 234 string indicatorStyle = $"{item.GetRawValueString("IndicatorStyle", "slider-indicators-hidden")}"; 235 string revealSlides = item.GetRawValueString("RevealSlides", "no-reveal") == "reveal" ? "slider-item-reveal" : string.Empty; 236 string navigationAlwaysVisible = (item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; 237 string navigationVisibleOnTouch = (item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; 238 string navigationShowScrollbar = (item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; 239 string navigationSmall = (item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; 240 string navigationInvertColors = (item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; 241 string navigationSlideEntirePage = (item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; 242 string navigationNoLoop = (item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; 243 string indicatorsOutsideSlider = (item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; 244 string indicatorsHighlightActive = (item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; 245 string indicatorsInvertColors = (item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; 246 string indicatorsVisibleOnSmallDevices = (item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; 247 bool showFavoritesSelectorMasterProduct = item.GetBoolean("ShowFavoritesSelectorMasterProduct"); 248 bool hideAddToCartButtons = item.GetBoolean("HideAddToCartButtons"); 249 var bagdeItems = item?.GetItems("Badges") ?? Enumerable.Empty<Dynamicweb.Frontend.ItemViewModel>().ToList(); 250 251 bool productsFound = true; 252 if (string.IsNullOrEmpty(groupIds) && string.IsNullOrEmpty(productIds)) 253 { 254 if (Pageview.IsVisualEditorMode) 255 { 256 productIds = product.Id; 257 sourceType = "selected"; 258 } 259 else 260 { 261 productsFound = false; 262 } 263 } 264 //end Slider settings 265 } 266 267 @*Container element for the request*@ 268 @if (productsFound) 269 { 270 <form method="post" action="@url" id="RelatedProductsForm_@Model.Item.ParagraphID" data-response-target-element="RelatedProducts_@Model.ID" data-preloader="inline" data-update-url="false" class="@Model.ID item_@Model.Item.SystemName.ToLower()"> 271 <input type="hidden" name="ModelID" value="@Model.ID"> 272 273 @*--- SLIDER SETTINGS ---*@ 274 <input type="hidden" name="NavigationStyle" value="@navigationStyle"> 275 <input type="hidden" name="NavigationPlacement" value="@navigationPlacement"> 276 <input type="hidden" name="IndicatorStyle" value="@indicatorStyle"> 277 <input type="hidden" name="RevealSlides" value="@revealSlides"> 278 <input type="hidden" name="NavigationAlwaysVisible" value="@(navigationAlwaysVisible)"> 279 <input type="hidden" name="NavigationVisibleOnTouch" value="@(navigationVisibleOnTouch)"> 280 <input type="hidden" name="NavigationShowScrollbar" value="@(navigationShowScrollbar)"> 281 <input type="hidden" name="NavigationSmall" value="@(navigationSmall)"> 282 <input type="hidden" name="NavigationInvertColors" value="@(navigationInvertColors)"> 283 <input type="hidden" name="NavigationNoLoop" value="@(navigationNoLoop)"> 284 <input type="hidden" name="NavigationSlideEntirePage" value="@(navigationSlideEntirePage)"> 285 <input type="hidden" name="IndicatorsOutsideSlider" value="@(indicatorsOutsideSlider)"> 286 <input type="hidden" name="IndicatorsHighlightActive" value="@(indicatorsHighlightActive)"> 287 <input type="hidden" name="IndicatorsInvertColors" value="@(indicatorsInvertColors)"> 288 <input type="hidden" name="IndicatorsVisibleOnSmallDevices" value="@(indicatorsVisibleOnSmallDevices)"> 289 <input type="hidden" name="ShowFavoritesSelectorMasterProduct" value="@(showFavoritesSelectorMasterProduct.ToString())"> 290 <input type="hidden" name="HideAddToCartButtons" value="@(hideAddToCartButtons.ToString())"> 291 292 @*--- VARIANTS ---*@ 293 @if (sourceType == "variants") 294 { 295 <input type="hidden" name="isVariant" value="true"> 296 <input type="hidden" name="MainProductID" id="MainProductID_@Model.ID" value="@productIds"> 297 } 298 299 @*--- MOST SOLD ---*@ 300 @if (sourceType == "most-sold") 301 { 302 <input type="hidden" name="SortBy" value="OrderCount"> 303 if (groupIds != "") 304 { 305 <input type="hidden" name="GroupId" value="@groupIds"> 306 } 307 } 308 309 @*--- TRENDING ---*@ 310 @if (sourceType == "trending") 311 { 312 <input type="hidden" name="SortBy" value="OrderCountGrowth"> 313 if (groupIds != "") 314 { 315 <input type="hidden" name="GroupId" value="@groupIds"> 316 } 317 } 318 319 @*--- FREQUENTLY BOUGHT ---*@ 320 @if (sourceType == "frequently" && !string.IsNullOrEmpty(productIds)) 321 { 322 <input type="hidden" name="BoughtWithProductIds" value="[@productIds]"> 323 } 324 325 @*--- LATEST ---*@ 326 @if (sourceType == "latest") 327 { 328 <input type="hidden" name="SortBy" value="Created"> 329 <input type="hidden" name="GroupId" value="@groupIds"> 330 } 331 332 @*--- SELECTED PRODUCTS ---*@ 333 @if (sourceType == "selected") 334 { 335 <input type="hidden" name="MainProductID" id="MainProductID_@Model.ID" value="@productIds"> 336 } 337 338 @*--- RELATED PRODUCTS ---*@ 339 @if (sourceType == "related-products") 340 { 341 <input type="hidden" name="MainProductID" id="MainProductID_@Model.ID" value="@productIds"> 342 } 343 344 @* General parameters *@ 345 <input type="hidden" name="Link" value="@link"> 346 <input type="hidden" name="HideTitle" value="@Model.Item.GetString("HideTitle")"> 347 <input type="hidden" name="SliderCollectionID" id="SliderCollectionID_@Model.ID" value="@customID"> 348 <input type="hidden" name="SortOrder" value="DESC"> 349 350 @if (Model.Item.GetInt32("ProductsCount") != 0) 351 { 352 <input type="hidden" name="PageSize" value="@Model.Item.GetInt32("ProductsCount")"> 353 } 354 <input type="hidden" name="HeadingTitle" id="RelatedProductsTitle_@Model.ID" value="@titleSlider"> 355 @if (!string.IsNullOrEmpty(Model.Item.GetString("Subtitle"))) 356 { 357 <input type="hidden" name="Subtitle" value="@Model.Item.GetString("Subtitle")"> 358 } 359 @if (!string.IsNullOrEmpty(Model.Item.GetString("LinkText"))) 360 { 361 <input type="hidden" name="LinkText" value="@Model.Item.GetString("LinkText")"> 362 } 363 @if (!string.IsNullOrEmpty(Model.Item.GetString("ImageAspectRatio"))) 364 { 365 string ratio = Model.Item.GetRawValueString("ImageAspectRatio", ""); 366 ratio = ratio != "0" ? ratio : ""; 367 <input type="hidden" name="ImageAspectRatio" value="@ratio"> 368 } 369 @if (!string.IsNullOrEmpty(item.GetString("Layout"))) 370 { 371 <input type="hidden" name="Layout" value="@item.GetRawValueString("Layout")"> 372 } 373 @if (titleFontSize != "") 374 { 375 <input type="hidden" name="TitleFontSize" value="@titleFontSize"> 376 } 377 @if (subtitleFontSize != "") 378 { 379 <input type="hidden" name="SubtitleFontSize" value="@subtitleFontSize"> 380 } 381 @if (buttonStyle != "") 382 { 383 <input type="hidden" name="ButtonStyle" value="@buttonStyle"> 384 } 385 @if (generalTheme != "") 386 { 387 <input type="hidden" name="GeneralTheme" value="@generalTheme"> 388 } 389 @if (themeSlider != "") 390 { 391 <input type="hidden" name="Theme" value="@themeSlider"> 392 } 393 @if (imageTheme != "") 394 { 395 <input type="hidden" name="ImageTheme" value="@imageTheme"> 396 } 397 @if (!string.IsNullOrEmpty(Model.Item.GetString("ContentPadding"))) 398 { 399 string contentPaddingSlider = Model.Item.GetRawValueString("ContentPadding"); 400 <input type="hidden" name="ContentPadding" value="@contentPaddingSlider"> 401 } 402 <input type="hidden" name="TextReadability" value="@maxWidth"> 403 <input type="hidden" name="ParentColumnSize" id="ParentColumnSize_@Model.ID" value="12"> 404 405 @*--- PLUS BADGES ---*@ 406 @{ 407 var count = 0; 408 foreach (var badge in bagdeItems) 409 { 410 count++; 411 <input type="hidden" name="Plusbadge-title_@count" value="@badge.GetString("Title")"> 412 <input type="hidden" name="Plusbadge-image_@count" value="@badge.GetString("Image")"> 413 } 414 } 415 <input type="hidden" name="Plusbadge-totalCount" value="@count"> 416 417 <input type="hidden" name="SaleBadgeType" value="@item.GetRawValue("SaleBadgeType")"> 418 <input type="hidden" name="SaleBadgeCssClassName" value="@item.GetRawValue("SaleBadgeDesign")"> 419 <input type="hidden" name="NewBadgeCssClassName" value="@item.GetRawValue("NewBadgeDesign")"> 420 <input type="hidden" name="NewPublicationDays" value="@item.GetInt32("NewPublicationDays")"> 421 422 @if (campaignValues != "") 423 { 424 <input type="hidden" name="CampaignBadgesValues" value="@campaignValues"> 425 } 426 </form> 427 428 <script type="module" src="~/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> 429 <script type="module"> 430 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 431 </script> 432 433 if (Pageview.IsVisualEditorMode) 434 { 435 <div class="alert alert-info" role="alert"> 436 <span>@Translate("Product slider: Edit this column to configure")</span> 437 </div> 438 } 439 440 if (sourceType != "related-products") 441 { 442 <div class="w-100 h-100"> 443 <div id="RelatedProducts_@Model.ID" class="h-100 swift_product_slider_container"></div> 444 </div> 445 } 446 447 else if (product?.RelatedGroups != null) 448 { 449 @* Create multiple slider containers, if type is Product relation *@ 450 @* Sorting product related groups so Addon *@ 451 product.RelatedGroups.Sort((u1, u2) => u1.Id.CompareTo(u2.Id)); 452 453 <div class="grid w-100 h-100@(generalTheme)" style="grid-row-gap: 4rem"> 454 @foreach (var group in product.RelatedGroups) 455 { 456 <div id="RelatedProducts_@(Model.ID)_@group.Id" class="g-col-12 h-100 swift_product_slider_container"></div> 457 } 458 </div> 459 } 460 461 @* Initialize *@ 462 if (sourceType != "related-products") 463 { 464 <script type="module"> 465 if (document.querySelector("#RelatedProducts_@Model.ID").closest("[data-col-size]")) { 466 document.querySelector("#ParentColumnSize_@Model.ID").value = document.querySelector("#RelatedProducts_@Model.ID").closest("[data-col-size]").getAttribute("data-col-size"); 467 } 468 swift.PageUpdater.Update(document.querySelector("#RelatedProductsForm_@Model.ID")).then(function () { 469 setTimeout(function() { 470 const isVisualEditor = @(Converter.ToString(Pageview.IsVisualEditorMode).ToLowerInvariant()); 471 const productSliderContainer = document.querySelector(".swift_product_slider_container"); 472 473 if (productSliderContainer && productSliderContainer.innerHTML !== "") { 474 productSliderContainer.classList.remove("d-none"); 475 } 476 else if (!isVisualEditor) { 477 productSliderContainer.closest("[class*=column]").classList.add("d-none"); 478 } 479 }, 150); 480 }); 481 </script> 482 } 483 else if (product?.RelatedGroups != null) 484 { 485 @* Create multiple sliders, if type is Product relation *@ 486 foreach (var group in product.RelatedGroups) 487 { 488 IList<string> fromProductIds = new List<string> { }; 489 490 foreach (var relatedProduct in group.Products) 491 { 492 fromProductIds.Add(relatedProduct.ProductId); 493 } 494 <script type="module"> 495 document.querySelector("#ParentColumnSize_@Model.ID").value = document.querySelector("#RelatedProducts_@(Model.ID)_@group.Id").closest("[data-col-size]").getAttribute("data-col-size"); 496 document.querySelector("#MainProductID_@Model.ID").value = "@string.Join(",", fromProductIds)"; 497 document.querySelector("#RelatedProductsTitle_@Model.ID").value = "@group.Name"; 498 document.querySelector("#SliderCollectionID_@Model.ID").value = "@group.Id"; 499 document.querySelector("#RelatedProductsForm_@Model.ID").setAttribute("data-response-target-element", "RelatedProducts_@(Model.ID)_@group.Id"); 500 501 swift.PageUpdater.Update(document.querySelector("#RelatedProductsForm_@Model.ID")); 502 </script> 503 } 504 } 505 } 506 </div> 507 </div> 508 </div> 509 } 510 @if (Dynamicweb.Frontend.PageView.Current().Page.NavigationTag == "faq") 511 { 512 <script id="JSONLD_@Model.Item.Id" type="application/ld+json"> 513 { 514 "@@context": "https://schema.org", 515 "@@type": "FAQPage", 516 "mainEntity": [ 517 @foreach (var item in accordionItems) 518 { 519 if (countJsonObj > 0) 520 { 521 <text>,</text> 522 523 } 524 <text> 525 { 526 "@@type": "Question", 527 "name": "@item.GetString("Title"). ", 528 "acceptedAnswer": { 529 "@@type": "Answer", 530 "text": "@Regex.Replace(item.GetRawValueString("Content"), "<.*?>", String.Empty).Replace("\n", "").Replace("\r", "")" 531 } 532 } 533 </text> 534 countJsonObj++; 535 } 536 ] 537 } 538 </script> 539 } 540 </div> 541 542 @helper RenderTitle() 543 { 544 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) 545 { 546 string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "h2"); 547 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 548 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} mb-4\">"; 549 string headingLevelStop = $"</{headingLevel}>"; 550 551 @headingLevelStart 552 @Model.Item.GetString("Title") 553 @headingLevelStop 554 } 555 } 556
      • Facebook
      • Instagram
      • LinkedIn
      • Pinterest
      • Youtube
      Facebook Instagram LinkedIn Pinterest Youtube
      PLUS A/S • Ådalen 13B • DK-6600 Vejen • CVR: 34564310 • ✆ +45 79963333 • ✉ plus@plus.dk
      Trustpilot

        Anmeld os på Google

      Staket och grindar Staket och grindar
      Trästaket
      Tangent
      Harmoni
      Tokyo
      Sendai
      Osaka
      Nagano
      Kyoto
      PLUS Klink Profilstaket
      Plus Plank Profilstaket
      Silence
      Rondo
      Rustik Staket
      Nostalgi
      Decora
      Bergen
      Newline
      Country
      Linea
      Ligno
      Rom
      Vinesse
      Slot
      Retro
      Skagen Lux
      Lista staket
      Kompositstaket
      Artura
      Futura
      Stålstaket
      Stålspaljé
      Basic stålstaket
      Basic räckessystem
      Glasstaket
      Glasstaket rökigt gråsvart
      Glasstaket med handledare i mahogny
      Glasstaket – handledar i mahogny och varmförzinkade stålstolpar
      Glasstaket – svart handledar och stålstolpar
      Glasstaket för runda stolpar
      Härdat glasstaket – för runda stolpar
      Laminerat glasstaket – för runda stolpar
      Glasstaket med svarte glasbeslag
      Glasstaket med varmförzinkade glasbeslag
      Glasgrindar
      Pilstaket
      Pil med ramar
      Pil Lux
      Polyrattanstaket
      Alla trädgårdsgrindar
      Stolpar
      Stolpar och balkar av trä
      Stolpar tryckimpregnerat
      Stolpar svart
      Stolpar vit
      Trästolpar umbra grå
      Profilstolpar
      Stålstolpar
      Stålstolpar för gjutning
      Stålstolpar med fot
      Stolpar för räcken
      Tillbehör
      Beslag och skruvar Beslag och skruvar
      Grindbeslag
      Stolpfötter
      Stolphättor
      Beslagen CUBIC
      Räcken av mahogny
      Efterbehandling
      Dørbeslag
      Staket
      Trädgården Trädgården
      Terrass trappor
      Trappa till terrass 34.2° - tryckimpregnerat trä
      Trappa till terrass 19° - tryckimpregnerat trä
      Terrass trappor 34,2° - varmförzinkat stål
      Pergola
      Daylife
      Högbädd
      Pipe högbädd
      Pipe lösa delar
      Planterings- och blomlådor
      Cubic Living blomlåda
      Cubic blomlådor – svart stålhörn
      Cubic blomlådor – varmgalvaniserat stålhörn
      Circle planteringslådor med hjul
      Plantekasser på hjul
      Plantekasser på ben
      Classic plantekasser
      Cubic beslag
      Cubic beslag
      Cubic vedvägg
      Soptunneskydd
      Soptunneskydd - trä
      Soptunneskydd - minimal underhåll
      Torkstativ
      Outdoor fitness
      Rosenportal
      Cubic galler
      Värmepumpskydd
      Vangstycken
      Möbler Möbler
      Möbelgrupper
      Siesta Living
      Siesta Möbler
      Country Plankset
      Nostalgi Möbelset
      Caféset
      Plankset
      Bord/bänkset
      Classic bord/bänkset
      Zigma bord/bänkset
      Twist bänkbord
      Picnic bänkbord
      Basic bord/bänkset
      Bänkbord
      Wega bänkbord
      Alpha bord/bänkset
      Bord/bänkset för barn
      Alpha junior
      Basic junior
      Bänkar
      Bänker
      Bänker m/ryggstöd
      Lounge bänker
      Trallmöbler
      Planterings- & grillbord
      Lek Lek
      Lekställningar
      Gungställningar
      Lekstugor
      Sandlåda/bänk
      Bord/bänkset för barn
      Alpha junior
      Basic junior
      Tillbehör
      Utemiljö Utemiljö
      Classic trädgårdshus
      Multi trädgårdshus
      Nordic trädgårdshus
      Redskapsbod/Kombihus
      Cykelskjul
      Eldstuga
      Vedskjul
      Taklösningar
      Picknickhus
      Växthus/Redskapsbod
      Vindskydd
      Vindskydd
      Siesta Sommarly
      Vindskydd på hjul
      Utomhus tillbehör
      Nyheter 2025
      Inspiration
      Idéer för uterum
      Gör plats för dina drömmar
      Se fina kundprojekt med våra trädgårdshus
      Trine bygger shelter och trädgårdsförråd under samma tak
      Bygg ditt eget cykelförråd med Diydanmark
      Se hur Poul monterar familjens nya Siesta Sommarskydd
      Växthus och marknadsstånd i Tivoli Friheden
      Bygg ett skydd på hjul - Se fantastiska kundprojekt
      Rikkes magiska sommarhusshelter och byggdag
      Shelterguide - Bygg ett vindskydd i din trädgård eller åk på en vindskyddsturné i Danmark
      Dubbelt vindskydd i ett fritidshus på Djursland
      Idéer för staketprojekt
      Sendai staket kompletterar trädgårdsplanen hos Lena Smedegaard
      Före och efter - Dan och Line troller med Tokyo staket
      Före och efter - Nagano staket vid tomtgränser ger trädgården ett lyft
      Före och efter - Kyoto Staket skapar utrymme på terrassen
      Före och efter - Artura kompositstaket vid trädgårdsgränsen
      Före/efter - Futura kompositstaket för uppfarten
      Guide till val av trästaket
      Kompositstaket - Minimalt underhåll
      Glasstaket - Den kompletta guiden för att välja ett glasstaket
      Glasstaket - Lär dig mer om glastyper och installation
      Idéer för trädgårdsinredning
      Skapa trädgårdens nya samlingspunkt
      Steg för steg: Bygg och designa din pergola efter mått
      Hur man enkelt bygger en trappa med vangstycken
      Möt en designer: Henrik Boe - designern bakom Cubic-beslaget
      Susannes Cubic Pergola och makeover i trädgården
      Bygg själv Cubic Vedskjul med Martin från Nybyggarna
      Odlingslåda och blomlådor i trädgårdsinredning
      Guide - vinterdekoration i din blomlåda
      Bygg soptunneskydd på uppfarten och i trädgården
      Nannas drömträdgård med upphöjda bäddar och hönshus
      Upptäck utomhusköket och terrassmiljön hos Tina Dalbøge
      Bygg en traditionell pergola med Cubic
      Guide för att skapa och odla upphöjda bäddar
      Bygg med Cubic-beslag - bildgalleri
      Uteliv i trädgården - ta med dig idén till ditt nästa projekt
      Guide - få 5 planteringstips för din Cubic Blomlåda
      Idéer för en barnvänlig trädgård
      PLUS för livet
      Guide till en barnvänlig trädgård - Få fysioterapeutens råd
      Idéer för nya trädgårdsmöbler
      Vad är RePlast-möbelplankor?
      Vad är ReTex-möbelplankor?
      Bänkbord som skapar en plats för gemenskap
      Guider och DIY-tips
      Montering av trästolpar på en träterrass eller betongfundament
      Kataloger
      FAQ
      Fakta om material och underhåll
      Om glas
      Om grundmålade produkter
      Om komposit
      Om lasyrfärg och efterbehandling
      Om lärk och obehandlat trä
      Om pil
      Om konstrottting
      Om pulverlackerade produkter
      Om RePlast och ReTex
      Om Sipo mahogny
      Om ThermoWood®
      Om tryckimpregnerade produkter
      Om varmförzinkade produkter
      Viktigt att veta om produkter och installation
      Stolper - Vælg den rigtige stolpe til dit projekt
      Stolper - sådan forankrer du stolper
      Hegn - Værd at vide inden du går i gang med montering af dit nye hegn og låger
      Udhusdøre
      Legehuse
      Montagevejledninger
      CE-mærket
      Love og regler
      Certifikater
      Om overskudsmaterialer i forbindelse med levering
      Favoritlistan uppdaterad