Unhandled Error!

Error writing to the cache file

Document /modules/core/classes/core_filecache.php
Document type PHP document
Line 54
Exception class Phpr_SystemException

Code Highlight

 
			$key = $this->fix_key($key);
			$dest_path = $this->dir_path.'/'.$key;
 
			$fp = @fopen($dest_path, 'w');
			if (!$fp)
				throw new Phpr_SystemException('Error writing to the cache file');
 
			try
			{
				if (flock($fp, LOCK_EX | LOCK_NB))
				{
					@fwrite($fp, $value);
# Call Stack Code Document Line
15 Core_FileCache->set_value('nthsv3-partial_shop-product5_2021_60bc4deeba55afcaaea9902e20c475959256aab7', ' <!-- view=shop:product5_2021 --> <section class="product-fresno-broom-hire"> <div class="row"> <div class="three mobile-four columns prod-img" style="text-align: center;"> <div class="product-images"> <div class="main"> <img src="/uploaded/thumbnails/Fresno_Float_Hire_5069_400x400.jpg" title="Fresno Broom Hire" alt="Fresno Broom Hire" width="400px" height="400px" /> </div> </div> </div> <div class="four mobile-four columns middle"> <div class="meta"> <h1 style="font-weight: 900"><em>Fresno Broom Hire</em></h1> <div class="bullets"> <ul> <li>Improves Finish of Concrete</li> <li>Swivel Head</li> <li>Textured Finish: Better Grip for Walking</li> <li>Prevents Slips &amp; Falls&nbsp;</li> </ul> <ul> <li><span style="font-weight: 700; color: #b40026;">Save 22&#37;</span> on Average UK Price </li> <li>Hire for <span style="font-weight: 700; color: #002B41;">DIY</span> or <span style="font-weight: 700; color: #002B41;">Trade</span></li> </ul> </div> <hr> <p style="font-size: 1.2em;"> <i class='fas fa-map-marker-alt fa-fw' style='padding-right: 1em'></i>&nbsp; <a href='#' title='Check Availability' data-reveal-id='postcode_modal' data-closeonbackgroundclick='false' style='color:#404040;'>Click & Collect: <span style='font-weight: 700;'>400</span> Locations</a> </p> <p style='font-size: 1.2em;'><i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide</p> <p style="font-size: 1.2em;"> <i class='fas fa-chart-line fa-fw' style='padding-right: 1em'></i>&nbsp; 5 hired in the last 24 hours </p> <p style="font-size: 1.2em; cursor: pointer" aria-label="Open pop-up: Why hire from National Tool Hire?" class="jsOpenPopUp"> <i class='fa-solid fa-circle-question' style='padding-right: 7px'></i> <span data-gtm="I: Why Hire From NTH (P)" style="color: #000; border-bottom: 1px #000 dashed;">Why Hire from National Tool Hire?</span> </p> </div> </div> <div class="five mobile-four columns"> <div class="product-description"> <form enctype="multipart/form-data" class="custom" action="/product/fresno-broom-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk6943a798db8d61.74029211"/> <!--<div class="twelve columns call-free-cta"><a href="tel:08008089600">Need Help? <span>Call 0800 808 9600</span></a></div>--> <div class="meta"> <div class="row"> <div class="twelve mobile-four columns hide-for-medium-up" style="margin: 1em 0"> <a href="https://www.nationaltoolhireshops.co.uk/payment-and-delivery/" data-gtm="B: Free Delivery (P)" target="_blank" title="Free Delivery: fresno-broom-hire"><img src="/themes/nthsv3/resources/images/NTH-banner-delivery-small_2.jpg" alt="Free Delivery & Collection" width="100%" height="100%" title="Free Delivery: Fresno Broom" /></a> </div> </div> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire-extended"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src="/img/NTH-sameday-click-collect.webp" alt="Same Day Hire click and collect" title="Same Day Hire click and collect" loading='eager' width="439" height="56" /> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown"></span></p> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown-hire"></span> </p> </div> <script> function showSameDayBanner() { const date = new Date(); let bookingDelay = 0; //let bookingDelay = 0; if (bookingDelay <= 0) { let sameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),11,00); let extendedSameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),14,00); if(date >= sameDayCutoff && date < extendedSameDayCutoff) { console.log('same-day-hire-extended'); document.getElementById('same-day-hire-extended').style.display = 'block'; let span = document.getElementById('same-day-countdown'); let seconds = (extendedSameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } else if (date < sameDayCutoff) { console.log('same-day-hire'); document.getElementById('same-day-hire').style.display = 'block'; let span = document.getElementById('same-day-countdown-hire'); let seconds = (sameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } } } function sameDayCountDownTime(t) { let hours = Math.floor(t/3600); let minutes = Math.floor((t % 3600)/60); let seconds = Math.floor(t % 60); let h = hours ? (hours === 1 ? '1hr' : hours + 'hrs') : ''; let m = minutes ? (minutes === 1 ? '1min' : minutes + 'mins') : ''; let s = seconds ? (seconds === 1 ? '1sec' : seconds + 'secs') : '' return [h, m, s].filter(e => e).join(' ') } showSameDayBanner(); </script> <div class="addtocart" style="background-color: #E6E6E6; margin-top: 20px;"> <!-- view:price_calculator6 --> <div class="twelve mobile-four columns pricetable" style="background-color: #fff;"> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">24 HOURS</span><br/><span class="prodpricecalc-sale">£57.75</span><br/> <span class="productpricecalc">£45.28</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">48 HOURS</span><br/><span class="prodpricecalc-sale">£60.00</span><br/> <span class="productpricecalc">£47.04</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">FRI - MON</span><br/><span class="prodpricecalc-sale">£66.00</span><br/> <span class="productpricecalc">£51.74</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">WEEKLY</span><br/><span class="prodpricecalc-sale">£75.00</span><br/> <span class="productpricecalc">£58.80</span> </div> </div> <div class="twelve mobile-four columns extrainfobox2" style="margin-bottom: 0;"> <a href="#" title="Book &amp; Pay Online" data-reveal-id="booking_modal" data-closeOnBackgroundClick="false" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;" ><i class="fa fa-lg fa-calendar"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="row" style="margin: 2em 0; padding: 1em 0;"> <div class="one mobile-one hide-for-small columns"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/VISA.png" alt="Visa" title="Visa" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/MC.png" alt="Mastercard" title="Mastercard" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/Apple.png" alt="Apple Pay" title="Apple Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/G-pay.png" alt="Google Pay" title="Google Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one hide-for-small columns"> <img src="/themes/nthsv3/resources/images/PP.png" alt="PayPal" title="PayPal" loading="lazy" width="100%" height="100%";> </div> <div class="one mobile-one hide-for-small columns"> </div> </div> </div> <div class="pay-in-3 twelve mobile-four columns" style="text-align: center;"> <p>Please note: All consumables are <b>non-refundable</b>. These are purchased items, not hired</p> <div class="paypal"><i class="fa-brands fa-paypal fa-bounce" style="color: #003087; padding-left: 0.5em; width: 1.5em; --fa-animation-iteration-count: 5;--fa-animation-timing: ease-in-out;"></i> <a title="PayPal Pay in 3 Available" href="#" data-reveal-id="paypal_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 solid;">PayPal 'Pay in 3' Available (0% interest)</a></div> </div> </div> </div> <div class="twelve mobile-four columns" style="margin-top: 2em;"> <div class="cd-tabs cd-tabs--vertical js-cd-tabs" style="width: 100%"> <nav class="cd-tabs__navigation"> <ul class="cd-tabs__list"> <li class="cd-tabs__list_li"> <a href="#tab-1" class="cd-tabs__item cd-tabs__item--selected" data-gtm="T: Description"> <span class="tab">Description</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-2" class="cd-tabs__item" data-gtm="T: Spec / Detail"> <span class="tab hide-for-small">Specification</span> <span class="tab show-for-small">Detail</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-3" class="cd-tabs__item" data-gtm="T: Related"> <span class="tab hide-for-small">Related Products</span> <span class="tab show-for-small">Related</span> </a> </li> </ul> </nav> <ul class="cd-tabs__panels"> <li id="tab-1" class="cd-tabs__panel cd-tabs__panel--selected text-component"> <h2>Fresno Broom Hire</h2> <h3>Concrete finishing broom with a texturising brush</h3> <p>Fresno brooms are designed for applying an even and textured finish to a concrete slab. This hand float is ideal for domestic, industrial and commercial applications when laying a fresh concrete slab. To use this manual concrete float, simply push or pull the float across wet concrete, for a smooth surface. Lower the brush and pull it along the surface for a textured finish. The zinc-plated steel blade is designed with curved edges to prevent it from digging into the concrete and causing lap marks.&nbsp;Using a concrete brush to leave a textured finish on a slab is ideal for use on driveways, walkways, staircases, patios, industrial floors and other areas with a lot of foot traffic. The rough texture of brushed concrete offers better traction for pedestrians to walk safely and reduces the risk of slips and falls when the floor is wet.</p> <div style="display: flex; flex-wrap: wrap"> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Safety-Footwear.webp" type="image/webp"> <img src="/img/product-icons/NTH-Safety-Footwear.png" loading="lazy" title="Boots" alt="Safety Footwear" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Gloves.webp" type="image/webp"> <img src="/img/product-icons/NTH-Gloves.png" loading="lazy" title="Gloves" alt="Gloves" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Large-Van-or-Truck.webp" type="image/webp"> <img src="/img/product-icons/NTH-Large-Van-or-Truck.png" loading="lazy" title="Transport - Truck" alt="Large Van or Truck" width="60" height="60"> </picture> </div> </div> </li> <li id="tab-2" class="cd-tabs__panel text-component"> <div class="product-short-specs"> <div> <table border="1"> <tbody> <tr> <td>Width</td> <td>900 mm</td> </tr> <tr> <td>Length</td> <td>915 mm</td> </tr> <tr> <td>Thickness</td> <td>1.05 mm</td> </tr> <tr> <td>Head Weight c/w Swivel (no handles)</td> <td>4.8 kg</td> </tr> <tr> <td>Head Weight c/w Swivel (with handles)</td> <td>8.4 kg</td> </tr> <tr> <td>Total Handle Length</td> <td>5.4 m</td> </tr> </tbody> </table> </div> </div> <p><strong>Please note:</strong> This product description and specification is based on the model most widely stocked across our network of partner stores. Alternative brands of equivalent specification may be supplied based on location and availability.</p> <div class="write-review"> <a href="#" data-reveal-id="write-review" data-closeOnBackgroundClick="false">Write Review</a> </div> </li> <li id="tab-3" class="cd-tabs__panel text-component"> <p> <!--<section class="related-products bottom block"> <div class="row">--> <!-- view:shop:product_list_diy_trade_21_2_row --> <!-- --> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="" style="display: inline-block; border: 1px solid #002B41; background: #002B41; color: #fff; padding: 0.5em 0.5em 0.2em 0.5em; font-size: 1.6em; text-transform: uppercase; font-weight: bold">Most Popular</div> <div class="twelve columns" style="border: 0.4em solid #002B41 !important; height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/easy-float-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Easy_Float_Hire_5068_400x400.jpg" title="Easy Float Hire " alt="Easy Float Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/easy-float-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Easy Float</a> </h2> <p class="context">A Manual Concrete Float</p> <!-- --> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £36.84 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 34&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide <br/><i class='fas fa-map-marker-alt'></i>&nbsp;&nbsp;Click & Collect: <span style='font-weight: 700;'>792</span> Locations </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Big_Blue_Glider_Hire_5067_400x400.jpg" title="Big Blue Glider Concrete Trowel Hire " alt="Big Blue Glider Concrete Trowel Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Big Blue Glider Concrete Trowel</a> </h2> <p class="context">A Manual Concrete Trowel</p> <!-- --> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £38.48 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 38&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide <br/><i class='fas fa-map-marker-alt'></i>&nbsp;&nbsp;Click & Collect: <span style='font-weight: 700;'>797</span> Locations </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/900mm_Power_Float_Hire_5066_400x400.jpg" title="900mm Petrol Power Float Hire " alt="900mm Petrol Power Float Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Product Name (C)" style="color: #404040; ">900mm Petrol Power Float</a> </h2> <p class="context">For Professional Concrete Finishing</p> <!-- --> <div class="catbul"><ul> <li>910mm Trowelling Diameter</li> <li>Quick Pitch Adjustment</li> <li>Adjustable Handlebar</li> <li>6x Faster</li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>910mm Trowelling Diameter</li> <li>Quick Pitch Adjustment</li> <li>Adjustable Handlebar</li> <li>6x Faster</li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £76.20 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 48&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide <br/><i class='fas fa-map-marker-alt'></i>&nbsp;&nbsp;Click & Collect: <span style='font-weight: 700;'>574</span> Locations </p> </div> </div> </div> </div> </div> <script type='application/ld+json'>{"@context":"http://www.schema.org","name":"Products","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https://www.nationaltoolhireshops.co.uk/product/easy-float-hire/"},{"@type":"ListItem","position":2,"url":"https://www.nationaltoolhireshops.co.uk/product/big-blue-glider-concrete-trowel-hire/"},{"@type":"ListItem","position":3,"url":"https://www.nationaltoolhireshops.co.uk/product/900mm-petrol-power-float-hire/"}],"numberOfItems": "3"}</script> <!-- --> <!--</div> </section>--> </p> </li> </ul> </div> <script src="/themes/nthsv3/resources/javascripts/foundation/util.js"></script> <script src="/themes/nthsv3/resources/javascripts/foundation/main.js"></script> </div> </div> </div> </form> <div id="booking_modal" ajax-id="6943a798ebb07" data-reveal class="" data-overlay="false"> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bookingV2.css" /> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/sites/nths/css/bookingV2.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bootstrap-isolated-4-6-1.css"> <link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.min.js" integrity=sha384-tc3TMXCcTCib89yECEQXI4e6DhhlwNrqzYpvyeSqBD2vB/KugQH7o3p+/UtKuS5L crossorigin="anonymous"></script> <form id="bookingBox"> <div class="booking-close"><a href="javascript:void(0)" class="closebtn">&times;</a></div> <div class="booking-info"> <div class="booking-calendar-box"> <div class="booking-tabs"> <div class="booking-tabs-wrap"> <input type="hidden" id="datepicker_booking_start" name="start_date"> <input type="hidden" id="datepicker_booking_end" name="end_date"> <button type="button" data-tab-id="datepicker_booking_start" class="active"> Booking Start Date </button> <button type="button" disabled data-tab-id="datepicker_booking_end"> Booking End Date </button> </div> </div> <div class="booking-calendar"></div> </div> <div class="booking-container bootstrap-isolation-4-6-1"> <input type="hidden" name="edit_item_id" value=""> <div id="booking_summary" class="row booking-stage-2 flex-nowrap"> <div class="col-md-9 col-sm-9"> <span id="booking_num_days" class="h4"></span> </div> <div class="col-md-3 col-sm-3 text-right"> <span class="h4 price-display-variable "></span> </div> </div> <div class="row"> <div class="col-12"> <div id="saturday_sameday_alert" class="my-3 alert alert-success d-none">Saturday Same-Day Hire is only available as Click &amp; Collect. If you require delivery/collection by us, please select Friday as the start date and Saturday as the end date (for no extra cost).</div> <div id="extended_sameday_alert" class="my-3 alert alert-success d-none"> Same-Day Hire is only available as Click &amp; Collect today. If you require delivery/collection by us, please select a different start date. </div> <div class="row"> <div class="col-md-12 form-group py-1 mt-3"> <label for="booking_quantity">Quantity</label> <div class="form-quantity"> <input type="number" class="form-control" step="1" min="1" value="1" name="booking_quantity" id="booking_quantity"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> </div> </div> </div> </div> <hr> <div class="row booking-stage-2"> <div class="col-12"> <section class="extras-section"> <div class="h5 mt-2 mb-3">Extras</div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5600]" class="mb-2 d-md-none">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5600]" id="extras[5600]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5600]" class="pl-2 d-none d-md-block">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5600]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5601]" class="mb-2 d-md-none">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5601]" id="extras[5601]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Extra Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5601]" class="pl-2 d-none d-md-block">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5601]">£0.00</div> </div> </div> </section> </div> </div> <hr class="booking-stage-2"> <div class="row booking-stage-2 mt-2"> <div class="col-6 form-group"> <div class="h4 mt-1 mb-1">Total</div> </div> <div class="col-6 text-right"> <span id="booking_total" class="price-display-variable h4 mb-3"></span> </div> </div> <div id="booking_errors" class="d-none alert alert-danger text-center my-3"> It looks like some of the fields are invalid. Please check them and try again. </div> <button type="submit" title="Book Hire" class="btn btn-info py-3 btn-book"><i class="fa fa-lg fa-calendar"></i>&nbsp; Book Hire</button> </div> </div> </form> <div id="overlay-bookingBox"></div> <script type="text/javascript"> (function () { //# sourceURL=bookingForm.js // This section should be constants, but for backwards compatibility we have to use var var IS_EMBEDDED = true; var $MODAL = IS_EMBEDDED ? $('#booking_modal') : $('#bookingBox').parent(); var VALID_START_DATES = ["2025-12-18","2025-12-19","2025-12-20","2025-12-22","2025-12-23","2025-12-24","2025-12-27","2025-12-29","2025-12-30","2025-12-31","2026-01-02","2026-01-03","2026-01-05","2026-01-06","2026-01-07","2026-01-08","2026-01-09","2026-01-10","2026-01-12","2026-01-13","2026-01-14","2026-01-15","2026-01-16","2026-01-17","2026-01-19","2026-01-20","2026-01-21","2026-01-22","2026-01-23","2026-01-24","2026-01-26","2026-01-27","2026-01-28","2026-01-29","2026-01-30","2026-01-31","2026-02-02","2026-02-03","2026-02-04","2026-02-05","2026-02-06","2026-02-07","2026-02-09","2026-02-10","2026-02-11","2026-02-12","2026-02-13","2026-02-14","2026-02-16","2026-02-17","2026-02-18","2026-02-19","2026-02-20","2026-02-21","2026-02-23","2026-02-24","2026-02-25","2026-02-26","2026-02-27","2026-02-28","2026-03-02","2026-03-03","2026-03-04","2026-03-05","2026-03-06","2026-03-07","2026-03-09","2026-03-10","2026-03-11","2026-03-12","2026-03-13","2026-03-14","2026-03-16","2026-03-17","2026-03-18","2026-03-19","2026-03-20","2026-03-21","2026-03-23","2026-03-24","2026-03-25","2026-03-27","2026-03-28","2026-03-30","2026-03-31","2026-04-01","2026-04-02","2026-04-03","2026-04-04","2026-04-06","2026-04-07","2026-04-08","2026-04-09","2026-04-10","2026-04-11","2026-04-13","2026-04-14","2026-04-15","2026-04-16","2026-04-17","2026-04-18","2026-04-20","2026-04-21","2026-04-22","2026-04-23","2026-04-24","2026-04-25","2026-04-27","2026-04-28","2026-04-29","2026-04-30","2026-05-01","2026-05-02","2026-05-04","2026-05-05","2026-05-06","2026-05-07","2026-05-08","2026-05-09","2026-05-11","2026-05-12","2026-05-13","2026-05-14","2026-05-15","2026-05-16","2026-05-18","2026-05-19","2026-05-20","2026-05-21","2026-05-22","2026-05-23","2026-05-25","2026-05-26","2026-05-27","2026-05-28","2026-05-29","2026-05-30","2026-06-01","2026-06-02","2026-06-03","2026-06-04","2026-06-05","2026-06-06","2026-06-08","2026-06-09","2026-06-10","2026-06-11","2026-06-12","2026-06-13","2026-06-15","2026-06-16","2026-06-17","2026-06-18","2026-06-19","2026-06-20","2026-06-22","2026-06-23","2026-06-24","2026-06-25","2026-06-26","2026-06-27","2026-06-29","2026-06-30","2026-07-01","2026-07-02","2026-07-03","2026-07-04","2026-07-06","2026-07-07","2026-07-08","2026-07-09","2026-07-10","2026-07-11","2026-07-13","2026-07-14","2026-07-15","2026-07-16","2026-07-17","2026-07-18","2026-07-20","2026-07-21","2026-07-22","2026-07-23","2026-07-24","2026-07-25","2026-07-27","2026-07-28","2026-07-29","2026-07-30","2026-07-31","2026-08-01","2026-08-03","2026-08-04","2026-08-05","2026-08-06","2026-08-07","2026-08-08","2026-08-10","2026-08-11","2026-08-12","2026-08-13","2026-08-14","2026-08-15","2026-08-17","2026-08-18","2026-08-19","2026-08-20","2026-08-21","2026-08-22","2026-08-24","2026-08-25","2026-08-26","2026-08-27","2026-08-28","2026-08-29","2026-08-31","2026-09-01","2026-09-02","2026-09-03","2026-09-04","2026-09-05","2026-09-07","2026-09-08","2026-09-09","2026-09-10","2026-09-11","2026-09-12","2026-09-14","2026-09-15","2026-09-16","2026-09-17","2026-09-18","2026-09-19","2026-09-21","2026-09-22","2026-09-23","2026-09-24","2026-09-25","2026-09-26","2026-09-28","2026-09-29","2026-09-30","2026-10-01","2026-10-02","2026-10-03","2026-10-05","2026-10-06","2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-02","2026-11-03","2026-11-04","2026-11-05","2026-11-06","2026-11-07","2026-11-09","2026-11-10","2026-11-11","2026-11-12","2026-11-13","2026-11-14","2026-11-16","2026-11-17","2026-11-18","2026-11-19","2026-11-20","2026-11-21","2026-11-23","2026-11-24","2026-11-25","2026-11-26","2026-11-27","2026-11-28","2026-11-30","2026-12-01","2026-12-02","2026-12-03","2026-12-04","2026-12-05","2026-12-07","2026-12-08","2026-12-09","2026-12-10","2026-12-11","2026-12-12","2026-12-14","2026-12-15","2026-12-16","2026-12-17"]; var DATEPICKER_DEFAULTS = { dateFormat: 'dd-mm-yy', format: 'g:i A', minDate: '18-12-2025' || -0, firstDay: 1, }; var DELIVERY_CUTOFF = '11:00'; var CURRENCY = '£' || '£'; /* When we search for the minimum end date, it starts on the start date i.e same-day return If that isn't possible, we try the next day, then the next, and so on This is the maximum number of days we should look ahead by before showing an error If it's exceeded, it's probably because dateCosts isn't being populated so there aren't any valid booking dates */ var MAXIMUM_END_DATE_ADJUSTMENT = 14; var ROOT_URL = "https://booking.nationaltoolhireshops.co.uk"; var DEFAULT_ERROR_MSG = $('#booking_errors').text(); var dateCosts; var product = { 'name': "Fresno Broom", 'sku': "070400", 'prod_code': "4074" }; var $pickerStart = $('#datepicker_booking_start', $MODAL); var $pickerEnd = $('#datepicker_booking_end', $MODAL); var $bookingSummary = $('#booking_summary', $MODAL); var $bookingCost = $('#booking_summary .price-display-variable', $MODAL); var $numDays = $('#booking_num_days', $MODAL); var $qty = $('input[name="booking_quantity"], select[name="booking_quantity"]', $MODAL); var $bookingTotal = $('#booking_total.price-display-variable', $MODAL); var $priceSubTotals = $('.price-display-variable', $MODAL).not($bookingTotal); var $form = $('#bookingBox', $MODAL); var $overlay = $('#overlay-bookingBox', $MODAL); window.booking = { form: $form, product: product, redirectDelay: 250 } $MODAL.on('open.zf.reveal reveal:open', openBookingBox); $overlay.add('#booking_modal .closebtn').on('click', closeBookingBox); if((new URLSearchParams(window.location.search)).get('booking_modal_show') == 1) { $(document).ready(openBookingBox); } $pickerStart.datepicker($.extend({ beforeShowDay: isValidStartDate, numberOfMonths: [2,1], }, DATEPICKER_DEFAULTS)) .on('change', function () { updateDateCosts(function () { $('.booking-tabs button[data-tab-id="datepicker_booking_end"]').removeAttr('disabled') .addClass('active').siblings().removeClass('active'); $('#booking_end', $MODAL).removeClass('disabled'); $pickerEnd.datepicker('setDate', null).datepicker('show'); $pickerEnd.find('.ui-datepicker-days-cell-over').trigger('mouseenter') let validDates = Object.keys(dateCosts); if(validDates.length === 1) { let dateObj = $.datepicker.parseDate('yy-mm-dd', validDates[0]); $pickerEnd.datepicker('setDate', dateObj).trigger('change'); updateBookingOverview(); } }); }); $pickerEnd.datepicker($.extend({ beforeShowDay: isValidEndDate, numberOfMonths: [2,1] }, DATEPICKER_DEFAULTS)) .on('change', function () { validateBookingDates(); $('#bookingBox').addClass('show-booking-container'); if (window.matchMedia("(max-width: 767px)").matches) { $('#bookingBox').animate({ scrollTop: $('#booking_summary').offset().top }, 'slow'); } }); $('.ui-datepicker-div-in-menu').removeClass('ui-datepicker-div-in-menu'); $('#ui-datepicker-div').on('mouseenter', 'td', highlightBookingDates); $('.booking-tabs button[ data-tab-id="datepicker_booking_start"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerStart.datepicker('show'); }); $('.booking-tabs button[ data-tab-id="datepicker_booking_end"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerEnd.datepicker('show'); }); $('.form-quantity').each(function() { let $spinner = $(this); let $input = $spinner.find('input[type="number"]'); let $btnPlus = $spinner.find('.quantity-plus'); let $btnMinus = $spinner.find('.quantity-minus'); let min = +($input.attr('min') || 0); let max = +($input.attr('max') || 999); $spinner.on('click', '.quantity-plus, .quantity-minus', function(e) { let val = parseFloat($input.val()); if(e.currentTarget.classList.contains('quantity-plus')) { val++; } else { val--; } val = Math.min(Math.max(val, min), max); val === min ? $btnMinus.addClass('disabled') : $btnMinus.removeClass('disabled'); val === max ? $btnPlus.addClass('disabled') : $btnPlus.removeClass('disabled'); $input.val(val); updateDateCosts(); }); }); $qty.on('input', updateBookingOverview); $('input[type="number"][data-cost]', $MODAL).on('input', function() { updateExtrasCosts(); updateBookingOverview(); }); $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $this.addClass('ajax-form-loading'); var url = new URL(ROOT_URL); url.pathname = '/booking'; url.searchParams.append('edit_item_url', window.location.href.split('?')[0]); var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { url.searchParams.append('edit_item_id', editItemId); } url.searchParams.append('prod_code', product.prod_code); url.searchParams.append('sku', product.sku); $.ajax({ type: $this.attr('method'), url: url, method: 'POST', data: $this.serialize(), xhrFields: { withCredentials: true }, success: function(response) { $this.removeClass('ajax-form-loading'); var $errorDisplay = $('#booking_errors'); $errorDisplay.addClass('d-none'); if(response.success) { $form.trigger('booking:basket-add', [getSelectedItems()]); } if(!response.success) { $errorDisplay.removeClass('d-none'); let error = response.errors ? response.errors.join('<br>') : DEFAULT_ERROR_MSG; $errorDisplay.text(error); } if(response.redirect) { setTimeout(function() { window.location.href = ROOT_URL + response.redirect; }, booking.redirectDelay) } } }); }); function getSelectedItems() { let items = [{ 'item_id': product.sku, 'item_name': product.name, 'price': product.bookedCost, 'quantity': +$qty.val() }] $('input[name^="extras"]').each(function(i, elem) { let qty = elem.type === 'checkbox' ? 1 : +elem.value; if(qty <= 0 || isNaN(qty)) return; let price = +elem.getAttribute('data-cost') * qty; if(elem.getAttribute('data-is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } items.push({ 'item_id': '', 'item_name': elem.getAttribute('data-name'), 'price': price, 'quantity': qty }); }); return items; } function openBookingBox() { $('#bookingBox').addClass('show'); $overlay.show(); // Only initialise the datepicker once if(!$('.ui-datepicker-div-in-menu').length) { $('#bookingBox .booking-calendar').append($('#ui-datepicker-div').addClass('ui-datepicker-div-in-menu')); $pickerStart.datepicker('show'); } } function closeBookingBox() { $overlay.hide(); $('#bookingBox').removeClass('show'); $('html, body').removeClass('is-reveal-open'); } function validateBookingDates() { if($pickerStart.attr('disabled') || $pickerEnd.attr('disabled')) { return false; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var minimumEndDate = startDate; var daysAdjusted = 0; while(!isValidEndDate(minimumEndDate)[0] && daysAdjusted <= MAXIMUM_END_DATE_ADJUSTMENT) { minimumEndDate = new Date(minimumEndDate.getTime() + (24 * 60 * 60 * 1000)); daysAdjusted++; } if(startDate === null) { return; } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); if(endDate === null) { return; } if(!isValidEndDate(endDate)[0] || !isValidEndDate(minimumEndDate)[0]) { // Validation has pushed the end date out of scope, reset it so the user can pick again $pickerEnd.datepicker('setDate', null); } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); updateBookingOverview(); } /** * Per jQuery datepicker documentation: * A function that takes a date as a parameter and must return an array with: * [0]: true/false indicating whether or not this date is selectable * [1]: a CSS class name to add to the date's cell or "" for the default presentation * [2]: an optional popup tooltip for this date * The function is called for each day in the datepicker before it is displayed. */ function isValidEndDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); var selectable = !!(dateCosts[dateString] && dateCosts[dateString]['cost']); var classes = ''; var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(date.toString() === startDate.toString()) { classes += ' datepicker-start-date'; } else if(date > startDate && date < endDate) { classes += ' datepicker-date-range'; } return [ selectable, classes, null ]; } /** * Validator for jQuery datepicker * @param date The date to be tested * @returns array [ * boolean , * string, * null * ] * */ function isValidStartDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); // IE doesn't support array.includes() var selectable = VALID_START_DATES.indexOf(dateString) !== -1; return [ selectable, "", null ]; } function updateDateCosts(cb) { var data = { 'start_date': $.datepicker.formatDate(DATEPICKER_DEFAULTS.dateFormat, $pickerStart.datepicker('getDate')), 'booking_quantity': $qty.val(), 'json': true }; var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { data['edit_item_id'] = editItemId } else { data['prod_code'] = product.prod_code; data['sku'] = product.sku } $.ajax({ url: ROOT_URL + '/booking/', datatype: 'jsonp', data: data, xhrFields: { withCredentials: true }, success: function(data) { if(typeof data === 'string') { data = JSON.parse(data); } if(data.success === true && data.costs) { for(var date in data.costs) { if(data.costs[date].cost > 0) { dateCosts = data.costs } } } if(!dateCosts) { showBookingError(); $pickerStart.attr('disabled', true); $pickerEnd.attr('disabled', true); } validateBookingDates(); if(cb && typeof cb === 'function') { cb(); } } }); } function showBookingError(text) { text = text || "Sorry, an unknown problem has been encountered. Please refresh the page and try again. If the problem persists, please contact us."; $('#booking_errors').text(text).removeClass('d-none'); } function getBookingDaysLength() { var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(!startDate || !endDate) { return null; } return Math.round((+endDate - +startDate) / 86400000); } function updateExtrasCosts() { $('input[data-cost]').each(function(i, elem) { var $elem = $(elem); var $priceDisplay = $('.price-display-variable[data-for="'+$elem.attr('name')+'"]'); var price = $elem.data('cost')*$elem.val(); if($elem.data('is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } $priceDisplay.text(CURRENCY + price.toFixed(2)); }); } function updateBookingOverview() { const $extendedSamedayAlert = $('#extended_sameday_alert'); const now = new Date(); var $saturdayAlert = $('#saturday_sameday_alert'); $extendedSamedayAlert.addClass('d-none'); $saturdayAlert.addClass('d-none'); updateExtrasCosts(); var days = getBookingDaysLength(); if(days === null) { $bookingSummary.addClass('d-none'); $bookingCost.text(CURRENCY + '0.00'); $numDays.text(''); return; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var endDateString = $.datepicker.formatDate('yy-mm-dd', endDate); var cost = dateCosts[endDateString].cost*$qty.val(); const isSameDay = $.datepicker.formatDate('y-m-d', now) === $.datepicker.formatDate('y-m-d', startDate); product.bookedCost = +cost.toFixed(2); $bookingCost.text(CURRENCY + cost.toFixed(2)); // Just for display purposes days++; if(isSameDay && now.toLocaleTimeString('en-GB') >= DELIVERY_CUTOFF) { $extendedSamedayAlert.removeClass('d-none'); } if(days === 0) { days = '< 1 day'; if(startDate.getDay() === 6) { $saturdayAlert.removeClass('d-none'); } } else if(days === 1) { days += ' day'; } else { days += ' days'; } $numDays.html($qty.val() + 'x ' + product.name); $bookingTotal.text(CURRENCY + getTotalCost().toFixed(2)); $('.booking-stage-2', $MODAL).removeClass('d-none'); } function getTotalCost() { var cost = 0; for(var i=0; i<$priceSubTotals.length; i++) { var subTotal = +$($priceSubTotals[i]).text().replace(CURRENCY, ''); if(!isNaN(subTotal)) { cost += subTotal; } } $('input[type="checkbox"][data-cost]').each(function(i, elem) { let subtotal = +elem.getAttribute('data-cost'); if(elem.getAttribute('data-is-hired')) { subtotal *= Math.ceil(getBookingDaysLength()/7); } cost += subtotal; }); return cost; } function highlightBookingDates() { var $td = $(this); var $wrapper = $td.parents('#ui-datepicker-div'); var highlightClass = 'datepicker-date-range'; // Only highlight a trail of dates if this is the picker for booking_end_date and there isn't a date already selected if($('.booking-tabs button.active').attr('data-tab-id') !== $pickerEnd.attr('id') || $pickerEnd.datepicker('getDate')) { return; } $wrapper.find('.'+highlightClass).removeClass(highlightClass); $td.parent().prevAll().find('td:not(.ui-datepicker-current-day)').addClass(highlightClass); $td.prevAll().filter('td:not(.ui-datepicker-current-day)').addClass(highlightClass); let $start = $wrapper.find('.datepicker-start-date'); $start.prevAll().removeClass(highlightClass); $start.parent().prevAll().find('td').removeClass(highlightClass); } $('.extras-tooltip').on('click', function() { $(this).tooltip({ items: ".extras-tooltip", content: function () { return $(this).prop('title'); } }); $(this).tooltip("open"); }); $('.extras-tooltip').on('mouseout', function() { $(this).tooltip("destroy"); }); })(); </script> </div> <style> .reveal-modal #postcode_lookup_form { border: none; padding: 0; } .reveal-modal #postcode_lookup_form .form-group { padding: 1em 0; } </style> <div class="reveal-modal" id="postcode_modal" data-reveal> <div class="row"> <div class="twelve columns" style="padding:2em";> <style> #postcode_lookup_form { padding: 20px; border: 1px solid lightgray; max-width: 600px; margin-top: 5px; text-align: center; } #postcode_lookup_form #depot_address { width: 100%; position: relative; } #postcode_lookup_form table { position: relative; } #depot_address.admin-view::before { content: 'Admin view'; position: absolute; left: 0; top: -15px; font-size: 11px; background: #dadada; padding: 2px; } </style> <form id="postcode_lookup_form" action="/include_postcode_lookup/" method="get" class="container"> <div class="form-group"> <label>Postcode:</label> <input type="hidden" name="sku" value="070400"> <input class="input-sm" type="text" name="postcode" placeholder="Enter your postcode" required> <button type="submit">Find nearby stores</button> </div> <div class="form-group hide"> <table class="twelve"> <tbody id="depot_address" class=""></tbody> </table> </div> </form> <script> (function() { var $form = $('#postcode_lookup_form'); var $addresses = $('#depot_address'); var readOnly = !!"1"; var adminView = !!""; $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $.ajax({ type: $this.attr('method') || 'post', url: $this.attr('action') || '', data: $this.serialize(), complete: handleFormSubmit }); }); function handleFormSubmit(response) { var depots = JSON.parse(response.responseText); if(!depots) { return; } if(readOnly) { $addresses.find('tr').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<tr><td class="text-center">'; if(adminView) { html += depots[i].supplierName + ', ' + depots[i].address } else { html += depots[i].name + ', ' + depots[i].postcode.split(' ')[0]; } if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</td></tr>'; $addresses.append(html); } } else { $addresses.find(':not([value=""])').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<option value="' + depots[i].id + '">' + depots[i].name + ', ' + depots[i].postcode; if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</option>'; $addresses.append(html); $addresses.trigger('change'); } } } })(); </script> </div> </div> </div> </section> <div id="write-review" class="c-review-form reveal-modal" style="display: none"> <h3 class="t2">Write a review for "Fresno Broom"</h3> <form enctype="multipart/form-data" class="custom" action="/product/fresno-broom-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk6943a799003ad5.38216216"/> <label for="rating">Rating</label> <select name="rating" id="rating" style="font-size: 1em; margin-bottom: 1em; height: 2em;"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <label for="review_author_name">Your name</label> <input id="review_author_name" name="review_author_name" type="text" /> <label for="review_author_email">Email</label> <input id="review_author_email" type="text" name="review_author_email" /> <label for="review_title">Title</label> <input id="review_title" name="review_title" type="text" /> <label for="review_text">Review</label> <textarea rows="5" id="review_text" name="review_text" /></textarea> <button type="submit" class="btn button" style="background-color: #00b67A;" onclick="return $(this).getForm().sendRequest('shop:on_addProductReview', { extraFields: { no_flash: true, }, onSuccess: function() { $('#write-review').trigger('reveal:close'); document.location.reload(true); } })">Submit review</button> </form> <a class="close-reveal-modal">&#215;</a> </div> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "Fresno Broom", "image": "https://www.nationaltoolhireshops.co.uk/uploaded/thumbnails/Fresno_Float_Hire_5069_400x400.jpg", "description": "Fresno brooms are designed for applying an even, textured, anti-slip finish to a wet concrete slab.", "mpn": "070400", "model": "070400", "sku": "070400", "manufacturer": "National Tool Hire", "brand": { "@type": "Brand", "name": "National Tool Hire" }, "offers": { "@type": "Offer", "itemCondition": "http://schema.org/NewCondition", "availability": "http://schema.org/InStock", "price": "33.11", "priceCurrency": "GBP", "priceValidUntil": "2025-12-25", "url": "https://www.nationaltoolhireshops.co.uk/product/fresno-broom-hire/", "shippingDetails": { "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "GB" }, "shippingRate": { "@type": "MonetaryAmount", "value": 0.00, "currency": "GBP" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "businessDays": { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday", "https://schema.org/Saturday" ] }, "cutoffTime": "11:30:00Z", "handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" } } }, "seller": { "@type": "Organization", "name": "National Tool Hire" }, "hasMerchantReturnPolicy": { "@type": "MerchantReturnPolicy", "applicableCountry": "GB", "returnPolicyCategory": "https://schema.org/MerchantReturnUnlimitedWindow", "merchantReturnDays": 365, "returnMethod": "ReturnByMail", "returnFees": "FreeReturn" } } } </script> ', 86400) /modules/core/classes/core_cachebase.php 262
14 Core_CacheBase->set('nthsv3-partial_shop-product5_2021_60bc4deeba55afcaaea9902e20c475959256aab7', ' <!-- view=shop:product5_2021 --> <section class="product-fresno-broom-hire"> <div class="row"> <div class="three mobile-four columns prod-img" style="text-align: center;"> <div class="product-images"> <div class="main"> <img src="/uploaded/thumbnails/Fresno_Float_Hire_5069_400x400.jpg" title="Fresno Broom Hire" alt="Fresno Broom Hire" width="400px" height="400px" /> </div> </div> </div> <div class="four mobile-four columns middle"> <div class="meta"> <h1 style="font-weight: 900"><em>Fresno Broom Hire</em></h1> <div class="bullets"> <ul> <li>Improves Finish of Concrete</li> <li>Swivel Head</li> <li>Textured Finish: Better Grip for Walking</li> <li>Prevents Slips &amp; Falls&nbsp;</li> </ul> <ul> <li><span style="font-weight: 700; color: #b40026;">Save 22&#37;</span> on Average UK Price </li> <li>Hire for <span style="font-weight: 700; color: #002B41;">DIY</span> or <span style="font-weight: 700; color: #002B41;">Trade</span></li> </ul> </div> <hr> <p style="font-size: 1.2em;"> <i class='fas fa-map-marker-alt fa-fw' style='padding-right: 1em'></i>&nbsp; <a href='#' title='Check Availability' data-reveal-id='postcode_modal' data-closeonbackgroundclick='false' style='color:#404040;'>Click & Collect: <span style='font-weight: 700;'>400</span> Locations</a> </p> <p style='font-size: 1.2em;'><i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide</p> <p style="font-size: 1.2em;"> <i class='fas fa-chart-line fa-fw' style='padding-right: 1em'></i>&nbsp; 5 hired in the last 24 hours </p> <p style="font-size: 1.2em; cursor: pointer" aria-label="Open pop-up: Why hire from National Tool Hire?" class="jsOpenPopUp"> <i class='fa-solid fa-circle-question' style='padding-right: 7px'></i> <span data-gtm="I: Why Hire From NTH (P)" style="color: #000; border-bottom: 1px #000 dashed;">Why Hire from National Tool Hire?</span> </p> </div> </div> <div class="five mobile-four columns"> <div class="product-description"> <form enctype="multipart/form-data" class="custom" action="/product/fresno-broom-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk6943a798db8d61.74029211"/> <!--<div class="twelve columns call-free-cta"><a href="tel:08008089600">Need Help? <span>Call 0800 808 9600</span></a></div>--> <div class="meta"> <div class="row"> <div class="twelve mobile-four columns hide-for-medium-up" style="margin: 1em 0"> <a href="https://www.nationaltoolhireshops.co.uk/payment-and-delivery/" data-gtm="B: Free Delivery (P)" target="_blank" title="Free Delivery: fresno-broom-hire"><img src="/themes/nthsv3/resources/images/NTH-banner-delivery-small_2.jpg" alt="Free Delivery & Collection" width="100%" height="100%" title="Free Delivery: Fresno Broom" /></a> </div> </div> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire-extended"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src="/img/NTH-sameday-click-collect.webp" alt="Same Day Hire click and collect" title="Same Day Hire click and collect" loading='eager' width="439" height="56" /> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown"></span></p> </div> <div style="border: 1px solid #404040; display: none; background: #b0e3f4;" id="same-day-hire"> <a href='/same-day-tool-hire/' data-gtm="B: Same-Day Hire (P)" class='same-day-loading'> <img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'> </a> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <span id="same-day-countdown-hire"></span> </p> </div> <script> function showSameDayBanner() { const date = new Date(); let bookingDelay = 0; //let bookingDelay = 0; if (bookingDelay <= 0) { let sameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),11,00); let extendedSameDayCutoff = new Date(date.getFullYear(),date.getMonth(),date.getDate(),14,00); if(date >= sameDayCutoff && date < extendedSameDayCutoff) { console.log('same-day-hire-extended'); document.getElementById('same-day-hire-extended').style.display = 'block'; let span = document.getElementById('same-day-countdown'); let seconds = (extendedSameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } else if (date < sameDayCutoff) { console.log('same-day-hire'); document.getElementById('same-day-hire').style.display = 'block'; let span = document.getElementById('same-day-countdown-hire'); let seconds = (sameDayCutoff - date) / 1000; console.log(seconds); span.textContent = sameDayCountDownTime(seconds); setInterval(() => { seconds--; span.textContent = sameDayCountDownTime(seconds); }, 1000) } } } function sameDayCountDownTime(t) { let hours = Math.floor(t/3600); let minutes = Math.floor((t % 3600)/60); let seconds = Math.floor(t % 60); let h = hours ? (hours === 1 ? '1hr' : hours + 'hrs') : ''; let m = minutes ? (minutes === 1 ? '1min' : minutes + 'mins') : ''; let s = seconds ? (seconds === 1 ? '1sec' : seconds + 'secs') : '' return [h, m, s].filter(e => e).join(' ') } showSameDayBanner(); </script> <div class="addtocart" style="background-color: #E6E6E6; margin-top: 20px;"> <!-- view:price_calculator6 --> <div class="twelve mobile-four columns pricetable" style="background-color: #fff;"> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">24 HOURS</span><br/><span class="prodpricecalc-sale">£57.75</span><br/> <span class="productpricecalc">£45.28</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">48 HOURS</span><br/><span class="prodpricecalc-sale">£60.00</span><br/> <span class="productpricecalc">£47.04</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">FRI - MON</span><br/><span class="prodpricecalc-sale">£66.00</span><br/> <span class="productpricecalc">£51.74</span> </div> <div class="three mobile-two columns pricecol"> <span class="prodhireperiodheader">WEEKLY</span><br/><span class="prodpricecalc-sale">£75.00</span><br/> <span class="productpricecalc">£58.80</span> </div> </div> <div class="twelve mobile-four columns extrainfobox2" style="margin-bottom: 0;"> <a href="#" title="Book &amp; Pay Online" data-reveal-id="booking_modal" data-closeOnBackgroundClick="false" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;" ><i class="fa fa-lg fa-calendar"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="row" style="margin: 2em 0; padding: 1em 0;"> <div class="one mobile-one hide-for-small columns"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/VISA.png" alt="Visa" title="Visa" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/MC.png" alt="Mastercard" title="Mastercard" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/Apple.png" alt="Apple Pay" title="Apple Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one columns"> <img src="/themes/nthsv3/resources/images/G-pay.png" alt="Google Pay" title="Google Pay" loading="lazy" width="100%" height="100%"> </div> <div class="two mobile-one hide-for-small columns"> <img src="/themes/nthsv3/resources/images/PP.png" alt="PayPal" title="PayPal" loading="lazy" width="100%" height="100%";> </div> <div class="one mobile-one hide-for-small columns"> </div> </div> </div> <div class="pay-in-3 twelve mobile-four columns" style="text-align: center;"> <p>Please note: All consumables are <b>non-refundable</b>. These are purchased items, not hired</p> <div class="paypal"><i class="fa-brands fa-paypal fa-bounce" style="color: #003087; padding-left: 0.5em; width: 1.5em; --fa-animation-iteration-count: 5;--fa-animation-timing: ease-in-out;"></i> <a title="PayPal Pay in 3 Available" href="#" data-reveal-id="paypal_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 solid;">PayPal 'Pay in 3' Available (0% interest)</a></div> </div> </div> </div> <div class="twelve mobile-four columns" style="margin-top: 2em;"> <div class="cd-tabs cd-tabs--vertical js-cd-tabs" style="width: 100%"> <nav class="cd-tabs__navigation"> <ul class="cd-tabs__list"> <li class="cd-tabs__list_li"> <a href="#tab-1" class="cd-tabs__item cd-tabs__item--selected" data-gtm="T: Description"> <span class="tab">Description</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-2" class="cd-tabs__item" data-gtm="T: Spec / Detail"> <span class="tab hide-for-small">Specification</span> <span class="tab show-for-small">Detail</span> </a> </li> <li class="cd-tabs__list_li"> <a href="#tab-3" class="cd-tabs__item" data-gtm="T: Related"> <span class="tab hide-for-small">Related Products</span> <span class="tab show-for-small">Related</span> </a> </li> </ul> </nav> <ul class="cd-tabs__panels"> <li id="tab-1" class="cd-tabs__panel cd-tabs__panel--selected text-component"> <h2>Fresno Broom Hire</h2> <h3>Concrete finishing broom with a texturising brush</h3> <p>Fresno brooms are designed for applying an even and textured finish to a concrete slab. This hand float is ideal for domestic, industrial and commercial applications when laying a fresh concrete slab. To use this manual concrete float, simply push or pull the float across wet concrete, for a smooth surface. Lower the brush and pull it along the surface for a textured finish. The zinc-plated steel blade is designed with curved edges to prevent it from digging into the concrete and causing lap marks.&nbsp;Using a concrete brush to leave a textured finish on a slab is ideal for use on driveways, walkways, staircases, patios, industrial floors and other areas with a lot of foot traffic. The rough texture of brushed concrete offers better traction for pedestrians to walk safely and reduces the risk of slips and falls when the floor is wet.</p> <div style="display: flex; flex-wrap: wrap"> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Safety-Footwear.webp" type="image/webp"> <img src="/img/product-icons/NTH-Safety-Footwear.png" loading="lazy" title="Boots" alt="Safety Footwear" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Gloves.webp" type="image/webp"> <img src="/img/product-icons/NTH-Gloves.png" loading="lazy" title="Gloves" alt="Gloves" width="60" height="60"> </picture> </div> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/NTH-Large-Van-or-Truck.webp" type="image/webp"> <img src="/img/product-icons/NTH-Large-Van-or-Truck.png" loading="lazy" title="Transport - Truck" alt="Large Van or Truck" width="60" height="60"> </picture> </div> </div> </li> <li id="tab-2" class="cd-tabs__panel text-component"> <div class="product-short-specs"> <div> <table border="1"> <tbody> <tr> <td>Width</td> <td>900 mm</td> </tr> <tr> <td>Length</td> <td>915 mm</td> </tr> <tr> <td>Thickness</td> <td>1.05 mm</td> </tr> <tr> <td>Head Weight c/w Swivel (no handles)</td> <td>4.8 kg</td> </tr> <tr> <td>Head Weight c/w Swivel (with handles)</td> <td>8.4 kg</td> </tr> <tr> <td>Total Handle Length</td> <td>5.4 m</td> </tr> </tbody> </table> </div> </div> <p><strong>Please note:</strong> This product description and specification is based on the model most widely stocked across our network of partner stores. Alternative brands of equivalent specification may be supplied based on location and availability.</p> <div class="write-review"> <a href="#" data-reveal-id="write-review" data-closeOnBackgroundClick="false">Write Review</a> </div> </li> <li id="tab-3" class="cd-tabs__panel text-component"> <p> <!--<section class="related-products bottom block"> <div class="row">--> <!-- view:shop:product_list_diy_trade_21_2_row --> <!-- --> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="" style="display: inline-block; border: 1px solid #002B41; background: #002B41; color: #fff; padding: 0.5em 0.5em 0.2em 0.5em; font-size: 1.6em; text-transform: uppercase; font-weight: bold">Most Popular</div> <div class="twelve columns" style="border: 0.4em solid #002B41 !important; height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/easy-float-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Easy_Float_Hire_5068_400x400.jpg" title="Easy Float Hire " alt="Easy Float Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/easy-float-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Easy Float</a> </h2> <p class="context">A Manual Concrete Float</p> <!-- --> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £36.84 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 34&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/easy-float-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide <br/><i class='fas fa-map-marker-alt'></i>&nbsp;&nbsp;Click & Collect: <span style='font-weight: 700;'>792</span> Locations </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/Big_Blue_Glider_Hire_5067_400x400.jpg" title="Big Blue Glider Concrete Trowel Hire " alt="Big Blue Glider Concrete Trowel Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Product Name (C)" style="color: #404040; ">Big Blue Glider Concrete Trowel</a> </h2> <p class="context">A Manual Concrete Trowel</p> <!-- --> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>Smooth, Durable Finish</li> <li>Curved Blade</li> <li>Swivel Head</li> <li>Extendable Handle</li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £38.48 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 38&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/big-blue-glider-concrete-trowel-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide <br/><i class='fas fa-map-marker-alt'></i>&nbsp;&nbsp;Click & Collect: <span style='font-weight: 700;'>797</span> Locations </p> </div> </div> </div> </div> </div> <div style="margin-bottom: 2em;" class="product-list-item"> <div class="twelve columns" style=" height: 100%; margin-bottom: 2em; padding:1.5em 1.5em 0; min-height: 280px;"> <div class="three mobile-four columns"> <div class="images"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Product Image (C)"> <img class="primary" loading="eager" style="display: block; margin-left: auto; margin-right: auto;" src="/uploaded/thumbnails/900mm_Power_Float_Hire_5066_400x400.jpg" title="900mm Petrol Power Float Hire " alt="900mm Petrol Power Float Hire " data-gtm="Product Image (C)" width="100%" height="100%" /> </a> </div> </div> <div class="five mobile-four columns"> <div class="desc"> <h2 style="font-size: 1.9em; margin-bottom: 1px; margin-top: 0;"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Product Name (C)" style="color: #404040; ">900mm Petrol Power Float</a> </h2> <p class="context">For Professional Concrete Finishing</p> <!-- --> <div class="catbul"><ul> <li>910mm Trowelling Diameter</li> <li>Quick Pitch Adjustment</li> <li>Adjustable Handlebar</li> <li>6x Faster</li> </ul></div> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> </div> </div> <div class="four mobile-four columns"> <div class="product-mobile"> <a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='11:00' data-cut-off-end='14:00'><img src='/img/NTH-sameday-click-collect.webp' alt='Same Day Hire click and collect' title='Same Day Hire click and collect' loading='eager' width='439' height='56'></a><a href='/same-day-tool-hire/' style='display:none;' class='same-day-loading' data-booking-delay='0' data-cut-off-start='00:00' data-cut-off-end='11:00'><img src='/themes/nthsv3/resources/images/d_headers/NTH-banners-sameday-strip.jpg' alt='Same-Day Tool Hire' title='Same-Day Tool Hire' loading='eager'></a> <div class="catbul"><ul> <li>910mm Trowelling Diameter</li> <li>Quick Pitch Adjustment</li> <li>Adjustable Handlebar</li> <li>6x Faster</li> </ul></div> </div> <div class="row desc"> <div class="twelve mobile-four columns product-price-wrap"> <span class="price">from </span><span class="price"> £76.20 </span> </div> </div> <div class="twelve mobile-four columns ticks"> <p style="font-size: 1.1em; margin: 1em 0;">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;DIY &amp; Trade<br class="hide-for-small"/> &nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;<span style="color: #c8102e">Save 48&#37;</span><br/> <span class="hide-for-small">&nbsp;<i class="fas fa-check" style="color: #00b67A;"></i>&nbsp;&nbsp;Best Availability</span> </p> </div> <div class="row"> <!--<div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/?booking_modal_show=1" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Button: Book & Pay Online (C)" title="Book &amp; Pay Online" class="button expand quotebutton"><i class="fas fa-calendar-alt"></i>&nbsp; Book &amp; Pay Online</a> </div> <div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Button: Product Detail (C)" title="More Information" class="button expand quotebutton-alt">Product Detail</a> </div>--> <div class="twelve mobile-four columns"> <a href="/product/900mm-petrol-power-float-hire/" data-gtm="Button: Details & Booking (C)" title="Details &amp; Booking" class="button expand quotebutton" style="background: #fcb713 !important; color: #000 !important;"><i class="fas fa-calendar-alt"></i>&nbsp;&nbsp; Details &nbsp;&amp;&nbsp; Booking</a> </div> </div> <div class="row"> <div class="twelve columns" style="text-align: center; padding-top: 1em; color: #808080;"> <p class='product-list-free-delivery'> <i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>FREE</span> Delivery: Nationwide <br/><i class='fas fa-map-marker-alt'></i>&nbsp;&nbsp;Click & Collect: <span style='font-weight: 700;'>574</span> Locations </p> </div> </div> </div> </div> </div> <script type='application/ld+json'>{"@context":"http://www.schema.org","name":"Products","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https://www.nationaltoolhireshops.co.uk/product/easy-float-hire/"},{"@type":"ListItem","position":2,"url":"https://www.nationaltoolhireshops.co.uk/product/big-blue-glider-concrete-trowel-hire/"},{"@type":"ListItem","position":3,"url":"https://www.nationaltoolhireshops.co.uk/product/900mm-petrol-power-float-hire/"}],"numberOfItems": "3"}</script> <!-- --> <!--</div> </section>--> </p> </li> </ul> </div> <script src="/themes/nthsv3/resources/javascripts/foundation/util.js"></script> <script src="/themes/nthsv3/resources/javascripts/foundation/main.js"></script> </div> </div> </div> </form> <div id="booking_modal" ajax-id="6943a798ebb07" data-reveal class="" data-overlay="false"> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bookingV2.css" /> <link rel="stylesheet" type="text/css" href="https://booking.nationaltoolhireshops.co.uk/themes/sites/nths/css/bookingV2.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://booking.nationaltoolhireshops.co.uk/themes/nationaltoolhire/uk/css/bootstrap-isolated-4-6-1.css"> <link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.min.js" integrity=sha384-tc3TMXCcTCib89yECEQXI4e6DhhlwNrqzYpvyeSqBD2vB/KugQH7o3p+/UtKuS5L crossorigin="anonymous"></script> <form id="bookingBox"> <div class="booking-close"><a href="javascript:void(0)" class="closebtn">&times;</a></div> <div class="booking-info"> <div class="booking-calendar-box"> <div class="booking-tabs"> <div class="booking-tabs-wrap"> <input type="hidden" id="datepicker_booking_start" name="start_date"> <input type="hidden" id="datepicker_booking_end" name="end_date"> <button type="button" data-tab-id="datepicker_booking_start" class="active"> Booking Start Date </button> <button type="button" disabled data-tab-id="datepicker_booking_end"> Booking End Date </button> </div> </div> <div class="booking-calendar"></div> </div> <div class="booking-container bootstrap-isolation-4-6-1"> <input type="hidden" name="edit_item_id" value=""> <div id="booking_summary" class="row booking-stage-2 flex-nowrap"> <div class="col-md-9 col-sm-9"> <span id="booking_num_days" class="h4"></span> </div> <div class="col-md-3 col-sm-3 text-right"> <span class="h4 price-display-variable "></span> </div> </div> <div class="row"> <div class="col-12"> <div id="saturday_sameday_alert" class="my-3 alert alert-success d-none">Saturday Same-Day Hire is only available as Click &amp; Collect. If you require delivery/collection by us, please select Friday as the start date and Saturday as the end date (for no extra cost).</div> <div id="extended_sameday_alert" class="my-3 alert alert-success d-none"> Same-Day Hire is only available as Click &amp; Collect today. If you require delivery/collection by us, please select a different start date. </div> <div class="row"> <div class="col-md-12 form-group py-1 mt-3"> <label for="booking_quantity">Quantity</label> <div class="form-quantity"> <input type="number" class="form-control" step="1" min="1" value="1" name="booking_quantity" id="booking_quantity"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> </div> </div> </div> </div> <hr> <div class="row booking-stage-2"> <div class="col-12"> <section class="extras-section"> <div class="h5 mt-2 mb-3">Extras</div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5600]" class="mb-2 d-md-none">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5600]" id="extras[5600]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5600]" class="pl-2 d-none d-md-block">Super Grip Gloves - Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5600]">£0.00</div> </div> </div> <div class="row mb-3"> <div class="col-sm-9 col-lg-9 col-md-8 extra-description"> <label for="extras[5601]" class="mb-2 d-md-none">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> <div class="form-quantity d-block"> <input type="number" class="form-control" min="0" step="1" value="0" name="extras[5601]" id="extras[5601]" data-cost="3.06" data-is-hired="" data-name="Super Grip Gloves - Extra Large"> <div class="form-quantity-nav"> <div class="form-quantity-btn quantity-minus disabled">-</div> <div class="form-quantity-btn quantity-plus">+</div> </div> </div> <label for="extras[5601]" class="pl-2 d-none d-md-block">Super Grip Gloves - Extra Large&nbsp; <b>(£3.06)</b> </label> </div> <div class="col-md-4 col-lg-3 col-sm-3"> <div class="price-display-variable text-right font-weight-bold" style="font-size: 1em;" data-for="extras[5601]">£0.00</div> </div> </div> </section> </div> </div> <hr class="booking-stage-2"> <div class="row booking-stage-2 mt-2"> <div class="col-6 form-group"> <div class="h4 mt-1 mb-1">Total</div> </div> <div class="col-6 text-right"> <span id="booking_total" class="price-display-variable h4 mb-3"></span> </div> </div> <div id="booking_errors" class="d-none alert alert-danger text-center my-3"> It looks like some of the fields are invalid. Please check them and try again. </div> <button type="submit" title="Book Hire" class="btn btn-info py-3 btn-book"><i class="fa fa-lg fa-calendar"></i>&nbsp; Book Hire</button> </div> </div> </form> <div id="overlay-bookingBox"></div> <script type="text/javascript"> (function () { //# sourceURL=bookingForm.js // This section should be constants, but for backwards compatibility we have to use var var IS_EMBEDDED = true; var $MODAL = IS_EMBEDDED ? $('#booking_modal') : $('#bookingBox').parent(); var VALID_START_DATES = ["2025-12-18","2025-12-19","2025-12-20","2025-12-22","2025-12-23","2025-12-24","2025-12-27","2025-12-29","2025-12-30","2025-12-31","2026-01-02","2026-01-03","2026-01-05","2026-01-06","2026-01-07","2026-01-08","2026-01-09","2026-01-10","2026-01-12","2026-01-13","2026-01-14","2026-01-15","2026-01-16","2026-01-17","2026-01-19","2026-01-20","2026-01-21","2026-01-22","2026-01-23","2026-01-24","2026-01-26","2026-01-27","2026-01-28","2026-01-29","2026-01-30","2026-01-31","2026-02-02","2026-02-03","2026-02-04","2026-02-05","2026-02-06","2026-02-07","2026-02-09","2026-02-10","2026-02-11","2026-02-12","2026-02-13","2026-02-14","2026-02-16","2026-02-17","2026-02-18","2026-02-19","2026-02-20","2026-02-21","2026-02-23","2026-02-24","2026-02-25","2026-02-26","2026-02-27","2026-02-28","2026-03-02","2026-03-03","2026-03-04","2026-03-05","2026-03-06","2026-03-07","2026-03-09","2026-03-10","2026-03-11","2026-03-12","2026-03-13","2026-03-14","2026-03-16","2026-03-17","2026-03-18","2026-03-19","2026-03-20","2026-03-21","2026-03-23","2026-03-24","2026-03-25","2026-03-27","2026-03-28","2026-03-30","2026-03-31","2026-04-01","2026-04-02","2026-04-03","2026-04-04","2026-04-06","2026-04-07","2026-04-08","2026-04-09","2026-04-10","2026-04-11","2026-04-13","2026-04-14","2026-04-15","2026-04-16","2026-04-17","2026-04-18","2026-04-20","2026-04-21","2026-04-22","2026-04-23","2026-04-24","2026-04-25","2026-04-27","2026-04-28","2026-04-29","2026-04-30","2026-05-01","2026-05-02","2026-05-04","2026-05-05","2026-05-06","2026-05-07","2026-05-08","2026-05-09","2026-05-11","2026-05-12","2026-05-13","2026-05-14","2026-05-15","2026-05-16","2026-05-18","2026-05-19","2026-05-20","2026-05-21","2026-05-22","2026-05-23","2026-05-25","2026-05-26","2026-05-27","2026-05-28","2026-05-29","2026-05-30","2026-06-01","2026-06-02","2026-06-03","2026-06-04","2026-06-05","2026-06-06","2026-06-08","2026-06-09","2026-06-10","2026-06-11","2026-06-12","2026-06-13","2026-06-15","2026-06-16","2026-06-17","2026-06-18","2026-06-19","2026-06-20","2026-06-22","2026-06-23","2026-06-24","2026-06-25","2026-06-26","2026-06-27","2026-06-29","2026-06-30","2026-07-01","2026-07-02","2026-07-03","2026-07-04","2026-07-06","2026-07-07","2026-07-08","2026-07-09","2026-07-10","2026-07-11","2026-07-13","2026-07-14","2026-07-15","2026-07-16","2026-07-17","2026-07-18","2026-07-20","2026-07-21","2026-07-22","2026-07-23","2026-07-24","2026-07-25","2026-07-27","2026-07-28","2026-07-29","2026-07-30","2026-07-31","2026-08-01","2026-08-03","2026-08-04","2026-08-05","2026-08-06","2026-08-07","2026-08-08","2026-08-10","2026-08-11","2026-08-12","2026-08-13","2026-08-14","2026-08-15","2026-08-17","2026-08-18","2026-08-19","2026-08-20","2026-08-21","2026-08-22","2026-08-24","2026-08-25","2026-08-26","2026-08-27","2026-08-28","2026-08-29","2026-08-31","2026-09-01","2026-09-02","2026-09-03","2026-09-04","2026-09-05","2026-09-07","2026-09-08","2026-09-09","2026-09-10","2026-09-11","2026-09-12","2026-09-14","2026-09-15","2026-09-16","2026-09-17","2026-09-18","2026-09-19","2026-09-21","2026-09-22","2026-09-23","2026-09-24","2026-09-25","2026-09-26","2026-09-28","2026-09-29","2026-09-30","2026-10-01","2026-10-02","2026-10-03","2026-10-05","2026-10-06","2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-02","2026-11-03","2026-11-04","2026-11-05","2026-11-06","2026-11-07","2026-11-09","2026-11-10","2026-11-11","2026-11-12","2026-11-13","2026-11-14","2026-11-16","2026-11-17","2026-11-18","2026-11-19","2026-11-20","2026-11-21","2026-11-23","2026-11-24","2026-11-25","2026-11-26","2026-11-27","2026-11-28","2026-11-30","2026-12-01","2026-12-02","2026-12-03","2026-12-04","2026-12-05","2026-12-07","2026-12-08","2026-12-09","2026-12-10","2026-12-11","2026-12-12","2026-12-14","2026-12-15","2026-12-16","2026-12-17"]; var DATEPICKER_DEFAULTS = { dateFormat: 'dd-mm-yy', format: 'g:i A', minDate: '18-12-2025' || -0, firstDay: 1, }; var DELIVERY_CUTOFF = '11:00'; var CURRENCY = '£' || '£'; /* When we search for the minimum end date, it starts on the start date i.e same-day return If that isn't possible, we try the next day, then the next, and so on This is the maximum number of days we should look ahead by before showing an error If it's exceeded, it's probably because dateCosts isn't being populated so there aren't any valid booking dates */ var MAXIMUM_END_DATE_ADJUSTMENT = 14; var ROOT_URL = "https://booking.nationaltoolhireshops.co.uk"; var DEFAULT_ERROR_MSG = $('#booking_errors').text(); var dateCosts; var product = { 'name': "Fresno Broom", 'sku': "070400", 'prod_code': "4074" }; var $pickerStart = $('#datepicker_booking_start', $MODAL); var $pickerEnd = $('#datepicker_booking_end', $MODAL); var $bookingSummary = $('#booking_summary', $MODAL); var $bookingCost = $('#booking_summary .price-display-variable', $MODAL); var $numDays = $('#booking_num_days', $MODAL); var $qty = $('input[name="booking_quantity"], select[name="booking_quantity"]', $MODAL); var $bookingTotal = $('#booking_total.price-display-variable', $MODAL); var $priceSubTotals = $('.price-display-variable', $MODAL).not($bookingTotal); var $form = $('#bookingBox', $MODAL); var $overlay = $('#overlay-bookingBox', $MODAL); window.booking = { form: $form, product: product, redirectDelay: 250 } $MODAL.on('open.zf.reveal reveal:open', openBookingBox); $overlay.add('#booking_modal .closebtn').on('click', closeBookingBox); if((new URLSearchParams(window.location.search)).get('booking_modal_show') == 1) { $(document).ready(openBookingBox); } $pickerStart.datepicker($.extend({ beforeShowDay: isValidStartDate, numberOfMonths: [2,1], }, DATEPICKER_DEFAULTS)) .on('change', function () { updateDateCosts(function () { $('.booking-tabs button[data-tab-id="datepicker_booking_end"]').removeAttr('disabled') .addClass('active').siblings().removeClass('active'); $('#booking_end', $MODAL).removeClass('disabled'); $pickerEnd.datepicker('setDate', null).datepicker('show'); $pickerEnd.find('.ui-datepicker-days-cell-over').trigger('mouseenter') let validDates = Object.keys(dateCosts); if(validDates.length === 1) { let dateObj = $.datepicker.parseDate('yy-mm-dd', validDates[0]); $pickerEnd.datepicker('setDate', dateObj).trigger('change'); updateBookingOverview(); } }); }); $pickerEnd.datepicker($.extend({ beforeShowDay: isValidEndDate, numberOfMonths: [2,1] }, DATEPICKER_DEFAULTS)) .on('change', function () { validateBookingDates(); $('#bookingBox').addClass('show-booking-container'); if (window.matchMedia("(max-width: 767px)").matches) { $('#bookingBox').animate({ scrollTop: $('#booking_summary').offset().top }, 'slow'); } }); $('.ui-datepicker-div-in-menu').removeClass('ui-datepicker-div-in-menu'); $('#ui-datepicker-div').on('mouseenter', 'td', highlightBookingDates); $('.booking-tabs button[ data-tab-id="datepicker_booking_start"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerStart.datepicker('show'); }); $('.booking-tabs button[ data-tab-id="datepicker_booking_end"]').on('click', function() { $(this).siblings().removeClass( 'active' ); $(this).addClass( 'active' ); $pickerEnd.datepicker('show'); }); $('.form-quantity').each(function() { let $spinner = $(this); let $input = $spinner.find('input[type="number"]'); let $btnPlus = $spinner.find('.quantity-plus'); let $btnMinus = $spinner.find('.quantity-minus'); let min = +($input.attr('min') || 0); let max = +($input.attr('max') || 999); $spinner.on('click', '.quantity-plus, .quantity-minus', function(e) { let val = parseFloat($input.val()); if(e.currentTarget.classList.contains('quantity-plus')) { val++; } else { val--; } val = Math.min(Math.max(val, min), max); val === min ? $btnMinus.addClass('disabled') : $btnMinus.removeClass('disabled'); val === max ? $btnPlus.addClass('disabled') : $btnPlus.removeClass('disabled'); $input.val(val); updateDateCosts(); }); }); $qty.on('input', updateBookingOverview); $('input[type="number"][data-cost]', $MODAL).on('input', function() { updateExtrasCosts(); updateBookingOverview(); }); $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $this.addClass('ajax-form-loading'); var url = new URL(ROOT_URL); url.pathname = '/booking'; url.searchParams.append('edit_item_url', window.location.href.split('?')[0]); var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { url.searchParams.append('edit_item_id', editItemId); } url.searchParams.append('prod_code', product.prod_code); url.searchParams.append('sku', product.sku); $.ajax({ type: $this.attr('method'), url: url, method: 'POST', data: $this.serialize(), xhrFields: { withCredentials: true }, success: function(response) { $this.removeClass('ajax-form-loading'); var $errorDisplay = $('#booking_errors'); $errorDisplay.addClass('d-none'); if(response.success) { $form.trigger('booking:basket-add', [getSelectedItems()]); } if(!response.success) { $errorDisplay.removeClass('d-none'); let error = response.errors ? response.errors.join('<br>') : DEFAULT_ERROR_MSG; $errorDisplay.text(error); } if(response.redirect) { setTimeout(function() { window.location.href = ROOT_URL + response.redirect; }, booking.redirectDelay) } } }); }); function getSelectedItems() { let items = [{ 'item_id': product.sku, 'item_name': product.name, 'price': product.bookedCost, 'quantity': +$qty.val() }] $('input[name^="extras"]').each(function(i, elem) { let qty = elem.type === 'checkbox' ? 1 : +elem.value; if(qty <= 0 || isNaN(qty)) return; let price = +elem.getAttribute('data-cost') * qty; if(elem.getAttribute('data-is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } items.push({ 'item_id': '', 'item_name': elem.getAttribute('data-name'), 'price': price, 'quantity': qty }); }); return items; } function openBookingBox() { $('#bookingBox').addClass('show'); $overlay.show(); // Only initialise the datepicker once if(!$('.ui-datepicker-div-in-menu').length) { $('#bookingBox .booking-calendar').append($('#ui-datepicker-div').addClass('ui-datepicker-div-in-menu')); $pickerStart.datepicker('show'); } } function closeBookingBox() { $overlay.hide(); $('#bookingBox').removeClass('show'); $('html, body').removeClass('is-reveal-open'); } function validateBookingDates() { if($pickerStart.attr('disabled') || $pickerEnd.attr('disabled')) { return false; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var minimumEndDate = startDate; var daysAdjusted = 0; while(!isValidEndDate(minimumEndDate)[0] && daysAdjusted <= MAXIMUM_END_DATE_ADJUSTMENT) { minimumEndDate = new Date(minimumEndDate.getTime() + (24 * 60 * 60 * 1000)); daysAdjusted++; } if(startDate === null) { return; } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); if(endDate === null) { return; } if(!isValidEndDate(endDate)[0] || !isValidEndDate(minimumEndDate)[0]) { // Validation has pushed the end date out of scope, reset it so the user can pick again $pickerEnd.datepicker('setDate', null); } $pickerEnd.datepicker('option', 'minDate', minimumEndDate); updateBookingOverview(); } /** * Per jQuery datepicker documentation: * A function that takes a date as a parameter and must return an array with: * [0]: true/false indicating whether or not this date is selectable * [1]: a CSS class name to add to the date's cell or "" for the default presentation * [2]: an optional popup tooltip for this date * The function is called for each day in the datepicker before it is displayed. */ function isValidEndDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); var selectable = !!(dateCosts[dateString] && dateCosts[dateString]['cost']); var classes = ''; var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(date.toString() === startDate.toString()) { classes += ' datepicker-start-date'; } else if(date > startDate && date < endDate) { classes += ' datepicker-date-range'; } return [ selectable, classes, null ]; } /** * Validator for jQuery datepicker * @param date The date to be tested * @returns array [ * boolean , * string, * null * ] * */ function isValidStartDate(date) { var dateString = $.datepicker.formatDate('yy-mm-dd', date); // IE doesn't support array.includes() var selectable = VALID_START_DATES.indexOf(dateString) !== -1; return [ selectable, "", null ]; } function updateDateCosts(cb) { var data = { 'start_date': $.datepicker.formatDate(DATEPICKER_DEFAULTS.dateFormat, $pickerStart.datepicker('getDate')), 'booking_quantity': $qty.val(), 'json': true }; var editItemId = $('input[name="edit_item_id"]').val(); if(editItemId) { data['edit_item_id'] = editItemId } else { data['prod_code'] = product.prod_code; data['sku'] = product.sku } $.ajax({ url: ROOT_URL + '/booking/', datatype: 'jsonp', data: data, xhrFields: { withCredentials: true }, success: function(data) { if(typeof data === 'string') { data = JSON.parse(data); } if(data.success === true && data.costs) { for(var date in data.costs) { if(data.costs[date].cost > 0) { dateCosts = data.costs } } } if(!dateCosts) { showBookingError(); $pickerStart.attr('disabled', true); $pickerEnd.attr('disabled', true); } validateBookingDates(); if(cb && typeof cb === 'function') { cb(); } } }); } function showBookingError(text) { text = text || "Sorry, an unknown problem has been encountered. Please refresh the page and try again. If the problem persists, please contact us."; $('#booking_errors').text(text).removeClass('d-none'); } function getBookingDaysLength() { var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); if(!startDate || !endDate) { return null; } return Math.round((+endDate - +startDate) / 86400000); } function updateExtrasCosts() { $('input[data-cost]').each(function(i, elem) { var $elem = $(elem); var $priceDisplay = $('.price-display-variable[data-for="'+$elem.attr('name')+'"]'); var price = $elem.data('cost')*$elem.val(); if($elem.data('is-hired')) { price *= Math.ceil(getBookingDaysLength()/7); } $priceDisplay.text(CURRENCY + price.toFixed(2)); }); } function updateBookingOverview() { const $extendedSamedayAlert = $('#extended_sameday_alert'); const now = new Date(); var $saturdayAlert = $('#saturday_sameday_alert'); $extendedSamedayAlert.addClass('d-none'); $saturdayAlert.addClass('d-none'); updateExtrasCosts(); var days = getBookingDaysLength(); if(days === null) { $bookingSummary.addClass('d-none'); $bookingCost.text(CURRENCY + '0.00'); $numDays.text(''); return; } var startDate = $pickerStart.datepicker('getDate'); var endDate = $pickerEnd.datepicker('getDate'); var endDateString = $.datepicker.formatDate('yy-mm-dd', endDate); var cost = dateCosts[endDateString].cost*$qty.val(); const isSameDay = $.datepicker.formatDate('y-m-d', now) === $.datepicker.formatDate('y-m-d', startDate); product.bookedCost = +cost.toFixed(2); $bookingCost.text(CURRENCY + cost.toFixed(2)); // Just for display purposes days++; if(isSameDay && now.toLocaleTimeString('en-GB') >= DELIVERY_CUTOFF) { $extendedSamedayAlert.removeClass('d-none'); } if(days === 0) { days = '< 1 day'; if(startDate.getDay() === 6) { $saturdayAlert.removeClass('d-none'); } } else if(days === 1) { days += ' day'; } else { days += ' days'; } $numDays.html($qty.val() + 'x ' + product.name); $bookingTotal.text(CURRENCY + getTotalCost().toFixed(2)); $('.booking-stage-2', $MODAL).removeClass('d-none'); } function getTotalCost() { var cost = 0; for(var i=0; i<$priceSubTotals.length; i++) { var subTotal = +$($priceSubTotals[i]).text().replace(CURRENCY, ''); if(!isNaN(subTotal)) { cost += subTotal; } } $('input[type="checkbox"][data-cost]').each(function(i, elem) { let subtotal = +elem.getAttribute('data-cost'); if(elem.getAttribute('data-is-hired')) { subtotal *= Math.ceil(getBookingDaysLength()/7); } cost += subtotal; }); return cost; } function highlightBookingDates() { var $td = $(this); var $wrapper = $td.parents('#ui-datepicker-div'); var highlightClass = 'datepicker-date-range'; // Only highlight a trail of dates if this is the picker for booking_end_date and there isn't a date already selected if($('.booking-tabs button.active').attr('data-tab-id') !== $pickerEnd.attr('id') || $pickerEnd.datepicker('getDate')) { return; } $wrapper.find('.'+highlightClass).removeClass(highlightClass); $td.parent().prevAll().find('td:not(.ui-datepicker-current-day)').addClass(highlightClass); $td.prevAll().filter('td:not(.ui-datepicker-current-day)').addClass(highlightClass); let $start = $wrapper.find('.datepicker-start-date'); $start.prevAll().removeClass(highlightClass); $start.parent().prevAll().find('td').removeClass(highlightClass); } $('.extras-tooltip').on('click', function() { $(this).tooltip({ items: ".extras-tooltip", content: function () { return $(this).prop('title'); } }); $(this).tooltip("open"); }); $('.extras-tooltip').on('mouseout', function() { $(this).tooltip("destroy"); }); })(); </script> </div> <style> .reveal-modal #postcode_lookup_form { border: none; padding: 0; } .reveal-modal #postcode_lookup_form .form-group { padding: 1em 0; } </style> <div class="reveal-modal" id="postcode_modal" data-reveal> <div class="row"> <div class="twelve columns" style="padding:2em";> <style> #postcode_lookup_form { padding: 20px; border: 1px solid lightgray; max-width: 600px; margin-top: 5px; text-align: center; } #postcode_lookup_form #depot_address { width: 100%; position: relative; } #postcode_lookup_form table { position: relative; } #depot_address.admin-view::before { content: 'Admin view'; position: absolute; left: 0; top: -15px; font-size: 11px; background: #dadada; padding: 2px; } </style> <form id="postcode_lookup_form" action="/include_postcode_lookup/" method="get" class="container"> <div class="form-group"> <label>Postcode:</label> <input type="hidden" name="sku" value="070400"> <input class="input-sm" type="text" name="postcode" placeholder="Enter your postcode" required> <button type="submit">Find nearby stores</button> </div> <div class="form-group hide"> <table class="twelve"> <tbody id="depot_address" class=""></tbody> </table> </div> </form> <script> (function() { var $form = $('#postcode_lookup_form'); var $addresses = $('#depot_address'); var readOnly = !!"1"; var adminView = !!""; $form.on('submit', function(e) { e.preventDefault(); var $this = $(this); $.ajax({ type: $this.attr('method') || 'post', url: $this.attr('action') || '', data: $this.serialize(), complete: handleFormSubmit }); }); function handleFormSubmit(response) { var depots = JSON.parse(response.responseText); if(!depots) { return; } if(readOnly) { $addresses.find('tr').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<tr><td class="text-center">'; if(adminView) { html += depots[i].supplierName + ', ' + depots[i].address } else { html += depots[i].name + ', ' + depots[i].postcode.split(' ')[0]; } if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</td></tr>'; $addresses.append(html); } } else { $addresses.find(':not([value=""])').remove(); $addresses.parents('.hide').removeClass('hide'); for(var i=0; i<depots.length; i++) { var html = '<option value="' + depots[i].id + '">' + depots[i].name + ', ' + depots[i].postcode; if(depots[i].distance && depots[i].distanceUnits) { if(depots[i].distance > 1) { depots[i].distance = Math.round(depots[i].distance); } html += ' - (' + depots[i].distance + ' ' + depots[i].distanceUnits + ' away)' } html += '</option>'; $addresses.append(html); $addresses.trigger('change'); } } } })(); </script> </div> </div> </div> </section> <div id="write-review" class="c-review-form reveal-modal" style="display: none"> <h3 class="t2">Write a review for "Fresno Broom"</h3> <form enctype="multipart/form-data" class="custom" action="/product/fresno-broom-hire" method="post"> <input type="hidden" name="ls_session_key" value="lsk6943a799003ad5.38216216"/> <label for="rating">Rating</label> <select name="rating" id="rating" style="font-size: 1em; margin-bottom: 1em; height: 2em;"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <label for="review_author_name">Your name</label> <input id="review_author_name" name="review_author_name" type="text" /> <label for="review_author_email">Email</label> <input id="review_author_email" type="text" name="review_author_email" /> <label for="review_title">Title</label> <input id="review_title" name="review_title" type="text" /> <label for="review_text">Review</label> <textarea rows="5" id="review_text" name="review_text" /></textarea> <button type="submit" class="btn button" style="background-color: #00b67A;" onclick="return $(this).getForm().sendRequest('shop:on_addProductReview', { extraFields: { no_flash: true, }, onSuccess: function() { $('#write-review').trigger('reveal:close'); document.location.reload(true); } })">Submit review</button> </form> <a class="close-reveal-modal">&#215;</a> </div> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "Fresno Broom", "image": "https://www.nationaltoolhireshops.co.uk/uploaded/thumbnails/Fresno_Float_Hire_5069_400x400.jpg", "description": "Fresno brooms are designed for applying an even, textured, anti-slip finish to a wet concrete slab.", "mpn": "070400", "model": "070400", "sku": "070400", "manufacturer": "National Tool Hire", "brand": { "@type": "Brand", "name": "National Tool Hire" }, "offers": { "@type": "Offer", "itemCondition": "http://schema.org/NewCondition", "availability": "http://schema.org/InStock", "price": "33.11", "priceCurrency": "GBP", "priceValidUntil": "2025-12-25", "url": "https://www.nationaltoolhireshops.co.uk/product/fresno-broom-hire/", "shippingDetails": { "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "GB" }, "shippingRate": { "@type": "MonetaryAmount", "value": 0.00, "currency": "GBP" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "businessDays": { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "https://schema.org/Monday", "https://schema.org/Tuesday", "https://schema.org/Wednesday", "https://schema.org/Thursday", "https://schema.org/Friday", "https://schema.org/Saturday" ] }, "cutoffTime": "11:30:00Z", "handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" } } }, "seller": { "@type": "Organization", "name": "National Tool Hire" }, "hasMerchantReturnPolicy": { "@type": "MerchantReturnPolicy", "applicableCountry": "GB", "returnPolicyCategory": "https://schema.org/MerchantReturnUnlimitedWindow", "merchantReturnDays": 365, "returnMethod": "ReturnByMail", "returnFees": "FreeReturn" } } } </script> ', 86400) /modules/cms/classes/cms_controller.php 1031
13 Cms_Controller->render_partial('shop:product5_2021', array(1) [product => object(Shop_Product)], array(4) [cache => '1', cache_vary_by => array(1), cache_versions => array(1), cache_ttl => '86400']) /modules/cms/classes/cms_controller.php(383) : eval()'d code 95
12 eval(()) /modules/cms/classes/cms_controller.php 383
11 Cms_Controller->evalWithException('?><div class="row"> <div class="twelve columns"> <div class="cat-breadcrumbs pt4" itemscope itemtype="https://schema.org/BreadcrumbList"> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="/" itemprop="item"><span itemprop="name">Home</span></a><meta itemprop="position" content="1" /></span> <?php $pos = 2; if ($primaryBreadcrumbs = ShopPrimaryCategory::getPrimaryBreadcrumbs($product)) : ?> <? $i=1; foreach ($primaryBreadcrumbs as $breadcrumb): ?> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> &gt; <a href="<?= rtrim($breadcrumb->page_url('/category'), '/') ?>/" data-gtm="Breadcrumb (P)" itemprop="item"><span itemprop="name"><?= $breadcrumb->name ?></span></a><meta itemprop="position" content="<?php echo $pos; ?>" /> <?php if ($i < count($primaryBreadcrumbs)): ?> <span class="breadcrumb-hover"> <span> <?php if ($breadcrumb->list_children('front_end_sort_order')->count): ?> <div class="breadcrumb-category"> <?php foreach ($breadcrumb->list_children('front_end_sort_order') as $subcategory): ?> <? if(!empty($subcategory->x_catfalse)): ?> <a href="<?= $subcategory->x_catfalse ?>" title="<?= h($subcategory->name) ?>" data-gtm="Breadcrumb Pop (P)"><?= h($subcategory->name) ?></a> <? else: ?> <a href="<?= $subcategory->page_url('category') ?>/" title="<?= h($subcategory->name) ?>" data-gtm="Breadcrumb Pop (P)"><?= h($subcategory->name) ?></a> <? endif ?> <?php endforeach; ?> </div> <?php endif; ?> </span> </span> <?php else: ?> <?php if ($breadcrumb->eval_num_of_products()): ?> <span class="breadcrumb-hover"> <span> <div class="breadcrumb-category"> <p style="margin-bottom: 9px;"><strong>Top Products</strong></p> <?php $products = $breadcrumb->list_products(array('sorting'=>array('price desc')))->limit(3)->find_all(); ?> <?php foreach ($products as $breadcrumbProduct): ?> <a href="<?php echo $breadcrumbProduct->page_url('product'); ?>/" data-gtm="Breadcrumb Pop (P)"><?php echo $breadcrumbProduct->name; ?></a> <?php endforeach; ?> <a href="<?= $breadcrumb->page_url('category') ?>/">View All</a> </div> </span> </span> <?php endif; ?> <?php endif; ?> </span> <? $i++; $pos++; endforeach ?> <?php endif; ?> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">&nbsp;>&nbsp;<span itemprop="name"><?php echo $product->name; ?></span><meta itemprop="position" content="<?php echo $pos; ?>" /></span> </div> </div> </div> <section class="content"> <? if( $product->x_bookpay == 200): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product3', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? elseif( $product->x_bookpay == 201): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product4', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? elseif( $product->x_bookpay == 202): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product5_2021', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? elseif( $product->x_bookpay == 123): ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product_training', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <? else: ?> <section id="product" class="product top block" style="margin:15px;"> <?php $this->render_partial('shop:product2', array( 'product' => $product ), array( 'cache'=>true, 'cache_vary_by'=>array('url'), 'cache_versions'=>array('catalog'), 'cache_ttl'=>86400 )); ?> </section> <?php endif; ?> </section> </div> </section> <?= $this->render_partial('white_diesel_modal') ?> <?= $this->render_partial('insurance_modal') ?> <?= $this->render_partial('deposit_modal') ?> <?= $this->render_partial('id_modal') ?> <?= $this->render_partial('paypal_modal') ?> <script> window.booking.form.on('booking:basket-add', function(e, items) { dataLayer.push({ 'event' : 'add_to_cart', 'ecommerce' : { 'items': items } }); }); //dataLayer = []; dataLayer.push({ 'event' : 'view_item', 'ecommerce' : { 'items': [{ 'item_id': '<?php echo $product->sku; ?>', 'item_name': '<?php echo $product->name ?>', 'price': '<?php if($product->om('is_on_sale')): ?><?php echo $product->om('sale_price'); ?><?php else: ?><?php echo $product->om('price') ?><?php endif; ?>' }] } }); </script>', 'CMS page', 'Fresno Broom') /modules/cms/classes/cms_controller.php 608
10 Cms_Controller->eval_page_content(()) /modules/cms/classes/cms_controller.php 198
9 Cms_Controller->open(object(Cms_Page), array(1) [0 => 'fresno-broom-hire']) /controllers/application.php 72
8 Application->On404(())
7 call_user_func_array(array(2) [0 => object(Application), 1 => 'On404'], array(0)) /phproad/modules/phpr/classes/phpr_controller.php 170
6 Phpr_Controller->executeAction('On404', array(0)) /phproad/modules/phpr/classes/phpr_controller.php 84
5 Phpr_Controller->_run('On404', array(0)) /phproad/modules/phpr/classes/phpr_response.php 64
4 Phpr_Response->open404(()) /phproad/modules/phpr/classes/phpr_response.php 37
3 Phpr_Response->open('/product/fresno-broom-hire') /phproad/system/phproad.php 31
2 include('/var/www/vhosts/nationaltoolhireshops.co.uk/httpdocs/phproad/system/phproad.php') /boot.php 114
1 require_once('/var/www/vhosts/nationaltoolhireshops.co.uk/httpdocs/boot.php') /index.php 3