Byg shelter på hjul - Se fine kundeprojekter
Se mere fra samleprocessen, og få inspiration til indretning af et shelter på hjul.
Det mobile shelter inviterer til hulehygge, egoisttid eller tosomhed i ét med naturen, hjemme i haven. Nyd tiden udendørs, trods mangel på sol. Shelteret kan indrettes som udendørs læsehjørne eller som legekrog til børnene og placeres lige der, hvor man ønsker. Kun fantasien sætter grænser.
Se vores Youtube video - og få et godt intryk af hvad det kræver at samle et PLUS Shelter på hjul.
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_524f163f12484be2a531f5e309983f60.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
Se mere fra samleprocessen, og få inspiration til indretning af et shelter på hjul.
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:
Shelter inkl. hjul/beslag/skruer og polyester dug.
Grundmål:
Udvendige grundmål: 203×123×203 cm (L×B×H).
Udvendig højdemål ekskl. hjul: 186 cm.
Indvendige mål: 185×104 cm (L×B).
Gavle og bagvæg:
Profilbrædder 15 mm.
Gulvkonstruktion 20×120 mm brædder.
Leveres i færdigsamlede sektioner.
Tag og front:
Dug af kraftig vævet hvid polyester kvalitet med PVC belægning 650 gr./m².
Fastgøres med burrebånd (medfølger).
Lynlås i midten med mulighed for oprulning.
Vinduesmål: 59×79 cm.
Estimeret montagetid:
1 person - 4 timer.
Leveres ubehandlet og som "Saml selv".
PLUS anbefaler altid grundbehandling inden montage.
Farve:
Natur
Materiale:
Nåletræ
Overflade:
Ubehandlet
Volume:
1.12056
Weight:
150
Width in Cm:
123
Height in cm:
203
Length in cm:
203
Se mere fra samleprocessen, og få inspiration til indretning af et shelter på hjul.
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:
Shelter inkl. hjul/beslag/skruer og polyester dug.
Grundmål:
Udvendige grundmål: 203×123×203 cm (L×B×H).
Udvendig højdemål ekskl. hjul: 186 cm.
Indvendige mål: 185×104 cm (L×B).
Gavle og bagvæg:
Profilbrædder 15 mm.
Gulvkonstruktion 20×120 mm brædder.
Leveres i færdigsamlede sektioner.
Tag og front:
Dug af kraftig vævet hvid polyester kvalitet med PVC belægning 650 gr./m².
Fastgøres med burrebånd (medfølger).
Lynlås i midten med mulighed for oprulning.
Vinduesmål: 59×79 cm.
Estimeret montagetid:
1 person - 4 timer.
Leveres ubehandlet og som "Saml selv".
PLUS anbefaler altid grundbehandling inden montage.
Farve:
Natur
Materiale:
Nåletræ
Overflade:
Ubehandlet
Volume:
1.12056
Weight:
150
Width in Cm:
123
Height in cm:
203
Length in cm:
203