✓ Leveringstid 3-5 hverdage
✓ Dansk kundeservice
✓ +100 års erfaring
✓ Dansk design
✓ 30 dages returret
✓✓✓✓ Trustpilot
  • Produkter
    Hegn og låger
    Hegn og låger
    Træhegn
    Komposithegn
    Stålhegn
    Glashegn
    Pilehegn
    Polyrattanhegn
    Alle havelåger
    Stolper
    Tilbehør
    Have
    Have
    Pergolaer
    Daylife
    Cubic beslag
    Tørrestativer
    Rosenportal
    Outdoor fitness træningsstativ
    Plante- og blomsterkasser
    Højbede
    Dørriste
    Renovationsskjul
    Varmepumpeskjul
    Terrassetrapper
    Trappevanger
    Møbler
    Møbler
    Møbelsæt
    Bord/bænkesæt
    Bord/bænkesæt til børn
    Bænke
    Trallemøbler
    Plante- & grillborde
    Leg
    Leg
    Legetårne
    Gyngestativer
    Legehuse
    Sandkasse/bænk
    Bord/bænkesæt til børn
    Tilbehør
    Uderum
    Uderum
    Classic havehus
    Multi havehus
    Nordic havehus
    Redskabsrum/Kombihuse
    Cykelskure
    Bålhytter
    Brændely
    Overdækninger
    Madpakkehuse
    Drivhuse/Redskabsrum
    Pavilloner
    Shelters
    Udhusdøre
    Tilbehør til uderum
    Nyheder 2026
    Outlet
Produkter
  • Nyheder
  • Inspiration
  • Kataloger
  • FAQ
