
Guide til en børnevenlig have - Få fysioterapeutens råd
Kristina deler viden om børn, bevægelse og en børnevenlig have med gode udendørs legeredskaber.
Gyngestativ med to gynger, som nemt kan tilpasses, når børnene bliver for store til at bruge gyngerne – stativet kan f.eks. bruges som tørrestativ eller pergola.
Daylife serien er designet som en hyldest til dagligdagen og livet med alt, hvad det indebærer. Med Daylife er det nemlig nemt at skabe et skønt uderum, som kan bruges til hverdagens mange gøremål gennem hele livet og tilpasses i takt med livets behov ændres.
Daylife leveres i overskuelige samlesæt, så det er nemt og hurtigt for dig at bygge dit nye uderum.
🟢 På lager(+5)
Error executing template "Designs/Swift/Paragraph/Swift_ProductPrice.cshtml" System.FormatException: Input string was not in a correct format. at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) at System.Convert.ToDouble(String value) at Plus.CustomModules.Helpers.CampaignPrice.GetConvertedPriceWithVat(ProductViewModel product) at CompiledRazorTemplates.Dynamic.RazorEngine_3e351550763e4ecb9f2c71b8d44a5f37.Execute() in C:\inetpub\wwwroot\plus-prod\Files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml:line 183 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 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using System 3 @using System.Linq 4 @using Dynamicweb.Ecommerce.International 5 @using Dynamicweb.Ecommerce.Prices 6 @using Dynamicweb.Ecommerce.ProductCatalog 7 @using Plus.CustomModules.Helpers 8 @using PriceViewModel = Dynamicweb.Frontend.PriceViewModel 9 10 @{ 11 ProductViewModel product = new ProductViewModel(); 12 13 ProductViewModelSettings productSetting = new ProductViewModelSettings 14 { 15 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 16 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 17 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 18 ShopId = Pageview.Area.EcomShopId 19 }; 20 21 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 22 { 23 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 24 } else if (Pageview.Item["DummyProduct"] != null) { 25 26 string dummyProductId = ""; 27 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 28 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 29 if (productList.Products != null) 30 { 31 foreach (var p in productList.Products) { dummyProductId = p.Id; } 32 ProductViewModel dummyProduct = dummyProductId != "" ? ViewModelFactory.CreateView(productSetting, dummyProductId) : new ProductViewModel(); 33 product = dummyProduct; 34 } else { 35 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 36 } 37 } else if (Pageview.Item["DummyProduct"] == null) { 38 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 39 } 40 41 string anonymousUsersLimitations = Pageview.AreaSettings.GetRawValueString("AnonymousUsers", ""); 42 bool anonymousUser = Pageview.User == null; 43 bool isErpConnectionDown = !Dynamicweb.Ecommerce.DynamicwebLiveIntegration.TemplatesHelper.IsWebServiceConnectionAvailable(); 44 bool hidePrice = anonymousUsersLimitations.Contains("price") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHidePrices") && isErpConnectionDown; 45 46 bool showInformativePrice = Model.Item.GetBoolean("ShowInformativePrice"); 47 string unitId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("UnitId")) ? Dynamicweb.Context.Current.Request.Form.Get("UnitId") : string.Empty; 48 49 string priceFontSize = Model.Item.GetRawValueString("PriceSize", "fs-2"); 50 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", ""); 51 string layout = Model.Item.GetRawValueString("Layout", "horizontal"); 52 string textAlign = horizontalAlign == "center" ? "text-center" : string.Empty; 53 textAlign = horizontalAlign == "end" ? "text-end" : textAlign; 54 55 horizontalAlign = horizontalAlign == "center" && layout == "horizontal" ? "justify-content-center" : horizontalAlign; 56 horizontalAlign = horizontalAlign == "end" && layout == "horizontal" ? "justify-content-end" : horizontalAlign; 57 horizontalAlign = horizontalAlign == "center" && layout == "vertical" ? "align-items-center" : horizontalAlign; 58 horizontalAlign = horizontalAlign == "end" && layout == "vertical" ? "align-items-end" : horizontalAlign; 59 60 string flexDirection = layout == "horizontal" ? string.Empty : "flex-column"; 61 string flexGap = layout == "horizontal" ? "gap-3" : string.Empty; 62 string order = layout == "horizontal" ? string.Empty : "order-2"; 63 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? "theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 64 theme = GetViewParameter("theme") != null ? GetViewParameterString("theme") : theme; 65 } 66 67 @if (!hidePrice && product.Id != null && !product.Discontinued) 68 { 69 string showPricesWithVat = Pageview.Area.EcomPricesWithVat.ToLower(); 70 bool neverShowVat = string.IsNullOrEmpty(showPricesWithVat); 71 72 string priceMin = ""; 73 string priceMax = ""; 74 75 string liveInfoClass = ""; 76 string productInfoFeed = ""; 77 bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Ecommerce.DynamicwebLiveIntegration.TemplatesHelper.IsLazyLoadingForProductInfoEnabled; 78 if (isLazyLoadingForProductInfoEnabled) 79 { 80 if (Dynamicweb.Context.Current.Items.Contains("ProductInfoFeed")) 81 { 82 productInfoFeed = Dynamicweb.Context.Current.Items["ProductInfoFeed"]?.ToString(); 83 if (!string.IsNullOrEmpty(productInfoFeed)) 84 { 85 productInfoFeed = $"data-product-info-feed=\"{productInfoFeed}\""; 86 } 87 } 88 liveInfoClass = "js-live-info"; 89 } 90 91 <div class="@textAlign @liveInfoClass item_@Model.Item.SystemName.ToLower()" data-product-id="@product.Id" @productInfoFeed> 92 @if (showInformativePrice && product.PriceInformative.Price != 0) 93 { 94 <div class="opacity-50"> 95 <span>@Translate("RRP") </span> 96 <span class="text-decoration-line-through text-price">@product.PriceInformative.PriceFormatted</span> 97 </div> 98 } 99 <div class="@priceFontSize m-0 d-flex @flexDirection @flexGap @horizontalAlign product-price-efa" itemprop="offers" itemscope itemtype="https://schema.org/Offer"> 100 <span itemprop="priceCurrency" content="@product.Price.CurrencyCode" class="d-none"></span> 101 102 103 @if (showPricesWithVat == "false" && !neverShowVat) 104 { 105 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 106 { 107 <span itemprop="price" content="" class="d-none"></span> 108 <span class="text-decoration-line-through js-text-decoration-line-through opacity-75 me-3 text-price js-text-price d-none" data-show-if="LiveProductInfo.product.Price.Price != LiveProductInfo.product.PriceBeforeDiscount.Price"></span> 109 } 110 else 111 { 112 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceWithoutVatFormatted : product.PriceBeforeDiscount.PriceWithoutVatFormatted; 113 114 <span itemprop="price" content="@product.Price.PriceWithoutVat" class="d-none"></span> 115 if (product.Price.Price != product.PriceBeforeDiscount.Price) 116 { 117 <span class="text-decoration-line-through opacity-75 @order">@beforePrice</span> 118 } 119 } 120 } 121 else 122 { 123 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 124 { 125 <span itemprop="price" content="" class="d-none"></span> 126 <span class="text-decoration-line-through js-text-decoration-line-through opacity-75 me-3 text-price js-text-price d-none" data-show-if="LiveProductInfo.product.Price.Price != LiveProductInfo.product.PriceBeforeDiscount.Price"></span> 127 } 128 else 129 { 130 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceFormatted : product.PriceBeforeDiscount.PriceFormatted; 131 132 string googlepriceraw = product.Price.PriceWithVat.ToString(); 133 string googlepriceformatted = googlepriceraw.Replace(',', '.'); 134 135 <span itemprop="price" content="@googlepriceformatted" class="d-none"></span> 136 137 if (product.Price.Price != product.PriceBeforeDiscount.Price) 138 { 139 <span class="text-decoration-line-through opacity-75 @order"> 140 <span class="text-price">@beforePrice</span> 141 </span> 142 } 143 } 144 } 145 146 @if (showPricesWithVat == "false" && !neverShowVat) 147 { 148 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 149 { 150 <span class="text-price js-text-price"> 151 <span class="spinner-border" role="status"></span> 152 </span> 153 } 154 else 155 { 156 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 157 158 if (product?.VariantInfo?.VariantInfo != null) 159 { 160 priceMin = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 161 priceMax = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 162 } 163 if (priceMin != priceMax) 164 { 165 price = priceMin + " - " + priceMax; 166 } 167 <span class="@theme"> 168 <span class="text-price">@price</span> 169 </span> 170 } 171 } 172 else 173 { 174 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 175 { 176 <span class="text-price js-text-price"> 177 <span class="spinner-border" role="status"></span> 178 </span> 179 } 180 else 181 { 182 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceFormatted : product.Price.PriceFormatted; 183 var priceStandardFieldValueConverted = CampaignPrice.GetConvertedPriceWithVat(product); 184 bool campaignPrice = CampaignPrice.CheckCampaign(product, priceStandardFieldValueConverted); 185 var priceBefore = CampaignPrice.PriceBeforeWithVat(product, priceStandardFieldValueConverted); 186 187 if (product?.VariantInfo?.VariantInfo != null) 188 { 189 priceMin = product?.VariantInfo?.PriceMin?.PriceFormatted != null ? product.VariantInfo.PriceMin.PriceFormatted : ""; 190 priceMax = product?.VariantInfo?.PriceMax?.PriceFormatted != null ? product.VariantInfo.PriceMax.PriceFormatted : ""; 191 } 192 if (priceMin != priceMax) 193 { 194 price = priceMin + " - " + priceMax; 195 } 196 <div class="d-flex flex-wrap"> 197 @if (campaignPrice) 198 { 199 @*<span itemprop="price" content="@priceStandardFieldValueConverted" class="d-none"></span>*@ 200 <span class="text-decoration-line-through opacity-75 @order w-100"> 201 <span class="text-price">@priceBefore</span> 202 </span> 203 } 204 <span class="@theme w-100"> 205 <span class="text-price">@price</span> 206 </span> 207 </div> 208 } 209 } 210 211 @* Stock state for Schema.org, start *@ 212 @{ 213 Uri url = Dynamicweb.Context.Current.Request.Url; 214 } 215 216 <link itemprop="url" href="@url"> 217 218 @{ 219 bool IsNeverOutOfStock = product.NeverOutOfstock; 220 } 221 222 @if (IsNeverOutOfStock) 223 { 224 <span itemprop="availability" class="d-none">@Translate("Available in stock")</span> 225 } 226 else 227 { 228 if (product.StockLevel > 0) 229 { 230 <span itemprop="availability" class="d-none">InStock</span> 231 } 232 else 233 { 234 <span itemprop="availability" class="d-none">OutOfStock</span> 235 } 236 } 237 @* Stock state for Schema.org, stop *@ 238 239 </div> 240 241 @if (showPricesWithVat == "false" && !neverShowVat) 242 { 243 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 244 { 245 <small class="opacity-85 fst-normal js-text-price-with-vat d-none" data-suffix="@Translate("Incl. VAT")"></small> 246 } 247 else 248 { 249 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 250 251 if (product?.VariantInfo?.VariantInfo != null) 252 { 253 priceMin = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 254 priceMax = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 255 } 256 if (priceMin != priceMax) 257 { 258 price = priceMin + " - " + priceMax; 259 } 260 <small class="opacity-85 fst-normal">@price @Translate("Incl. VAT")</small> 261 } 262 } 263 </div> 264 } else if (Pageview.IsVisualEditorMode) { 265 <div class="alert alert-dark m-0" role="alert"> 266 <span>@Translate("No products available")</span> 267 </div> 268 } 269
Kristina deler viden om børn, bevægelse og en børnevenlig have med gode udendørs legeredskaber.
Se, hvordan Trine skaber en have med gode udendørs legeredskaber ved familiens sommerhus.
Bliv klogere på designerens tanker bag det populære Cubic-beslag, som i mere end 10 år har spillet hovedrollen, når der skal bygges pergolaer og andre kreative uderum.
Kan du huske følelsen af spænding over at løfte en stor sten i skoven, og glæden ved at tage et stykke bark af en gammel....
Varenr. bestĂĄr af:
Gyngesæder, gyngeophæng, Cubic beslag og stolper til nedgravning. Inkl. skruer.
Gynger:
Plast - GrĂĄsort (2 stk.).
Belastning pr. sæde = 70 kg.
Inkl. 4 stk. gyngeophæng.
Beslag:
Cubic Hjørnebeslag Dobbelt 20×20×20 cm (4 stk.).
Galvaniseret og pulverlakeret sort.
Sort RAL 9005.
Stolper:
Omlimede træstolper 9×9 cm til nedgravning.
Trykimprægneret (NTR mærket klasse A) og grundmalet sort.
Nærmeste RAL 9005 - vandbaseret.
Trykimprægneret NTR mærket klasse A - betyder, at de er effektivt beskyttet mod råd og tåler nedgravning. Stolperne er sammenlimet (omlimet) af to stykker træ for at mindske revnedannelser og vridning samt sikre styrke og formstabilitet.
Leveres som "Saml selv".
PLUS legereskaber er CE mærket - godkendt til privat brug.
Design:
PLUS A/S
Farve:
Sort RAL 9005
Materiale:
Træ
Overflade:
Trykimprægneret og grundmalet
Volume:
0.22976
Weight:
108.3
CE Mærkning:
Yes
Width in Cm:
198
Height in cm:
217
Length in cm:
268
Kristina deler viden om børn, bevægelse og en børnevenlig have med gode udendørs legeredskaber.
Se, hvordan Trine skaber en have med gode udendørs legeredskaber ved familiens sommerhus.
Bliv klogere på designerens tanker bag det populære Cubic-beslag, som i mere end 10 år har spillet hovedrollen, når der skal bygges pergolaer og andre kreative uderum.
Kan du huske følelsen af spænding over at løfte en stor sten i skoven, og glæden ved at tage et stykke bark af en gammel....
Varenr. bestĂĄr af:
Gyngesæder, gyngeophæng, Cubic beslag og stolper til nedgravning. Inkl. skruer.
Gynger:
Plast - GrĂĄsort (2 stk.).
Belastning pr. sæde = 70 kg.
Inkl. 4 stk. gyngeophæng.
Beslag:
Cubic Hjørnebeslag Dobbelt 20×20×20 cm (4 stk.).
Galvaniseret og pulverlakeret sort.
Sort RAL 9005.
Stolper:
Omlimede træstolper 9×9 cm til nedgravning.
Trykimprægneret (NTR mærket klasse A) og grundmalet sort.
Nærmeste RAL 9005 - vandbaseret.
Trykimprægneret NTR mærket klasse A - betyder, at de er effektivt beskyttet mod råd og tåler nedgravning. Stolperne er sammenlimet (omlimet) af to stykker træ for at mindske revnedannelser og vridning samt sikre styrke og formstabilitet.
Leveres som "Saml selv".
PLUS legereskaber er CE mærket - godkendt til privat brug.
Design:
PLUS A/S
Farve:
Sort RAL 9005
Materiale:
Træ
Overflade:
Trykimprægneret og grundmalet
Volume:
0.22976
Weight:
108.3
CE Mærkning:
Yes
Width in Cm:
198
Height in cm:
217
Length in cm:
268