• Sign in
    • 0
    • Tysk
    Sign in 0
    • 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
      Terrassetreppe
      Pergola
      Daylife
      Hochbeete
      Pflanz- und Blumenkästen
      Cubic Beschläge
      Mülltonnenverkleidungen
      Trockengestelle
      Outdoor Fitness
      Rosenportal
      Fussabtreter
      Wärmepumpen Verkleidungen
      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
    Produkte
    • Neuigkeiten 2025
    • Inspiration
    • Kataloge
    • FAQ
    Neuigkeiten 2025 Inspiration Kataloge FAQ
    Outlet
    Suchen
      • Sign in
        • Log ind
      • 0
      • Tysk
      Sign in 0
      Sorry. There is nothing to view here

      Produkte

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

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

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

        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
      Bergen
      Newline
      Country
      Linea
      Ligno
      Rom
      Vinesse
      Schloss
      Retro
      Skagen Lux
      WPC Zaun
      Artura
      Futura
      Stahlzaun
      Stahlspaliere
      Basic Stahlzaun
      Basic Geländersystem
      Glaszäune
      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
      Glastore
      Weide Zaun
      Weidenzäune
      Weidenzäune Luxus
      Polyrattan Zaun
      Alle Gartentore
      Pfosten
      Holzpfosten und Träger
      Holzpfosten Druckimprägniert
      Holzpfosten Schwarz
      Holzpfosten Weiss
      Holzpfosten umbergrau
      Profilpfosten für PLUS Klink und Plank
      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
      Zaun
      Garteneinrichtung Garteneinrichtung
      Terrassetreppe
      Terrassentreppe 34,2° - druckimprägniertes Holz
      Terrassentreppe 19° - druckimprägniertes Holz
      Terrassentreppe 34,2° - feuerverzinkter Stahl
      Pergola
      Daylife
      Hochbeete
      Pipe Hochbeete
      Pipe Losteile
      Pflanz- und Blumenkästen
      Cubic Blumenkästen – schwarze Stahlecken
      Cubic Blumenkästen – Feuerverzinkter Stahlecken
      Pflanzkästen auf Rädern
      Pflanzkästen auf Beinen
      Classic Pflanzkästen
      Cubic Beschläge
      Cubic Beschläge
      Cubic Kaminholzwand
      Mülltonnenverkleidungen
      Mülltonnenverkleidung - Holz
      Mülltonnenverkleidung - minimaler Wartungsaufwand
      Trockengestelle
      Outdoor Fitness
      Rosenportal
      Fussabtreter
      Wärmepumpen Verkleidungen
      Treppenwangen
      Garten
      Gartenmöbel Gartenmöbel
      Möbelsets
      Siesta Living
      Siesta Möbel
      Country Plankenset
      Nostalgi Möbelsets
      Cafe Set
      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
      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
      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
      Neuigkeiten 2025
      Inspiration
      Ideen für Außenräume
      Schaffe Raum für deine Träume
      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
      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
      Welchen Holzzaun wählen?
      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
      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
      Trine baut einen Spielturm in ihrem Ferienhaus in Blåvand
      Leitfaden für einen kinderfreundlichen Garten - Holen Sie sich den Rat des Physiotherapeuten
      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
      Kataloge
      FAQ
      Fakten zu Materialien und Wartung
      Wissenswertes zu Produkten und Montage
      Favoritenliste aktualisiert