✓ Versand in 3-4 Werktagen
✓ Wir sprechen Deutsch
✓ +100 Jahre Erfahrung
✓ Dänisches Design
✓ 30 Tage Rückgaberecht
  • Produkte
    Zäune und Tore
    Zäune und Tore
    Hölzerne Zäune
    WPC Zaun
    Stahlzaun
    Glaszäune
    Weide Zaun
    Polyrattan Zaun
    Alle Gartentore
    Pfosten
    Zubehör
    Garteneinrichtung
    Garteneinrichtung
    Pergola
    Daylife
    Cubic Beschläge
    Trockengestelle
    Rosenportal
    Outdoor Fitness Trainingsgestell
    Pflanz- und Blumenkästen
    Hochbeete
    Fussabtreter
    Mülltonnenverkleidungen
    Wärmepumpen Verkleidungen
    Terrassetreppe
    Treppenwangen
    Gartenmöbel
    Gartenmöbel
    Möbelsets
    Kombimöbel
    Kombimöbel für Kinder
    Bänke
    Lattenbank
    Pflanz- & Grilltische
    Spiel
    Spiel
    Spieltürme
    Schaukeln
    Spielhäuser
    Sandkasten/Sitzbank
    Kombimöbel für Kinder
    Zubehör
    Gartenräume
    Gartenräume
    Classic Gartenhaus
    Multi Gartenhaus
    Nordic Gartenhaus
    Gerätehäuser/Kombihäuser
    Fahrradunterstand
    Grillhütte
    Kaminholzdepot
    Überdachung
    Picknickhütte
    Treibhaus/Gerätehaus
    Pavillon
    Shelters
    Nebeneingangstüren
    Gartenräume Zubehör
    Neuigkeiten 2026
    Outlet
    Outlet
Produkte
  • Neuigkeiten
  • Inspiration
  • Kataloge
  • FAQ
