• Sign in
    • 0
    • Norwegian, Nynorsk
    Sign in 0
    • Produkter
      Gjerder og porter
      Gjerder og porter
      Tregjerde
      Kompositgjerde
      Stålgjerde
      Glassgjerde
      Pilegjerde
      Polyrattangjerde
      Alle hageporter
      Stolper
      Tilbehør
      Hage
      Hage
      Terrasse trapper
      Pergola
      Daylife
      Høybede
      Plante- og blomsterkasser
      Cubic beslag
      Søppelbod
      Tørkestativ
      Outdoor fitness
      Rosenportal
      Dørriste
      Varmepumpeskjul
      Trappevanger
      Møbler
      Møbler
      Møbelsett
      Bord/benkesett
      Bord/benkesett for barn
      Bänker
      Trallemøbler
      Plante- og grillbord
      Lek
      Lek
      Leketårn
      Huskestativer
      Lekehuse
      Sandkasse/benk
      Bord/benkesett for barn
      Tilbehør
      Uterom
      Uterom
      Classic hagehus
      Multi hagehus
      Nordic hagehus
      Redskapsbod/Kombihus
      Sykkelskur
      Bålhytter
      Vedskjul
      Oppholdsrom/Overbygg
      Matpakkehus
      Drivhus/Redskapsbod
      Shelters
      Dører til uthus
      Tilbehør til uterommet
    Produkter
    • Nyheter 2025
    • Inspirasjon
    • Kataloger
    • FAQ
    Nyheter 2025 Inspirasjon Kataloger FAQ
    Outlet
    Søk
      • Sign in
        • Log ind
      • 0
      • Norwegian, Nynorsk
      Sign in 0
      Sorry. There is nothing to view here

      Produkter

      • Gjerder og porter
      • Hage
      • Møbler
      • Lek
      • Uterom
      Gjerder og porter Hage Møbler Lek Uterom

      Service

      • Finn en forhandler
      • Levering av bestillinger
      • Ring oss
      • Kontakt oss
      Finn en forhandler Levering av bestillinger Ring oss Kontakt oss

      Inspirasjon

      • Ideer til uterom
      • Ideer til gjerdeprosjekter
      • Ideer til hagedekorasjon
      • Ideer til en barnevennlig hage
      • Ideer til nye hagemøbler
      • Guider og gjør-det-selv-tips
      Ideer til uterom Ideer til gjerdeprosjekter Ideer til hagedekorasjon Ideer til en barnevennlig hage Ideer til nye hagemøbler Guider og gjør-det-selv-tips

      PLUS

      • Om oss
      • Nyheter fra PLUS
      • Bærekraft
      • Ansatte
      • Kjøpsvilkår
      • Returer og reklamasjoner
      • Cookie policy
      • Personvernerklæring
      Om oss Nyheter fra PLUS Bærekraft Ansatte Kjøpsvilkår Returer og reklamasjoner Cookie policy Personvernerklæring
      • 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

        Skriv en omtale på Google

      Error executing template "Designs/Swift/Paragraph/Swift_Accordion.cshtml"
      System.NullReferenceException: Object reference not set to an instance of an object.
         at CompiledRazorTemplates.Dynamic.RazorEngine_3a86fd0f3fee4610971043edf9703bb8.Execute() in C:\inetpub\wwwroot\plus-prod\Files\Templates\Designs\Swift\Paragraph\Swift_Accordion.cshtml:line 221
         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 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
      • Forsiden
      Forsiden
      PLUS A/S • Ådalen 13B • DK-6600 Vejen • CVR: 34564310 • ✆ +45 79963333 • ✉ plus@plus.dk
      Trustpilot

        Skriv en omtale på Google

      Gjerder og porter Gjerder og porter
      Tregjerde
      Tangent
      Harmoni
      Tokyo
      Sendai
      Osaka
      Nagano
      Kyoto
      Plus Klink Profilgjerde
      Plus Plank Profilgjerde
      Silence
      Rondo
      Rustik
      Nostalgi
      Decora
      Bergen
      Newline
      Country
      Linea
      Ligno
      Rom
      Vinesse
      Slot
      Retro
      Skagen Lux
      Liste gjerde
      Kompositgjerde
      Artura
      Futura
      Stålgjerde
      Stålespalier
      Basic stålgjerde
      Basic Gelændersystem
      Glassgjerde
      Glassgjerde røykgråsvart
      Glassgjerde med mahogni håndlister
      Glashegn – mahogni håndlister og varmgalv. stålstolper
      Glasgjerde – sorte håndlister og stålstolper
      Glassgjerde med runde stolper
      Hærdet glashegn – til runde stolper
      Lamineret glashegn – til runde stolper
      Glasgjerde med sorte glasbeslag
      Glasgjerde med varmgalv. glasbeslag
      Glasporter
      Pilegjerde
      Pil med ramme
      Pil Lux
      Polyrattangjerde
      Alle hageporter
      Stolper
      Limtrestolper og bjelker
      Trestolper trykkimpregnert
      Trestolper svart
      Trestolper hvit
      Trestolpe umbra-grå
      Profilstolper
      Stålstolper
      Stålstolper til nedstøbning
      Stålstolper med fot
      Stålstolper med fot (for håndløper)
      Tilbehør
      Beslag og skruer til gjerder og porter
      Portbeslag
      Stolpefødder
      Stolpehætter
      Cubic beslag
      Håndlist
      Etterbehandling
      Dørbeslag
      beskrivelse
      Gjerde
      Hage Hage
      Terrasse trapper
      Terrassetrapper 34,2° - trykkimpregnert trevirke
      Terrassetrapper 19° - trykkimpregnert treverk
      Terrassetrapp 34,2° - varmforsinket stål
      Pergola
      Daylife
      Høybede
      Pipe høybede
      Pipe løse deler
      Plante- og blomsterkasser
      Cubic Living blomsterkasse
      Cubic blomsterkasser – sorte stålhjørner
      Cubic blomsterkasser – varmgalvaniserte stålhjørner
      Circle plantekasser med hjul
      Plantekasser på hjul
      Plantekasser på ben
      Classic plantekasser
      Cubic beslag
      Cubic beslag
      Cubic vedvegg
      Søppelbod
      Søppelbod - tre
      Søppelbod - minimal vedlikehold
      Tørkestativ
      Outdoor fitness
      Rosenportal
      Dørriste
      Varmepumpeskjul
      Trappevanger
      Møbler Møbler
      Møbelsett
      Siesta Living
      Siesta Møbler
      Country Plankesett
      Nostalgi Møbelsett
      Kafésett
      Plankesett
      Bord/benkesett
      Classic bord/benkesett
      Zigma bord/benkesett
      Twist bord/benksett
      Picnic bord/benksett
      Basic bord/benkesett
      Bord/benkesett
      Wega bord/benkesett
      Alpha bord/benkesett
      Bord/benkesett for barn
      Alpha junior
      Basic junior
      Bänker
      Benker
      Benker m/ryggstøtte
      Lounge benker
      Trallemøbler
      Plante- og grillbord
      Lek Lek
      Leketårn
      Huskestativer
      Lekehuse
      Sandkasse/benk
      Bord/benkesett for barn
      Alpha junior
      Basic junior
      Tilbehør
      Uterom Uterom
      Classic hagehus
      Multi hagehus
      Nordic hagehus
      Redskapsbod/Kombihus
      Sykkelskur
      Bålhytter
      Vedskjul
      Oppholdsrom/Overbygg
      Matpakkehus
      Drivhus/Redskapsbod
      Shelters
      Shelter til hagen
      Siesta Sommerly
      Shelter på hjul
      Dører til uthus
      Dører til uthus - enkle, uten beslag
      Uterumsdør - doble uten beslag
      Dører til uthus - enkelte med beslag
      Uteromsdører - doble med beslag
      Tilbehør til uterommet
      Nyheter 2025
      Inspirasjon
      Ideer til uterom
      Gjør plass til det du drømmer om
      Se fine kundeprosjekter med våre hagehus
      Trine bygger shelter og hagestue under samme tak
      Bygg ditt eget sykkelskur med Diydanmark
      Se hvordan Poul monterer familiens nye Siesta Sommerly.
      Veksthus og markedsbod i Tivoli Friheden
      Bygg et shelter på hjul - Se flotte kundeprosjekter
      Rikkes magiske sommerhushelter og byggedag
      Guide til shelter - Bygg et shelter i hagen din.
      Doble shelter i et feriehus på Djursland
      Ideer til gjerdeprosjekter
      Sendai-gjerde kompletterer hageplanen hos Lena Smedegaard
      Før og etter - Dan og Line utøver magi med Tokyo gjerdet
      Før og etter - Nagano gjerder i hagegrenser gir hagen din et løft
      Før/etter - Kyoto-gjerde skaper plass på terrassen
      Før og etter - Artura hagegjerde i komposittmateriale
      Før/etter - Futura innkjørselsgjerde i komposittmateriale
      Guide til valg av tregjerder
      Komposittgjerder - minimalt vedlikehold
      Glassgjerder - Den komplette guiden til valg av glassgjerde
      Glassgjerder - Lær mer om glasstyper og montering
      Ideer til hagedekorasjon
      Skap hagens nye samlingspunkt
      Trinn for trinn: Bygg og design din egen tilpassede pergola
      Guide: Sådan bygger du nemt en trappe til terrassen med trappevanger
      Mød en designer: Henrik Boe - designeren bag Cubic-beslaget
      Susannes Cubik pergola og en enorm hagefornyelse
      Bygge et brenneskur sammen med Martin og Lucas
      Opphøyde bed og blomsterkasser i hagedesign
      Guide - vinterdekorasjon i blomsterkassen
      Bygge et renovasjonsskjul i oppkjørselen og forhagen din
      Nannas drømmehage med opphøyde bed og hønsehus
      Opplev utekjøkkenet og terrassemiljøet hos Tina Dalbøge
      Bygg en tradisjonell pergola med Cubic
      Veiledning i å lage og dyrke opphøyde bed
      Bygg med Cubic-beslag - bildegalleri
      Friluftsliv i hagen - få en idé til ditt neste prosjekt
      Veiledning - få 5 plantetips til din Cubic blomsterkasse
      Ideer til en barnevennlig hage
      PLUS for livet
      Få tips til PLUS prosjektet ditt, gode ideer til uterommet ditt - få fysioterapeutens råd.
      Ideer til nye hagemøbler
      Hva er RePlast møbelplanker?
      Hva er ReTex møbelplanker?
      Bord-/benkesett som skaper et fellesskapsrom
      Guider og gjør-det-selv-tips
      Montering av trestolper på et tredekke eller et betongfundament
      Kataloger
      FAQ
      Fakta om materialer og vedlikehold
      Om glass
      Om grunnede produkter
      Om kompositt
      Om glasurfarge og etterbehandling
      Om lerk og ubehandlet tre
      Om pil
      Om polyrattan
      Om pulverlakkerte produkter
      Om RePlast og ReTex
      Om Sipo mahogni
      Om ThermoWood®
      Om trykkimpregnerte produkter
      Om varmgalvaniserede produkter
      Værd å vite om produkter og montering
      Stolper - Vælg den rigtige stolpe til dit projekt
      Stolper - Sådan forankrer du stolper
      Gjerder - ting du bør vite før du begynner å montere ditt nye gjerde og porter
      Dører til uthuset
      Om Lekehuse
      Monteringsanvisninger
      CE-merket
      Love og regler
      Certifikater
      Om overskudsmaterialer i forbindelse med levering
      Favorittlisten er oppdatert