GT Peace Single Speed
So fast. So agile. So stable. So comfortable. So simple. Just hop on the light and durable chromoly frame, settle your tush into the comfy saddle, place your feet on the pedals and let the single speed drivetrain do all the work for you. Get going too fast? No problem. One pull the brake levers and the mechanical discs will slow you right down. And the tires? They’re ready to take you through all sorts of terrain. Trust us. You’re in for the ride of your life!
Error executing template "Designs/Swift-v2/Paragraph/Swift-v2_BackInStockNotification.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_d6a2ede9ebb2436fb73870c11d884a95.ExecuteAsync() at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 68 at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in E:\dw10agent\_w\2\s\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 14 at Dynamicweb.Rendering.Template.RenderRazorTemplate() in E:\dw10agent\_w\2\s\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 847
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> @using System.Linq @using Dynamicweb.Ecommerce @using Dynamicweb.Ecommerce.ProductCatalog @using Dynamicweb.Ecommerce.Products @using Dynamicweb.Ecommerce.Stocks @functions { private static bool BackInStockRegisteredForUser(ProductViewModel product, string unitId = "", long stocklocationId = 0) { if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn()) return false; Product productObject = Services.Products.GetProductById(product.Id, product.VariantId, product.LanguageId); StockLocation stockLocation = Services.StockService.GetStockLocation(stocklocationId); double unitStock = productObject.GetUnitStock(stockLocation, unitId); return unitStock <= 0d && ProductBackInStockNotification.BackInStockNotificationExists(productObject, unitId); } } @{ ProductViewModel product = null; if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) { product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; } } @if ((product is object && product.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock)) { bool productInStock = product.StockLevel > 0 || product.NeverOutOfstock; if (!productInStock) { string notifiedMessage = Model.Item.GetString("NotifiedMessage"); string notifiedMessageId = $"NotifiedMessage_item_{Model.Item.SystemName.ToLower()}_{product.Id}_{product.VariantId.Replace(".", "_")}"; string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", ""); horizontalAlign = horizontalAlign == "center" ? "justify-content-center" : horizontalAlign; horizontalAlign = horizontalAlign == "end" ? "justify-content-end" : horizontalAlign; horizontalAlign = horizontalAlign == "full" ? "" : horizontalAlign; string flexFill = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "flex-fill" : ""; string fullWidth = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "w-100" : ""; bool notificationRegisteredForUser = BackInStockRegisteredForUser(product); <div class="d-flex flex-row w-100 @horizontalAlign @fullWidth item_@Model.Item.SystemName.ToLower()"> <div class="@horizontalAlign @fullWidth @(notificationRegisteredForUser ? "" : "d-none")" id="@notifiedMessageId"> @notifiedMessage </div> @if (!notificationRegisteredForUser) { string notifyIcon = Model.Item.GetString("Icon"); string notifyLabel = !notifyIcon.Contains("_none") ? "<span class=\"icon-2\">" + ReadFile(notifyIcon) + "</span>" : ""; notifyLabel += " " + Translate("Notify me when available"); string modalId = $"modal_item_{Model.Item.SystemName.ToLower()}_{product.Id}_{product.VariantId.Replace(".", "_")}"; string formId = $"NotificationForm_item_{Model.Item.SystemName.ToLower()}_{product.Id}_{product.VariantId.Replace(".", "_")}"; string notificationButtonId = $"NotificationButton_item_{Model.Item.SystemName.ToLower()}_{product.Id}_{product.VariantId.Replace(".", "_")}"; string notificationOnClick = !Pageview.IsVisualEditorMode ? $"swift.BackInStockNotification.SubmitNotification('{formId}', '{modalId}', '{notifiedMessageId}', '{notificationButtonId}')" : ""; string productPage = $"/Default.aspx?ID={GetPageIdByNavigationTag("ProductDetailPage")}"; <div class="d-flex @horizontalAlign @fullWidth js-input-group"> <div class="input-group input-primary-button-group flex-nowrap"> <button type="button" class="btn btn-primary @flexFill" data-dw-button="primary" id="@notificationButtonId" data-bs-toggle="modal" data-bs-target="#@modalId"> <span class="text-nowrap d-flex align-items-center justify-content-center gap-2"> @notifyLabel </span> </button> </div> </div> <div class="modal fade" id="@modalId" tabindex="-1" aria-labelledby="label_@modalId" aria-hidden="true"> <div class="modal-dialog pt-8"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="label_@modalId">@Translate("Back in stock")</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="@Translate("Close")"></button> </div> <div class="modal-body"> <form name="@product.Id" id="@formId" method="post" action="@productPage"> <input type="hidden" name="ProductID" value="@product.Id" /> <input type="hidden" name="VariantID" value="@product.VariantId" /> <input type="hidden" name="LanguageID" value="@product.LanguageId" /> <input type="hidden" name="CartCmd" value="createnotificationforthisproduct" /> <div class="m-2"> @Translate("Send me an email when the product is in stock.") </div> <div class="form-floating m-2"> <input class="form-control" type="text" id="NotificationEmail" value="@(Pageview.User != null ? Pageview.User.Email : "")" name="NotificationEmail" placeholder="@Translate("Email")" required="required" aria-required="aria-required" /> <label for="NotificationEmail" class="form-label">@Translate("Email")</label> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dw-button="primary" onclick="@notificationOnClick">@Translate("Submit")</button> </div> </div> </div> </div> } </div> } } else if (Pageview.IsVisualEditorMode) { <div class="alert alert-dark m-0">@Translate("Back in stock notification will be shown here")</div> }
- Brakes: Shimano M445 hydrualiske skivebremser
- Gender: Men
- Brand name: GT bicycles
- Manufacturer: Trek
- Additional equipment:
- Brake type: Mechanical disc
- Brakes: Shimano M445 hydrualiske skivebremser
- Color:
- Frame size (cm): 0
- Gear: 21
- Gear model: Shimano SLX M7100
- Gear type: External Derailleur
- Gender: Men
- Material usage: Aluminum
- Recommended use:
- Tires: Bontrager H2 Hard-Case Lite, 700x28c
- Wheel: Formula disc 24-hullet
- Wheel size: 28"
- Volume: 0 m³
- Weight: 0 kg
- Width: 0 cm
- Height: 0 cm
- Brand name: GT bicycles
- Parent Company: yy
- Sub Brand: yy
- Brake type: Mechanical disc
- Gear: 21
- Gear type: External Derailleur
- Wheel size: 28"
- Gear (# of): 21
Specifications LIST
Bike spec
- Brand name
- GT bicycles
- Parent Company
- yy
- Sub Brand
- yy
- Brake type
- Mechanical disc
- Gear
- 21
- Gear type
- External Derailleur
- Wheel size
- 28"
- Gear (# of)
- 21
Specifications COLUMNS
Bike spec
- Brand name
- GT bicycles
- Parent Company
- yy
- Sub Brand
- yy
- Brake type
- Mechanical disc
- Gear
- 21
- Gear type
- External Derailleur
- Wheel size
- 28"
- Gear (# of)
- 21
Specifications TABLE
Bike spec
| Brand name | GT bicycles |
| Parent Company | yy |
| Sub Brand | yy |
| Brake type | Mechanical disc |
| Gear | 21 |
| Gear type | External Derailleur |
| Wheel size | 28" |
| Gear (# of) | 21 |
Specifications Bullets
Bike spec
- Brand name: GT bicycles
- Parent Company: yy
- Sub Brand: yy
- Brake type: Mechanical disc
- Gear: 21
- Gear type: External Derailleur
- Wheel size: 28"
- Gear (# of): 21
Specifications COMMA SEPARATED
Bike spec
- Brand name: GT bicycles
- Parent Company: yy
- Sub Brand: yy
- Brake type: Mechanical disc
- Gear: 21
- Gear type: External Derailleur
- Wheel size: 28"
- Gear (# of): 21
Specifications ACCORDION
- GT bicycles
- yy
- yy
- Mechanical disc
- 21
- External Derailleur
- 28"
- 21