Nyheder Inspiration Kataloger FAQ
    • Sign in
    • 0
    • Danish
    Sign in 0
    ✓ Leveringstid 3-5 hverdage
    ✓ +100 års erfaring
    Søg
      • Sign in
        • Log ind
      • 0
      • Danish
      Sign in 0
      Beklager. Der er ikke noget at se her

      Produkter

      • Hegn og låger
      • Have
      • Møbler
      • Leg
      • Uderum
      • Nyheder 2026
      • Outlet
      Hegn og låger Have Møbler Leg Uderum Nyheder 2026 Outlet

      Service

      • Find en forhandler
      • Find en montør
      • Find en udstilling
      • Levering
      • Ring til os
      • Kontakt os
      Find en forhandler Find en montør Find en udstilling Levering Ring til os Kontakt os

      Inspiration

      • Idéer til uderum
      • Idéer til hegnsprojekter
      • Idéer til haveindretning
      • Idéer til børnevenlig have
      • Idéer til nye havemøbler
      • Guides og gør det selv-tips
      • DIY
      Idéer til uderum Idéer til hegnsprojekter Idéer til haveindretning Idéer til børnevenlig have Idéer til nye havemøbler Guides og gør det selv-tips DIY

      PLUS

      • Om os
      • Nyt fra PLUS
      • Bæredygtighed
      • Medarbejdere
      • Salgs-& leveringsbetingelser
      • Retur & reklamation
      • Cookiepolitik
      • Privatlivspolitik
      Om os Nyt fra PLUS Bæredygtighed Medarbejdere Salgs-& leveringsbetingelser Retur & reklamation Cookiepolitik Privatlivspolitik
      • 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

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

      Hegn og låger Hegn og låger
      Træhegn
      Tangent
      Harmoni
      Tokyo
      Sendai
      Osaka
      Nagano
      Kyoto
      PLUS Klink Profilhegn
      PLUS Plank Profilhegn
      Silence
      Rondo
      Rustik
      Nostalgi
      Decora
      Bergen
      Newline
      Country
      Linea
      Ligno
      Rom
      Vinesse
      Slot
      Retro
      Skagen Lux
      Saga
      Noor
      Komposithegn
      Artura
      Futura
      Stålhegn
      Stålespalier
      Basic stålhegn
      Basic gelændersystem
      Glashegn
      Glashegn røgfarvet gråsort
      Glashegn med håndlister i mahogni
      Glashegn – håndlister i mahogni og varmgalv. stålstolper
      Glashegn – sorte håndlister og sorte stålstolper
      Glashegn til runde stolper
      Hærdet glashegn – til runde stolper
      Lamineret glashegn – til runde stolper
      Glashegn med sorte glasbeslag
      Glashegn med varmgalv. glasbeslag
      Pilehegn
      Pil med ramme
      Pil Lux
      Polyrattanhegn
      Alle havelåger
      Stolper
      Træstolper og dragere
      Træstolper sort
      Træstolper hvid
      Træstolper umbragrå
      Træstolper trykimprægneret
      Profilstolper
      Multistolper
      Stålstolper
      Stålstolper til nedstøbning
      Stålstolper med fod
      Stålstolper med fod (til håndliste)
      Tilbehør
      Beslag og skruer
      Lågebeslag
      Stolpefødder
      Stolpehætter
      Cubic Beslag
      Håndlister
      Efterbehandling
      Dørbeslag
      Hegn
      Have Have
      Pergolaer
      Daylife
      Cubic beslag
      Tørrestativer
      Rosenportal
      Outdoor fitness træningsstativ
      Plante- og blomsterkasser
      Circle plantekasser
      Cubic Living plantekasse
      Cubic blomsterkasser m/fødder – sorte stålhjørner
      Cubic blomsterkasser – sorte stålhjørner
      Cubic blomsterkasser – varmgalv. stålhjørner
      Classic plantekasser
      Basic plantekasser
      Højbede
      Pipe højbede
      Pipe løsdele
      Dørriste
      Renovationsskjul
      Renovationsskjul - træ
      Renovationsskjul - minimal vedligehold
      Varmepumpeskjul
      Terrassetrapper
      Terrassetrappe 34,2° - trykimprægneret træ
      Terrassetrappe 19° - trykimprægneret træ
      Terrassetrappe 34,2° - varmgalvaniseret stål
      Trappevanger
      Møbler Møbler
      Møbelsæt
      Trend Living
      Siesta Living
      Siesta møbler
      Country plankesæt
      Nostalgi møbelsæt
      Plankesæt
      Café plankesæt
      Bord/bænkesæt
      Classic bord/bænkesæt
      Zigma bord/bænkesæt
      Twist bord/bænkesæt
      Picnic bord/bænkesæt
      Basic bord/bænkesæt
      Bord/bænkesæt
      Wega bord/bænkesæt
      Alpha bord/bænkesæt
      Bord/bænkesæt til børn
      Alpha Junior
      Basic Junior
      Tiny
      Bænke
      Bænke
      Bænke m/ryglæn
      Lounge bænke
      Trallemøbler
      Plante- & grillborde
      Leg Leg
      Legetårne
      Gyngestativer
      Legehuse
      Sandkasse/bænk
      Bord/bænkesæt til børn
      Alpha Junior
      Basic Junior
      Tiny
      Tilbehør
      Uderum Uderum
      Classic havehus
      Multi havehus
      Nordic havehus
      Redskabsrum/Kombihuse
      Cykelskure
      Bålhytter
      Brændely
      Overdækninger
      Madpakkehuse
      Drivhuse/Redskabsrum
      Pavilloner
      Shelters
      Shelters
      Siesta Sommerly
      Shelter på hjul
      Udhusdøre
      Udhusdøre - enkelt, uden beslag
      Udhusdøre - dobbelt uden beslag
      Udhusdøre - enkelte med beslag
      Udhusdøre - dobbelt med beslag
      Tilbehør til uderum
      Nyheder 2026
      Outlet
      Nyheder
      Inspiration
      Idéer til uderum
      Få plads til det du drømmer om
      Se fine kundeprojekter med vores havehuse
      Trine bygger shelter og haveskur under ét tag
      Byg-selv cykelskur med Diydanmark
      Se, hvordan Poul samler familiens nye Siesta Sommerly
      Drivhus og markedsbod i Tivoli Friheden
      Byg shelter på hjul - Se fine kundeprojekter
      Rikkes magiske sommerhusshelter og byggedag
      Shelterguide - Byg shelter i haven eller tag på sheltertur i DK
      Dobbeltshelter ved sommerhus på Djursland
      Idéer til hegnsprojekter
      Guide til valg af træhegn
      Sendai hegn fuldender haveplanen hos Lena Smedegaard
      Før/efter - Dan og Line tryller med Tokyo hegn
      Før/efter - Nagano Hegn i haveskel giver haven et løft
      Før/efter - Kyoto Hegn skaber rum på terrassen
      Før/efter - Artura komposithegn i haveskel
      Før/efter - Futura komposithegn i indkørsel
      Komposithegn - hegn med minimalt vedligehold
      Glashegn - Den komplette guide til valg af glashegn
      Glashegn - Lær om glastyper og montering
      Sådan monterer du Artura komposithegn
      Idéer til haveindretning
      Skab havens nye samlingspunkt
      Trin for trin: Byg og design din pergola på mål
      Guide: Sådan bygger du nemt en trappe til terrassen med trappevanger
      Mød en designer: Henrik Boe - designeren bag Cubic-beslaget
      Susannes Cubic Pergola og kæmpe makeover i haven
      Byg brændely med Martin og Lucas
      Højbede og blomsterkasser i haveindretning
      Guide - vinterdekoration i din blomsterkasse
      Byg skraldeskjul i indkørslen og forhaven
      Nannas drømmehave med højbede og hønsehus
      Oplev udekøkken og terrassemiljø hos Tina Dalbøge
      Byg en traditionel pergola med Cubic
      Guide til etablering og dyrkning af højbede
      Byg med Cubic beslag - billedgalleri
      Udeliv i haven - Snup idéen til dit næste projekt
      Guide - få 5 plantetips til din Cubic Blomsterkasse
      Idéer til børnevenlig have
      PLUS for livet
      Guide til en børnevenlig have - Få fysioterapeutens råd
      Anne-Louises eventyrlige have
      Idéer til nye havemøbler
      Hvad er RePlast-møbelplanker?
      Hvad er ReTex-møbelplanker
      Bord-/bænkesæt, som danner rammen om fællesskabet
      Guides og gør det selv-tips
      Montering af træstolper på træterrasse eller betonfundament
      DIY
      DIY projekter med emballage
      Kataloger
      FAQ
      Fakta om materialer og vedligeholdelse
      Grundmalede produkter
      Trykimprægnerede produkter
      Lærk og ubehandlet træ
      Sipo mahogni
      Varmgalvaiserede produkter
      Pulverlakerede produkter
      Komposit
      RePlast og ReTex
      Glas
      Pil
      Polyrattan
      Lasurfarve og efterbehandling
      ThermoWood®
      Værd at vide om produkter og montering
      Vælg den rigtige stolpe til dit projekt
      Sådan forankrer du stolper
      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
      Favoritlisten er opdateret