PlastiRoute™ slows down cars in Carcavelos
This bright red braking zone made of PlastiRoute™ Rollgrip helps keep school children safe by encouraging car drivers to slow down before they reach a pedestrian crossing near the local school.
The bright red colour on this PlastiRoute Rollgrip is impossible not to notice – and that is exactly the point of this new marking in Carcavelos, Portugal. Situated about 12 km west of the capital of Lisbon, Carcavelos is an area known for its long and sandy beaches, but wherever you are in the world traffic safety is always an issue.
These specific markings were made in order to bring extra attention to a pedestrian crossing located near the school “Colégio Marista de Carcavelos”. With the possibility of small school children crossing the road, there is of course a very specific need to ensure that the cars don’t drive too fast in this area.
The purpose of this particular application was therefore to create a braking zone leading up to the pedestrian crossings near the school. As cars are coming closer the crossing, the red marking will instinctively catch the eye of the drivers and alarm them that they need to slow down.
Apart from being very effective, PlastiRoute Rollgrip is also quite easy to handle. All you need is a mixer to mix the components of the cold plastic material, tape to mark up the area, and a roller to spread the cold plastic. The material is easily rolled out on the surface and as it contains skid resistant aggregates, the finished surfaces reaches SRT values up to 80. This is a very important feature because the non-slippery surface reduces the braking distance for cars in the braking zone and thus increases the safety for both pedestrians and drivers.
If you want to hear more about our road marking solutions, don’t hesitate to contact your local Geveko Markings expert!
Error executing template "Designs/Swift/Paragraph/Swift_ArticleList.cshtml" System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object. at Dynamicweb.Content.Items.Queries.Repository.IsPageAllowed(Page page) at Dynamicweb.Content.Items.Queries.Repository.GetPagesByIds(IEnumerable`1 parentIds, Boolean includeChildItems, Boolean checkPermissions, List`1& childPages) at Dynamicweb.Content.Items.Queries.Repository.SelectByParentPageIds(IEnumerable`1 parentIds, Query query, Boolean includeParagraphs, Boolean includeChildItems, Boolean checkPermissions, Boolean includeInheritedItems) at Dynamicweb.ItemPublisher.Frontend.GetItems() at Dynamicweb.ItemPublisher.Frontend.List() at Dynamicweb.ItemPublisher.Frontend.GetContent() at Dynamicweb.ItemPublisher.Frontend.GetContentBySettings(String settings) --- End of inner exception stack trace --- at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Dynamicweb.Extensibility.AddIns.AddInManager.InvokeFunction(Object instance, String functionName, Object[] arguments) at Dynamicweb.Rendering.TemplateBase`1.RenderItemList(Object settings) at CompiledRazorTemplates.Dynamic.RazorEngine_0df2fd1d68f24f8c83d31006481af027.GetArticles(String itemType) in D:\dynamicweb.net\Solutions\CO3\geveko.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList.cshtml:line 16 at CompiledRazorTemplates.Dynamic.RazorEngine_0df2fd1d68f24f8c83d31006481af027.Execute() in D:\dynamicweb.net\Solutions\CO3\geveko.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList.cshtml:line 52 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 3 @functions 4 { 5 private object GetArticles(string itemType) 6 { 7 string listSource = Model.Item.GetRawValueString("ListSource", Model.PageID.ToString()); 8 string articleListSortOrder = Model.Item.GetRawValueString("ArticleListSortOrder", "Descending"); 9 var parent = Dynamicweb.Context.Current.Request.QueryString.Get("list"); 10 var query = string.IsNullOrEmpty(parent) ? listSource : parent; 11 var includeAllChildren = Model.Item.GetRawValueString("ListDepth", "all") == "all" ? true : false; 12 var listContext = Model.Item?.GetList("ListContext")?.GetRawValue().OfType<string>(); 13 var filterString = string.Join(" or ", listContext.Select(item => $"Tags == \"{item}\" or Tags ends with \",{item}\" or Tags starts with \"{item},\" or Tags contains \",{item},\"")); 14 int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; 15 16 return RenderItemList(new 17 { 18 ItemType = itemType, 19 ListTemplate = "ItemPublisher/List/List.cshtml", 20 ItemFieldsList = "*", 21 ListSourceType = "Page", 22 ListSourcePage = query, 23 ListPageSize = maxItemsInList, 24 IncludeParagraphItems = true, 25 ListOrderBy = "PublishedDate", 26 ListSecondOrderBy = "Updated", 27 ListOrderByDirection = articleListSortOrder, 28 IncludeAllChildItems = includeAllChildren, 29 Filter = itemType == "Swift_Article" ? filterString : null // Filter only if "articles only" 30 }); 31 } 32 } 33 34 @{ 35 string listBehaviour = Model.Item.GetRawValueString("ListBehaviour", "articles"); 36 string articleListLayout = Model.Item.GetRawValueString("ArticleListLayout", "grid"); 37 string columnTheme = Model.Item.GetRawValueString("ColumnTheme", string.Empty).ToString().Replace(" ", "").Trim().ToLower(); 38 string columnThemeClass = columnTheme != string.Empty ? " theme " + columnTheme + " p-3" + (articleListLayout == "carousel" ? " px-lg-4" : string.Empty) : string.Empty; 39 40 int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; 41 42 <div class="h-100@(columnThemeClass) item_@Model.Item.SystemName.ToLower()"> 43 <div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div> 44 45 @switch (articleListLayout) 46 { 47 case "grid": 48 49 { 50 if (listBehaviour == "articles") 51 { 52 @GetArticles("Swift_Article") 53 } 54 if (listBehaviour == "lists") 55 { 56 @GetArticles("Swift_ArticleListPage") 57 } 58 } 59 60 break; 61 62 case "carousel": 63 var carouselSettings = Model.Item.GetRawValueString("CarouselSettings", "4"); 64 string slidesPerPage = $"slider-item-show{carouselSettings}"; 65 string navigationStyle = $"{Model.Item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; 66 string navigationPlacement = $"{Model.Item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; 67 string indicatorStyle = $"{Model.Item.GetRawValueString("IndicatorStyle", string.Empty)}"; 68 string revealSlides = Model.Item.GetRawValueString("RevealSlides", "reveal") == "reveal" ? "slider-item-reveal" : string.Empty; 69 string sliderItemsGap = Model.Item.GetRawValueString("SliderItemsGap", "slider-item-gap") == "slider-item-nogap" ? "slider-item-nogap" : string.Empty; 70 string navigationAlwaysVisible = (Model.Item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; 71 string navigationVisibleOnTouch = (Model.Item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; 72 string navigationShowScrollbar = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; 73 string scrollBarForceMobile = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "--swiffy-slider-track-height:0.5rem !important;" : string.Empty; 74 string navigationSmall = (Model.Item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; 75 string navigationInvertColors = (Model.Item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; 76 string navigationSlideEntirePage = (Model.Item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; 77 string navigationNoLoop = (Model.Item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; 78 string indicatorsOutsideSlider = (Model.Item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; 79 string indicatorsHighlightActive = (Model.Item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; 80 string indicatorsInvertColors = (Model.Item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; 81 string indicatorsVisibleOnSmallDevices = (Model.Item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; 82 string animation = Model.Item.GetRawValueString("Animation", string.Empty) != string.Empty ? $"slider-nav-animation {Model.Item.GetRawValueString("Animation")}" : string.Empty; 83 string autoplay = (Model.Item.GetBoolean("Autoplay")) ? "slider-nav-autoplay" : string.Empty; 84 string autoplayInterval = Model.Item.GetRawValueString("AutoplayInterval", string.Empty); 85 bool hideSliderNavigation = false; 86 87 if (navigationStyle == "slider-nav-none") 88 { 89 hideSliderNavigation = true; 90 } 91 92 <div id="Slider_@Model.ID" class="swiffy-slider @(slidesPerPage) @(navigationStyle) @(revealSlides) @(navigationPlacement) @(navigationAlwaysVisible) @(navigationVisibleOnTouch) @(sliderItemsGap) @(indicatorStyle) @(navigationShowScrollbar) @(navigationSmall) @(navigationInvertColors) @(indicatorsOutsideSlider) @(navigationNoLoop) @(indicatorsHighlightActive) @(indicatorsInvertColors) @(indicatorsVisibleOnSmallDevices) @(navigationSlideEntirePage) @(animation) @(autoplay) item_@Model.Item.SystemName.ToLower()" style="--swiffy-slider-nav-light:var(--swift-foreground-color);--swiffy-slider-nav-dark:var(--swift-background-color);visibility:hidden;opacity:0;@(scrollBarForceMobile)" data-slider-nav-autoplay-interval="@(autoplayInterval)"> 93 <div class="slider-container pb-3 py-lg-3 px-lg-3 mt-lg-n3 mx-lg-n3"> 94 @{ 95 if (listBehaviour == "articles") 96 { 97 @GetArticles("Swift_Article") 98 } 99 if (listBehaviour == "lists") 100 { 101 @GetArticles("Swift_ArticleListPage") 102 } 103 } 104 </div> 105 106 @if (!hideSliderNavigation) 107 { 108 <button type="button" title="@Translate("Previous slide")" class="slider-nav" style="z-index:1;"> 109 <span class="visually-hidden">@Translate("Previous slide")</span> 110 </button> 111 <button type="button" title="@Translate("Next slide")" class="slider-nav slider-nav-next" style="z-index:1;"> 112 <span class="visually-hidden">@Translate("Next slide")</span> 113 </button> 114 } 115 @if (indicatorStyle != "slider-indicators-hidden") 116 { 117 <div class="slider-indicators" style="z-index:1;"></div> 118 } 119 120 <script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> 121 <script> 122 window.addEventListener("load", () => { 123 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 124 window.swiffyslider.initSlider(document.querySelector('#Slider_@Model.ID')); 125 document.querySelector('#Slider_@Model.ID').style.opacity = 1; 126 document.querySelector('#Slider_@Model.ID').style.visibility = "visible"; 127 }); 128 129 document.addEventListener("updated.swift.pageupdater", function (data) { 130 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 131 window.swiffyslider.initSlider(document.querySelector('#Slider_@Model.ID')); 132 document.querySelector('#Slider_@Model.ID').style.opacity = 1; 133 document.querySelector('#Slider_@Model.ID').style.visibility = "visible"; 134 }); 135 </script> 136 137 @if (indicatorStyle != "slider-indicators-hidden") 138 { 139 <script type="module"> 140 const slider = document.querySelector('#Slider_@Model.ID'); 141 const sliderContainer = slider.querySelector('.slider-container'); 142 let slides = sliderContainer.querySelectorAll('article'); 143 const sliderIndicators = slider.querySelector('.slider-indicators'); 144 145 slides.forEach((slide,index) => { 146 const indicator = document.createElement('template'); 147 indicator.innerHTML = ` 148 <button type="button" class="${index == 0 ? "active" : ""}" title='@Translate("Go to slide") ${index + 1}'> 149 <span class="visually-hidden">@Translate("Go to slide") ${index + 1}</span> 150 </button> 151 `; 152 sliderIndicators.appendChild(indicator.content); 153 }); 154 </script> 155 } 156 </div> 157 158 break; 159 } 160 </div> 161 } 162