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

      Produkter

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

      Service

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

      Inspiration

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

      PLUS

      • Om os
      • Nyt fra PLUS
      • Bæredygtighed
      • Medarbejdere
      • Salgs-& leveringsbetingelser
      • Retur & reklamation
      • Cookiepolitik
      • Privatlivspolitik
      Om os Nyt fra PLUS Bæredygtighed Medarbejdere Salgs-& leveringsbetingelser Retur & reklamation Cookiepolitik Privatlivspolitik
      • Facebook
      • Instagram
      • LinkedIn
      • Pinterest
      • Youtube
      Facebook Instagram LinkedIn Pinterest Youtube
      PLUS A/S • Ådalen 13B • DK-6600 Vejen • CVR: 34564310 • ✆ +45 79963333 • ✉ plus@plus.dk
      Trustpilot

        Anmeld os på Google

      Error executing template "Designs/Swift/Paragraph/Swift_Accordion.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

        Anmeld os på Google

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