Unhandled Error!

Undefined index: HTTP_REFERER

Document /modules/shopproductbooking/controllers/booking.php
Document type PHP document
Line 163
Exception class Phpr_PhpException

Code Highlight

        $bookingDomain = Phpr::$config->get("BOOKING_FORM_DOMAIN",
            "booking." . str_replace("www.", "", $_SERVER['HTTP_HOST'])
        );
        if($dev = Phpr::$request->getField('dev_domain')) {
            $bookingDomain = str_replace("booking", "booking-$dev", $bookingDomain);
        }
        elseif(preg_match('/(?<=dev_domain=)[a-z]+/', $_SERVER['HTTP_REFERER'], $matches)) {
            $bookingDomain = str_replace("booking", "booking-{$matches[0]}", $bookingDomain);
        }
        return $bookingDomain;
    }
 
	public function getRemoteBookingForm() {
# Call Stack Code Document Line
21 ProductBookingController::getBookingDomain(()) /modules/shopproductbooking/controllers/booking.php 190
20 ProductBookingController->getRemoteBookingForm(()) /modules/shopproductbooking/classes/shopproductbooking_module.php 79
19 ShopProductBooking_Module::display_booking_form(array(1) [sku => '050055']) /modules/cms/classes/cms_controller.php(383) : eval()'d code 11
18 eval(()) /modules/cms/classes/cms_controller.php 383
17 Cms_Controller->evalWithException('?><?php $useBookingFormV2 = true; $disableBookingForm = in_array(@$_SERVER['REMOTE_ADDR'], array('213.146.153.224', '195.89.76.194', '95.138.200.194', '193.35.58.91', '193.35.58.92', '45.77.58.54', '78.141.203.254', '193.35.58.91', '18.212.108.50', '85.255.237.58', '89.197.189.25', '84.64.54.182', '85.255.234.159', '85.255.233.171', '34.233.119.208', '85.255.237.214', '185.69.144.7', '45.85.243.14', '185.164.121.107', '185.164.121.107', '195.210.110.42', '158.46.155.36', '5.252.163.128', '84.70.128.235')); $ajaxId = uniqid(); ?> <?php if($useBookingFormV2): ?> <div id="booking_modal" ajax-id="<?php echo $ajaxId ?>" data-reveal class="<?php if($disableBookingForm) echo 'reveal-modal'?>" data-overlay="<?php echo $disableBookingForm ? 'true' : 'false' ?>"> <?php if($disableBookingForm): ?> <p>Sorry! This item is not available to book online at the moment.</p> <?php else: ?> <?php ShopProductBooking_Module::display_booking_form(['sku' => $product->om('sku')]) ?> <?php endif ?> </div> <?php else: ?> <div class="reveal-modal" id="booking_modal" data-reveal> <div class="row"> <div class="twelve columns" style="padding:0em";> <!--<h4 class="revealtext">Book Online</h4>--> <?php if (in_array(@$_SERVER['REMOTE_ADDR'], array(''))): ?> <script> txt = "a"; while(1){ txt = txt += "a"; } </script> <?php elseif($disableBookingForm): ?> <p>Sorry! This item is not available to book online at the moment.</p> <?php else: ?> <?php ShopProductBooking_Module::display_booking_form(['sku' => $product->om('sku')]) ?> <?php endif ?> </div> </div> <!--<a class="close-reveal-modal">&#215;</a>--> </div> <?php endif ?>', 'CMS partial', 'modal_booking', array(0)) /modules/cms/classes/cms_controller.php 1020
16 Cms_Controller->render_partial('modal_booking') /modules/cms/classes/cms_controller.php(383) : eval()'d code 508
15 eval(()) /modules/cms/classes/cms_controller.php 383
14 Cms_Controller->evalWithException('?><?php $SUPPLIERS_RELEASED = true; $posted_options = Shop_ProductHelper::get_default_options($product); $regionalPricing = $product->om('x_enable_regional_pricing', $posted_options) && Phpr::$config->get('ENABLE_REGIONAL_PRICING', false); ?> <!-- view=shop:product5_2021 --> <section class="product-<?php echo $product->url_name; ?>"> <div class="row"> <div class="three mobile-four columns prod-img" style="text-align: center;"> <div class="product-images"> <?php $images = $product->om('images'); ?> <?php if($images->count >= 1): ?> <div class="main"> <img src="<?php echo $images[0]->getThumbnailPath(400, 400); ?>" title="<?php echo $product->title; ?> Hire" alt="<?php echo $images[0]->description; ?>" width="400px" height="400px" /> </div> <?php endif; ?> <?php if($images->count >= 2): ?> <div class="thumbs"> <ul> <?php foreach($images as $image): ?> <li> <a href="<?php echo $image->getThumbnailPath(400, 400); ?>" title="<?php echo $product->name; ?>" width="200px" height="200px" > <img src="<?php echo $image->getThumbnailPath(80, 80); ?>" title="<?php echo $product->name; ?>" alt="<?php echo $images[0]->description; ?>" width="80px" height="80px"> </a> </li> <?php endforeach; ?> </ul> </div> <?php endif; ?> </div> </div> <div class="four mobile-four columns middle"> <div class="meta"> <?php if($product->om('x_remote_prod_code', $posted_options) && in_array($_SERVER['REMOTE_ADDR'], Phpr::$config->get('ADMIN_IP_ADDRESSES', []))):?> <a class="button" href="https://<?= ProductBookingController::getBookingDomain() ?>/admin/products/edit?id=<?php echo $product->om('x_remote_prod_code', $posted_options);?>" target="__blank">Admin Page</a> <?php endif; ?> <h1 style="font-weight: 900"><em><?php echo $product->name; ?> Hire</em></h1> <?php if($product->list_reviews()->count > 20): ?> <div class="rating-<?php echo str_replace('.', '-', $product->rating_approved); ?>" style="margin-top: 1em;"> </div> <?php endif ?> <div class="bullets"> <?php echo $product->x_bullets; ?> <?php if($product->om('is_on_sale')): ?> <ul> <li><span style="font-weight: 700; color: #b40026;">Save <?php $sale_price_or_discount = $product->om('x_remote_discount') ?: $product->om('sale_price_or_discount'); if(strpos($sale_price_or_discount, '%')) { echo round($sale_price_or_discount); echo "&#37;"; } else { echo format_currency(ltrim($sale_price_or_discount, '-')); } ?></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> <?php endif; ?> </div> <hr> <p style="font-size: 1.2em;"> <?php $collectionSitesCount = $product->om('x_collection_available_from', $posted_options); if($collectionSitesCount > 0) { echo "<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;'>$collectionSitesCount</span> Locations</a>"; } ?> </p> <?php if($product->om('x_allow_delivery') > 0 && $product->om('x_min_delivery_charge') > 0) { echo "<p style='font-size: 1.2em;'><i class='fas fa-truck fa-fw' style='padding-right: 1em'></i>&nbsp; <span style='font-weight: 700;'>Low Cost</span> Delivery: Nationwide</p>"; } elseif ($product->om('x_allow_delivery') > 0 && $product->om('x_min_delivery_charge') < 1) { echo "<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;"> <?php $soldRecently = $product->om('x_remote_sold_recently', $posted_options); if($soldRecently > 0) { echo "<i class='fas fa-chart-line fa-fw' style='padding-right: 1em'></i>&nbsp; $soldRecently hired in the last 24 hours"; } ?> </p> <?php if($product->om('x_remote_booking_delay') >= 7): ?> <p style="font-size: 1.2em;"> <i class='fas fa-arrow-trend-down fa-fw' style='padding-right: 1em'></i>&nbsp; Low Availability </p> <?php endif ?> <?php if($product->om('x_has_insurance')): ?> <p style="font-size: 1.2em;"> <i class='fas fa-shield fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Insurance Available" href="#" data-gtm="I: Insurance Available (P)" data-reveal-id="insurance_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Insurance Available</a> </p> <?php endif ?> <?php if($product->om('x_deposit_amount')): ?> <p style="font-size: 1.2em;"> <i class='fas fa-money-bill-transfer fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Deposit Required" href="#" data-gtm="I: Deposit Required (P)" data-reveal-id="deposit_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Deposit Required</a> </p> <?php endif ?> <?php if($product->om('x_requires_id')): ?> <p style="font-size: 1.2em;"> <i class='fas fa-id-card fa-fw' style='padding-right: 1em'></i>&nbsp; <a title="Online ID Verification Required" href="#" data-gtm="I: Online ID Required (P)" data-reveal-id="id_modal" data-closeonbackgroundclick="false" style="color: #000; border-bottom: 1px #000 dashed;">Online ID Verification Required</a> </p> <?php endif ?> <?php $this->render_partial('product_why_hire') ?> <?php if($product->sku == '999999' || $product->sku == '999994' || $product->sku == '999987' || $product->sku == '999993' || $product->sku == '010205' || $product->sku == 'MiStairs-Tower' || $product->sku == 'Span-Access-Platform'): ?> <hr> <img src="/themes/nthsv3/resources/images/NTH-scaffold-diagram.jpg" alt="Scaffold Tower Sizing"> <br/><br/> <?php elseif($product->sku == '031326' || $product->sku == '160125' || $product->sku == '160130' || $product->sku == '160135' || $product->sku == 'TTK-Qube' || $product->sku == 'Corroventa-K3' || $product->sku == 'EB13068' || $product->sku == 'Carpet Cleaner Dehumidifier Package' || $product->sku == '20/0048-h' || $product->sku == '20/0030-h' || $product->sku == '170030'): ?> <hr> <img src="/themes/nthsv3/resources/images/NTH-dehum-diagram.jpg" alt="How Dehumidifiers Work"> <br/><br/> <?php elseif($product->sku == '20/0104-h' || $product->sku == '160060' || $product->sku == 'EB14646' || $product->sku == 'EB14647' || $product->sku == 'E8726332' || $product->sku == 'EB14640' || $product->sku == '20/0452-h' || $product->sku == '20/0108-h'): ?> <hr> <img src="/themes/nthsv3/resources/images/NTH-3-phase.jpg" alt="3-Phase Heaters"> <br/><br/> <?php endif; ?> </div> </div> <div class="five mobile-four columns"> <div class="product-description"> <?php echo open_form(array('class' => 'custom')); ?> <?php $this->render_partial('call_free') ?> <div class="meta"> <div class="row"> <div class="twelve mobile-four columns hide-for-medium-up" style="margin: 1em 0"> <?php if($product->om('x_allow_delivery') > 0 && $product->om('x_min_delivery_charge') > 0) { echo '<a href="/how-it-works/" data-gtm="B: DIY & Trade (P)" title="DIY & Trade: ' . $product->url_name . '"><img src="/themes/nthsv3/resources/images/NTH-banner-DIY.jpg" alt="DIY & Trade" width="100%" height="100%" loading="lazy" title="DIY & Trade: ' . $product->name . '" /></a>'; } elseif ($product->om('x_allow_delivery') > 0 && $product->om('x_min_delivery_charge') < 1) { echo '<a href="/free-delivery/" data-gtm="B: Free Delivery (P)" title="Free Delivery: ' . $product->url_name . '"><img src="/themes/nthsv3/resources/images/NTH-banner-delivery-small_2.png" alt="Free Delivery & Collection" width="100%" height="100%" loading="eager" title="Free Delivery: ' . $product->name . '" /></a>'; } else { echo '<a href="/national-coverage/" data-gtm="B: Click & Collect (P)" title="Click & Collect: ' . $product->url_name . '"><img src="/themes/nthsv3/resources/images/NTH-banner-collect.jpg" alt="Click & Collect" width="100%" height="100%" loading="eager" title="Click & Collect: ' . $product->name . '" /></a>';} ?> <!--<a href="/trade-accounts/" title="Trade Accounts"> <img src="/img/NTH-trade-account-product-graphic.jpg" data-gtm="B: Trade Account (P)" alt="Trade Accounts - Now as easy as 1-2-3" width="100%" height="100%" loading="eager" title="Trade Accounts - Now as easy as 1-2-3" /> </a>--> </div> </div> </div> <?php $bookingDelay = $product->om('x_remote_booking_delay', $posted_options); if($bookingDelay === 0): ?> <div style="border: 1px solid #404040; background: #b0e3f4;"> <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> <?php $cutoff = new DateTime($product->om('x_same_day_booking_cutoff'), new DateTimezone('Europe/London')); $seconds = $cutoff->getTimestamp() - time(); if($seconds > 0): ?> <p style="font-size:1.5em; padding-top: 0.3em; text-align: center;"><strong>Order in the next:</strong> <?php $this->render_partial('countdown', ['seconds' => $seconds]); ?></p> <?php endif ?> </div> <?php endif ?> <?php if($product->options->count): ?> <div class="options"> <?php foreach($product->options as $option): ?> <?php $posted_options = post('product_options', array()); $posted_value = isset($posted_options[$option->option_key]) ? $posted_options[$option->option_key] : null; ?> <div class="option"> <label><?php echo h($option->name); ?></label> <select data-sl="unmask" class="no-custom" name="product_options[<?php echo $option->option_key; ?>]" onchange="$(this).getForm().sendRequest('on_action', { update: { 'product': 'shop:product5_2021' }, onSuccess: function() { init_custom_forms(); init_product_image_viewer(); initTabbedNavigation(); } })"> <?php foreach($option->list_values() as $value): ?> <option data-sl="unmask" style="font-size: 1.1em;" <?= option_state($posted_value, $value) ?> value="<?php echo h($value); ?>"><?php echo h($value); ?></option> <?php endforeach; ?> </select> </div> <?php endforeach; ?> <div class="" style="text-align: center;"> <p style="font-size: 1.4em"> <? if($product->om('working_height') > 0): ?> Working Height: <?php echo ($product->om('working_height', $posted_options)); ?><br/> <? endif; ?> <? if($product->om('platform_height') > 0): ?> Tower Height: <?php echo ($product->om('platform_height', $posted_options))+1; ?>m<br/> <? endif; ?> <? if($product->om('platform_height') > 0): ?> Platform Height: <?php echo ($product->om('platform_height', $posted_options)); ?><br/> <? endif; ?> <? if($product->om('closed_height') > 0): ?> Closed Height: <?php echo ($product->om('closed_height', $posted_options)); ?>.<br/> <? endif; ?> <? if($product->om('a_frame_height') > 0): ?> A Frame Height: <?php echo ($product->om('a_frame_height', $posted_options)); ?>.<br/> <? endif; ?> <? if($product->om('extended_step_height') > 0): ?> Extended Step Height: <?php echo ($product->om('extended_step_height', $posted_options)); ?>.<br/> <? endif; ?> <? if($product->om('extended_ladder_length') > 0): ?> Extended Ladder Length: <?php echo ($product->om('extended_ladder_length', $posted_options)); ?>. <? endif; ?> </p> </div> </div> <?php endif; ?> <div class="addtocart" style="background-color: #E6E6E6; margin-top: 20px;"> <?php if($regionalPricing) { echo $this->render_partial('price_calculator_regional'); } else { echo $this->render_partial('price_calculator6'); } ?> <? if( $product->x_bookpay == 99): ?> <div class="twelve mobile-four columns extrainfobox2" style="margin-bottom: 0;"> <a type="submit" class="button expand bookbutton" type="submit" onclick="return $(this).getForm().sendRequest('shop:on_addToCart', { update: { 'mini_cart':'shop:mini_cart' }, onSuccess: function() { $('#product-added').reveal({ animation: 'fadeAndPop', closeOnBackgroundClick: false }); } })"><i class="fa fa-lg fa-shopping-cart"></i>&nbsp; Add to Cart</a> </div> <? endif; ?> <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-color: #00b67A;" ><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;"> <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="row hide-for-small" style="padding: 2em 0;"> <div class="twelve hide-for-small columns" style="margin-top: 3em;"> <?php $this->render_partial('category_reviews_tp'); ?> </div> </div> <?php if($product->list_reviews()->count > 20): ?> <!--<div class="row hide-for-small" style="padding: 2em 0;"> <div class="twelve hide-for-small columns" style="margin-top: 3em;"> <div class="three hide-for-small columns" style="text-align: center;"> <img src="/themes/nthsv3/resources/images/rated_excellent2.png" alt="Rated Excellent Tool Hire" style="float: left; width: 220px; height: 100%;"> </div> <div class="three mobile-four columns"> <div class="minireview"> <?php $i = 0; $review_count = count($product->list_reviews()); $show = rand(1,$review_count-1) ; ?> <?php foreach($product->list_reviews() as $review): ?> <?php $i++; if($show==$i) : ?> <div class="rating-<?php echo $review->rating; ?>"> </div> <p style='font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;'><?php echo $review->title; ?></p> <p style='margin-bottom: 0; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;'><?php echo nl2br(h($review->review_text)) ?></p> <p style='color: #808080;'><?php echo $review->author; ?></p> <?php endif ?> <?php endforeach; ?> </div> </div> <div class="three mobile-four columns"> <div class="minireview"> <?php $i = 0; $review_count = count($product->list_reviews()); $show = rand(1,$review_count-1) ; ?> <?php foreach($product->list_reviews() as $review): ?> <?php $i++; if($show==$i) : ?> <div class="rating-<?php echo $review->rating; ?>"> </div> <p style='font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;'><?php echo $review->title; ?></p> <p style='margin-bottom: 0; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;'><?php echo nl2br(h($review->review_text)) ?></p> <p style='color: #808080;'><?php echo $review->author; ?></p> <?php endif ?> <?php endforeach; ?> </div> </div> <div class="three mobile-four columns"> <div class="minireview"> <?php $i = 0; $review_count = count($product->list_reviews()); $show = rand(1,$review_count-1) ; ?> <?php foreach($product->list_reviews() as $review): ?> <?php $i++; if($show==$i) : ?> <div class="rating-<?php echo $review->rating; ?>"> </div> <p style='font-size: 1.2em; font-weight: 900; margin-bottom: 0; text-align: left;'><?php echo $review->title; ?></p> <p style='margin-bottom: 0; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;'><?php echo nl2br(h($review->review_text)) ?></p> <p style='color: #808080;'><?php echo $review->author; ?></p> <?php endif ?> <?php endforeach; ?> </div> </div> </div> </div> --> <?php endif ?> <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> <?php if ($product->short_description || ($product->spec_sheets && $product->spec_sheets->count() > 0)): ?> <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> <?php endif; ?> <?php if ($product->x_extratab_name): ?> <li class="cd-tabs__list_li"> <a href="#tab-4" class="cd-tabs__item" data-gtm="T: Extra Tab"> <span class="tab"><?php echo $product->x_extratab_name; ?></span> </a> </li> <?php endif; ?> <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"> <?php echo $product->description; ?> <div style="display: flex; flex-wrap: wrap"> <?php foreach (ShopProductIcons::getIcons() as $icon): ?> <?php if ($product->$icon['key']): ?> <div style="padding: 3px 6px 3px 0;"> <picture> <source srcset="/img/product-icons/<?php echo $icon['img']; ?>.webp" type="image/webp"> <img src="/img/product-icons/<?php echo $icon['img']; ?>.png" loading="lazy" title="<?php echo $icon['name']; ?>" alt="<?php echo $icon['alt']; ?>" width="60" height="60"> </picture> </div> <?php endif; ?> <?php endforeach; ?> </div> </li> <li id="tab-2" class="cd-tabs__panel text-component"> <div class="product-short-specs"> <div> <?php echo $product->short_description; ?> </div> <?php if ($product->spec_sheets && $product->spec_sheets->count() > 0): ?> <div class="product-specs-sheets"> <span> <p><strong>Downloads</strong></p> <?php foreach ($product->spec_sheets as $specSheet): ?> <?php $friendlyName = array_reverse(explode('.', $specSheet->name)); unset($friendlyName[0]); $friendlyName = implode('.', array_reverse($friendlyName)); $friendlyName = ucwords(str_replace(['_', '-'], ' ', $friendlyName)); ?> <div style="padding-bottom: 15px;"> <a href="<?php echo $specSheet->getPath(); ?>" style="text-decoration: underline; " download="product_spec_sheet" rel="nofollow"><?php echo $friendlyName; ?></a> </div> <?php endforeach; ?> </span> </div> <?php endif; ?> </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> <?php if (!empty($product->x_extratab_name)): ?> <li id="tab-4" class="cd-tabs__panel text-component"> <p><?php $this->render_partial('shop:extra_tab'); ?></p> <?php if (!empty($product->video)): ?> <div class="row"> <div class="twelve columns"> <div class="title-block"> <h5>Product Video</h5> </div> </div> </div> <div class="video twelve columns"> <iframe src="<?php echo $product->video; ?>?modestbranding=1&rel=0&showinfo=0showinfo=0" frameborder="0" loading="lazy" allowfullscreen></iframe> </div> <?php endif; ?> </li> <?php endif; ?> <li id="tab-3" class="cd-tabs__panel text-component"> <p><?php $this->render_partial('shop:automatic_related_products_2021'); ?></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> <?php echo close_form(); ?> <?= $this->render_partial('modal_booking') ?> <?php if($SUPPLIERS_RELEASED): ?> <?= $this->render_partial('modal_postcode_lookup') ?> <?php endif ?> </section> <div id="write-review" class="c-review-form reveal-modal" style="display: none"> <h3 class="t2">Write a review for "<?php echo $product->name; ?>"</h3> <?php echo open_form(array('class' => 'custom')); ?> <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> <?php if(!$this->customer): ?> <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" /> <?php endif; ?> <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> <?php echo close_form(); ?> <a class="close-reveal-modal">&#215;</a> </div> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "<?php echo $product->name; ?>", "image": "https://www.nationaltoolhireshops.co.uk<?php echo $images[0]->getThumbnailPath(400, 400); ?>", "description": "<?php echo $this->page->description; ?>", "mpn": "<?php echo $product->sku; ?>", "model": "<?php echo $product->sku; ?>", "sku": "<?php $str = $product->sku; $new_str = str_replace(' ', '', $str); echo $new_str; ?>", "manufacturer": "National Tool Hire", "brand": { "@type": "Brand", "name": "National Tool Hire" }, <? $reviews = $product->list_reviews(); if ($reviews->count): ?> "aggregateRating": { "@type": "AggregateRating", "ratingValue": "<?php echo str_replace('.', '.', $product->rating_approved); ?>", "reviewCount": "<?php echo $product->rating_review_num ?>" }, <? endif ?> <? if($product->om('price') <= 0): ?> <? else: ?> "offers": { "@type": "Offer", "itemCondition": "http://schema.org/NewCondition", "availability": "http://schema.org/InStock", "price": "<?php if($product->om('is_on_sale')): ?><?php echo round($product->om('sale_price', $posted_options), 2); ?><?php else: ?><?php echo $product->om('price', $posted_options) ?><?php endif; ?>", "priceCurrency": "GBP", "priceValidUntil": "<?php echo date("Y-m-d", strtotime('+1 week')); ?>", "url": "https://<?php echo $_SERVER['HTTP_HOST']; ?><?php echo parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); ?>", "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" } } <? endif ?> } </script> ', 'CMS partial', 'shop:product5_2021', array(1) [product => object(Shop_Product)]) /modules/cms/classes/cms_controller.php 1020
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', 'Two Stroke Petrol Trench Rammer') /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 => 'two-stroke-trench-rammer-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/two-stroke-trench-rammer-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 23