✓ Afsänds 3–4 vardagar
✓ Svensk kundservice
✓ +100 års erfarenhet
✓ Dansk design
✓ 30 dagars returrätt
  • 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
    Pergola
    Daylife
    Cubic beslag
    Torkställning
    Rosenportal
    Outdoor Fitness träningsställning
    Planterings- och blomlådor
    Odlingslådor
    Cubic galler
    Soptunneskydd
    Värmepumpskydd
    Terrass trappor
    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
    Pavilloner
    Vindskydd
    Udhusdøre
    Utomhus tillbehör
    Nyheter 2026
    Outlet
    Outlet
Produkter
  • Nyheter
  • Inspiration
  • Kataloger
  • FAQ
Nyheter Inspiration Kataloger FAQ
    • Sign in
    • 0
    • Swedish
    Sign in 0
    ✓ Afsänds 3–4 vardagar
    ✓ +100 års erfarenhet
    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ö
      • Nyheter 2026
      • Outlet
      Staket och grindar Trädgården Möbler Lek Utemiljö Nyheter 2026 Outlet

      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
      • DIY
      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 DIY

      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
      • 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

      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
      Saga
      Noor
      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
      Pilstaket
      Pil med ramar
      Pil Lux
      Polyrattanstaket
      Alla trädgårdsgrindar
      Stolpar
      Stolpar och balkar av trä
      Stolpar svart
      Stolpar vit
      Trästolpar umbra grå
      Stolpar tryckimpregnerat
      Profilstolpar
      Multistolpar
      Stålstolpar
      Stålstolpar för gjutning
      Stålstolpar med fot
      Stolpar för räcken
      Tillbehör
      Beslag och skruvar
      Grindbeslag
      Stolpfötter
      Stolphättor
      Beslagen CUBIC
      Räcken av mahogny
      Efterbehandling
      Dørbeslag
      Staket
      Trädgården Trädgården
      Pergola
      Daylife
      Cubic beslag
      Torkställning
      Rosenportal
      Outdoor Fitness träningsställning
      Planterings- och blomlådor
      Circle planteringslådor
      Cubic Living planteringslåda
      Cubic blomlådor m/fötter – svarta stålhörn
      Cubic blomlådor – svart stålhörn
      Cubic blomlådor – varmgalvaniserat stålhörn
      Classic planteringslådor
      Basic planteringslådor
      Odlingslådor
      Pipe odlingslådor
      Pipe lösa delar
      Cubic galler
      Soptunneskydd
      Soptunneskydd - trä
      Soptunneskydd - minimal underhåll
      Värmepumpskydd
      Terrass trappor
      Trappa till terrass 34.2° - tryckimpregnerat trä
      Trappa till terrass 19° - tryckimpregnerat trä
      Terrass trappor 34,2° - varmförzinkat stål
      Vangstycken
      Trädgård
      Möbler Möbler
      Möbelgrupper
      Trend Living
      Siesta Living
      Siesta möbler
      Country Plankset
      Nostalgi Möbelset
      Plankset
      Café 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
      Tiny
      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
      Tiny
      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
      Pavilloner
      Vindskydd
      Vindskydd
      Siesta Sommarly
      Vindskydd på hjul
      Udhusdøre
      Udhusdøre - enkelt, uden beslag
      Udhusdøre - enkelte med beslag
      Utomhus tillbehör
      Nyheter 2026
      Outlet Outlet
      Nyheter
      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
      Guide till val av trästaket
      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
      Kompositstaket - Minimalt underhåll
      Glasstaket - Den kompletta guiden för att välja ett glasstaket
      Glasstaket - Lär dig mer om glastyper och installation
      Så här monterar du Artura kompositstaket
      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
      Anne-Louises sagolika trädgård
      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
      DIY
      DIY projekt med emballage
      Kataloger
      FAQ
      Fakta om material och underhåll
      Om grundmålade produkter
      Om tryckimpregnerade produkter
      Om lärk och obehandlat trä
      Om Sipo mahogny
      Om varmförzinkade produkter
      Om pulverlackerade produkter
      Om komposit
      Om RePlast och ReTex
      Om glas
      Om pil
      Om konstrottting
      Om lasyrfärg och efterbehandling
      ThermoWood®
      Viktigt att veta om produkter och installation
      Välj rätt stolpe för ditt projekt
      Hur man förankrar stolpar
      Värt att veta innan du börjar montera ditt nya staket och grindar
      Förrådsdörrar
      Lekstugor
      Monteringsanvisningar
      CE-märkning
      Lagar och regler
      Certifikat
      Om överskottsmaterial i samband med leverans
      Favoritlistan uppdaterad