Neuigkeiten Inspiration Kataloge FAQ
    • Sign in
    • 0
    • German
    Sign in 0
    ✓ Versand in 3-4 Werktagen
    ✓ +100 Jahre Erfahrung
    Suchen
      • Sign in
        • Anmelden
      • 0
      • German
      Sign in 0
      Sorry. There is nothing to view here

      Produkte

      • Zäune und Tore
      • Garteneinrichtung
      • Gartenmöbel
      • Spiel
      • Gartenräume
      • Neuigkeiten 2026
      • Outlet
      Zäune und Tore Garteneinrichtung Gartenmöbel Spiel Gartenräume Neuigkeiten 2026 Outlet

      Service

      • Finde einen Händler
      • Lieferung von Bestellungen
      • Rufen Sie uns an
      • Kontaktiere uns
      Finde einen Händler Lieferung von Bestellungen Rufen Sie uns an Kontaktiere uns

      Inspiration

      • Ideen für Außenräume
      • Ideen für Zaunprojekte
      • Ideen für die Gartendekoration
      • Ideen für einen kinderfreundlichen Garten
      • Ideen für neue Gartenmöbel
      • Anleitungen und Tipps zum Selbermachen
      • DIY
      Ideen für Außenräume Ideen für Zaunprojekte Ideen für die Gartendekoration Ideen für einen kinderfreundlichen Garten Ideen für neue Gartenmöbel Anleitungen und Tipps zum Selbermachen DIY

      Über Plus

      • Über uns
      • Neuigkeiten von PLUS
      • Nachhaltigkeit
      • Mitarbeiter
      • Rücksendungen und Reklamationen
      • Cookie-Richtlinie
      • Impressum
      • Datenschutz-Bestimmungen
      • AGB mit information
      Über uns Neuigkeiten von PLUS Nachhaltigkeit Mitarbeiter Rücksendungen und Reklamationen Cookie-Richtlinie Impressum Datenschutz-Bestimmungen AGB mit information
      • 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

        Bewerten Sie uns auf 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

        Bewerten Sie uns auf Google

      Zäune und Tore Zäune und Tore
      Hölzerne Zäune
      Tangent
      Harmoni
      Tokyo
      Sendai
      Osaka
      Nagano
      Kyoto
      PLUS Klink Profilzäune
      PLUS Plank Profilzäune
      Silence
      Rondo
      Rustik
      Nostalgi
      Decora
      Bergen
      Newline
      Country
      Linea
      Ligno
      Rom
      Vinesse
      Schloss
      Retro
      Skagen Lux
      Saga
      Noor
      WPC Zaun
      Artura
      Futura
      Stahlzaun
      Stahlspaliere
      Basic Stahlzaun
      Basic Geländersystem
      Glaszäune
      Glaszaun rauchfarbiger in schwarzgrau
      Glaszaun mit Handlauf in Mahagoni
      Glaszaun – Mahagonihandlauf und feuerverzinktem Stahlpfosten
      Glaszaun – Schwarz Handlauf und Stahlpfosten
      Glaszaun für runde Pfosten
      Gehärtetem Glaszaun – für runde Pfosten
      Laminiertem Glaszaun – für runde Pfosten
      Glaszaun mit schwarzem Glasbeschlägen
      Glaszaun mit feuerverzinktem Glasbeschlägen
      Weide Zaun
      Weidenzäune
      Weidenzäune Luxus
      Polyrattan Zaun
      Alle Gartentore
      Pfosten
      Holzpfosten und Träger
      Holzpfosten Schwarz
      Holzpfosten Weiss
      Holzpfosten Umbergrau
      Holzpfosten Druckimprägniert
      Profilpfosten
      Multipfosten
      Stahlpfosten
      Stahlpfosten für Einbetonieren
      Stahlpfosten mit Fuss
      Stahlpfosten mit Fuss (für Handlauf)
      Zubehör
      Beschläge und Schrauben
      Torbeschläge
      Pfostenträger
      Pfostenabdeckungen
      Cubic Beschläge
      Handlauf für Geländer
      Nachbehandlung
      Türbeschläge
      Zäune
      Garteneinrichtung Garteneinrichtung
      Pergola
      Daylife
      Cubic Beschläge
      Trockengestelle
      Rosenportal
      Outdoor Fitness Trainingsgestell
      Pflanz- und Blumenkästen
      Circle Pflanzkästen
      Cubic Living Pflanzkästen
      Cubic Blumenkästen m/Füße – schwarze Stahlecken
      Cubic Blumenkästen – schwarze Stahlecken
      Cubic Blumenkästen – Feuerverzinkter Stahlecken
      Classic Pflanzkästen
      Basic Pflanzkästen
      Hochbeete
      Pipe Hochbeete
      Pipe Losteile
      Fussabtreter
      Mülltonnenverkleidungen
      Mülltonnenverkleidung - Holz
      Mülltonnenverkleidung - minimaler Wartungsaufwand
      Wärmepumpen Verkleidungen
      Terrassetreppe
      Terrassentreppe 34,2° - druckimprägniertes Holz
      Terrassentreppe 19° - druckimprägniertes Holz
      Terrassentreppe 34,2° - feuerverzinkter Stahl
      Treppenwangen
      Garten
      Gartenmöbel Gartenmöbel
      Möbelsets
      Trend Living
      Siesta Living
      Siesta Möbel
      Country Plankenset
      Nostalgi Möbelset
      Plankenset
      Café Plankenset
      Kombimöbel
      Classic Kombimöbel
      Zigma Kombimöbel
      Twist Kombimöbel
      Picnic Kombimöbel
      Basic Kombimöbel
      Kombimöbel
      Wega Kombimöbel
      Alpha Kombimöbel
      Kombimöbel für Kinder
      Alpha Junior
      Basic Junior
      Tiny
      Bänke
      Bänke
      Bänke m/Rückenlehne
      Lounge Bänke
      Lattenbank
      Pflanz- & Grilltische
      Möbel
      Spiel Spiel
      Spieltürme
      Schaukeln
      Spielhäuser
      Sandkasten/Sitzbank
      Kombimöbel für Kinder
      Alpha Junior
      Basic Junior
      Tiny
      Zubehör
      Gartenräume Gartenräume
      Classic Gartenhaus
      Multi Gartenhaus
      Nordic Gartenhaus
      Gerätehäuser/Kombihäuser
      Fahrradunterstand
      Grillhütte
      Kaminholzdepot
      Überdachung
      Picknickhütte
      Treibhaus/Gerätehaus
      Pavillon
      Shelters
      Shelter
      Siesta Sommerly
      Shelter auf Rädern
      Nebeneingangstüren
      Nebeneingangstüren - einzelne ohne Beschläge
      Nebeneingangstüren - Doppelte ohne Beschläge
      Nebeneingangstüren mit Beschläge
      Nebeneingangstüren - Doppelte mit Beschläge
      Gartenräume Zubehör
      Freiraum
      Neuigkeiten 2026
      Outlet Outlet
      Neuigkeiten
      Inspiration
      Ideen für Außenräume
      Schaffe Raum für deine Träume
      Sieh dir schöne Kundenprojekte mit unseren Gartenhäusern
      Trine baut einen Unterstand und ein Gartenhäuschen unter einem Dach
      Baue Deinen eigenen Fahrradunterstand mit DIYdanmark
      Siehe wie Poul das neue Siesta Sommerly der Familie zusammenbaut
      Gewächshaus und Marktstand im Tivoli Friheden
      Baue einen Unterstand auf Rädern - Siehe die tollen Kundenprojekte hier
      Rikkes magisches Shelter und ein Bautag im eigenen Sommerhausgarten
      Shelter Guide - Bauen Sie einen Shelter in Ihrem Garten oder gehen Sie auf eine Sheltertour in Dänemark
      Doppelshelden in einem Ferienhaus in Djursland
      Ideen für Zaunprojekte
      Welchen Holzzaun wählen?
      Der Sendai-Zaun vervollständigt den Gartenplan von Lena Smedegaard
      Vorher und nachher - Dan und Line zaubern mit Tokyo Zaun
      Vorher/Nachher - Nagano Garden Sichtschutzzaun verschönert Ihren Garten
      Vorher/Nachher - Kyoto Zaun schafft Platz auf der Terrasse
      Vorher und nachher - Artura WPC Gartenzaun
      Vorher/Nachher - Futura WPC-Einfahrtumzäunung
      WPC-Zaun - Zaun mit minimalem Wartungsaufwand
      Glaszäune - Der vollständige Leitfaden zur Auswahl von Glaszäunen
      Glaszäune - Erfahren Sie mehr über Glastypen und deren Einbau
      So montierst du den Artura WPC-Zaun
      Ideen für die Gartendekoration
      Schaffe den neuen Treffpunkt im Garten
      Schritt für Schritt: Baue und gestalte eine individuelle Pergola
      Wie man eine Treppe mit Treppenwangen einfach baut
      Treffe einen Designer: Henrik Boe - der Designer der Cubic-Beschläge
      Susannes Cubic Pergola und Gartenumgestaltung
      Bau eines Brennholzlager mit Martin und Lucas
      Hochbeete und Blumenkästen in der Gartengestaltung
      Leitfaden - Winterdekoration in Ihrem Blumenkasten
      Bauen Sie einen Mülltonnenverkleidung in Ihrer Einfahrt und Ihrem Vorgarten
      Nannas Traumgarten mit Hochbeeten und Hühnerstall
      Erleben Sie die Außenküche und die Terrasse von Tina Dalbøge
      Bauen Sie eine traditionelle Pergola mit Cubic
      Leitfaden für die Anlage und den Anbau von Hochbeeten
      Bauen mit Cubic Beschlägen - Bildergalerie
      Wohnen im Freien im Garten - Holen Sie sich die Idee für Ihr nächstes Projekt
      Anleitung - 5 Pflanztipps für Ihren kubischen Blumenkasten
      Ideen für einen kinderfreundlichen Garten
      PLUS fürs Leben
      Leitfaden für einen kinderfreundlichen Garten - Holen Sie sich den Rat des Physiotherapeuten
      Anne-Louises Märchengarten
      Ideen für neue Gartenmöbel
      Was sind RePlast-Möbelplanken?
      Was sind ReTex-Möbelbretter?
      Tisch-/Bank-Sets, die ein Gemeinschaftszentrum bilden
      Anleitungen und Tipps zum Selbermachen
      Montage von Holzpfosten auf einer Holzterrasse oder einem Betonfundament
      DIY
      DIY Projekte mit Verpackungen
      Kataloge
      FAQ
      Fakten zu Materialien und Wartung
      Über farbgrundierte Produkte
      Über druckbehandelte Produkte
      Über Lärche und unbehandeltes Holz
      Über Sipo Mahogni
      Über feuerverzinkte Produkte
      Über pulverlackierte Produkte
      Über WPC
      Über RePlast und ReTex
      Über Glas
      Über Weide
      Über Polyrattan
      Über Lasurfarbe und Nachbearbeitung
      ThermoWood®
      Wissenswertes zu Produkten und Montage
      Wählen Sie den richtigen Pfoste für Ihr Projekt
      Wie man Pfosten verankert
      Was Sie vor der Montage Ihres neuen Zauns und der Tore wissen sollten
      Nebeneingangstüren
      Spielhäuser
      Montageanleitung
      CE-gekennzeichnet
      Gesetze und Bestimmungen
      Zertifikate
      Über überschüssige Materialien in Verbindung mit der Lieferung
      Favoritenliste aktualisiert