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
17 Core_FileCache->set_value('default-partial_shop-product_list_84ff223975c9b34d03563abb7e597f52b47f93fb', 'a:3:{s:7:"ls-data";s:22550:"<div class="product-list product-related-view "> <div class="row"> <div class="owl-carousel owl-theme owl-loading related-products-list" id="attachable"> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/70cm-speedlight-softbox-with-fixed-round-head-bracket/"> <div class="product-list-image"> <span class="bg-primary p p-xsmall p-white p-strong product-list--on-sale-flash">ON SALE</span> <style> @media (min-width: 0px){ .options{top:28px;} } @media (min-width: 992px){ .options{top:30px;} } @media (min-width: 1200px){ .options{top:1px;} } </style> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_21082_365x365.png" class="img-responsive center-block lazyload" alt="70cm (27.5&quot;) Speedlight Softbox with Fixed Round Head Bracket"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">70cm (27.5&quot;) Speedlight Softbox with Fixed Round Head Bracket</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£39.99</span> <span class="product-list-was-price weight-400 text-muted"><strike>£49.99</strike></span> </div> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/pro-st-iii-plus-2-point-4ghz-ttl-flash-trigger-with-high-speed-sync-and-bluetooth/"> <div class="product-list-image"> <span class="background-info-grey p p-xsmall p-strong product-list--on-sale-flash options">+ OPTIONS</span> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_15109_365x365.png" class="img-responsive center-block lazyload" alt="PRO ST-III Plus 2.4GHz TTL Flash Trigger with High-Speed Sync &amp; Bluetooth (X2T)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">PRO ST-III Plus 2.4GHz TTL Flash Trigger with High-Speed Sync &amp; Bluetooth (X2T)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£52.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/pixapro-pro-st-iii-t-flash-transmitter-only/"> <div class="product-list-image"> <span class="background-info-grey p p-xsmall p-strong product-list--on-sale-flash options">+ OPTIONS</span> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_8613_365x365.png" class="img-responsive center-block lazyload" alt="PRO ST-III T 2.4GHz Flash Transmitter Only (X1T)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">PRO ST-III T 2.4GHz Flash Transmitter Only (X1T)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> <ul class="rating-stars rating reviews-rating reviews-rating--product-list text-center"> <li class="active"> <p><span class="sr-only">1</span></p> </li> <li class="active"> <p><span class="sr-only">2</span></p> </li> <li class="active"> <p><span class="sr-only">3</span></p> </li> <li class="active"> <p><span class="sr-only">4</span></p> </li> <li class="active"> <p><span class="sr-only">5</span></p> </li> </ul> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£36.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> <li> <span class="theme-icon theme-circle-tryb4buy"></span> <span class="p p-xsmall p-dark p-regular">Try before you buy</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/pixapro-pro-st-iv-2-point-4ghz-flash-transmitter/"> <div class="product-list-image"> <span class="background-info-grey p p-xsmall p-strong product-list--on-sale-flash options">+ OPTIONS</span> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_3179_365x365.png" class="img-responsive center-block lazyload" alt="PRO ST-IV 2.4GHz Flash Transmitter (XPRO)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">PRO ST-IV 2.4GHz Flash Transmitter (XPRO)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> <ul class="rating-stars rating reviews-rating reviews-rating--product-list text-center"> <li class="active"> <p><span class="sr-only">1</span></p> </li> <li class="active"> <p><span class="sr-only">2</span></p> </li> <li class="active"> <p><span class="sr-only">3</span></p> </li> <li class="active"> <p><span class="sr-only">4</span></p> </li> <li class="active"> <p><span class="sr-only">5</span></p> </li> </ul> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£59.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> <li> <span class="theme-icon theme-circle-tryb4buy"></span> <span class="p p-xsmall p-dark p-regular">Try before you buy</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/replacement-battery-for-gio1-round-head-speedlite/"> <div class="product-list-image"> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_13049_365x365.png" class="img-responsive center-block lazyload" alt="Replacement/Spare Battery for GIO1 Round Head Speedlite and Li-ion580 III Speedlite (GODOX VB26)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">Replacement/Spare Battery for GIO1 Round Head Speedlite and Li-ion580 III Speedlite (GODOX VB26)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£44.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/round-head-smart-speedlite-bracket-with-bowens-s-type-fitting/"> <div class="product-list-image"> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_15549_365x365.png" class="img-responsive center-block lazyload" alt="S-Type SMART Speedlite Adapter Bracket (Suitable for GIO1, CITI300PRO, CITI100PRO &amp; PIKA200 Round Head)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">S-Type SMART Speedlite Adapter Bracket (Suitable for GIO1, CITI300PRO, CITI100PRO &amp; PIKA200 Round Head)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> <ul class="rating-stars rating reviews-rating reviews-rating--product-list text-center"> <li class="active"> <p><span class="sr-only">1</span></p> </li> <li class="active"> <p><span class="sr-only">2</span></p> </li> <li class="active"> <p><span class="sr-only">3</span></p> </li> <li class="active"> <p><span class="sr-only">4</span></p> </li> <li class="active"> <p><span class="sr-only">5</span></p> </li> </ul> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£25.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> </div><!-- /.owl-carousel owl-theme owl-loading related-products-list --> </div><!-- /.row --> </div><!-- /.product-list -->";s:8:"ls-cache";i:1632145373;s:6:"ls-ttl";i:604800;}', 604800) /modules/core/classes/core_cachebase.php 262
16 Core_CacheBase->set('default-partial_shop-product_list_84ff223975c9b34d03563abb7e597f52b47f93fb', '<div class="product-list product-related-view "> <div class="row"> <div class="owl-carousel owl-theme owl-loading related-products-list" id="attachable"> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/70cm-speedlight-softbox-with-fixed-round-head-bracket/"> <div class="product-list-image"> <span class="bg-primary p p-xsmall p-white p-strong product-list--on-sale-flash">ON SALE</span> <style> @media (min-width: 0px){ .options{top:28px;} } @media (min-width: 992px){ .options{top:30px;} } @media (min-width: 1200px){ .options{top:1px;} } </style> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_21082_365x365.png" class="img-responsive center-block lazyload" alt="70cm (27.5&quot;) Speedlight Softbox with Fixed Round Head Bracket"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">70cm (27.5&quot;) Speedlight Softbox with Fixed Round Head Bracket</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£39.99</span> <span class="product-list-was-price weight-400 text-muted"><strike>£49.99</strike></span> </div> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/pro-st-iii-plus-2-point-4ghz-ttl-flash-trigger-with-high-speed-sync-and-bluetooth/"> <div class="product-list-image"> <span class="background-info-grey p p-xsmall p-strong product-list--on-sale-flash options">+ OPTIONS</span> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_15109_365x365.png" class="img-responsive center-block lazyload" alt="PRO ST-III Plus 2.4GHz TTL Flash Trigger with High-Speed Sync &amp; Bluetooth (X2T)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">PRO ST-III Plus 2.4GHz TTL Flash Trigger with High-Speed Sync &amp; Bluetooth (X2T)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£52.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/pixapro-pro-st-iii-t-flash-transmitter-only/"> <div class="product-list-image"> <span class="background-info-grey p p-xsmall p-strong product-list--on-sale-flash options">+ OPTIONS</span> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_8613_365x365.png" class="img-responsive center-block lazyload" alt="PRO ST-III T 2.4GHz Flash Transmitter Only (X1T)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">PRO ST-III T 2.4GHz Flash Transmitter Only (X1T)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> <ul class="rating-stars rating reviews-rating reviews-rating--product-list text-center"> <li class="active"> <p><span class="sr-only">1</span></p> </li> <li class="active"> <p><span class="sr-only">2</span></p> </li> <li class="active"> <p><span class="sr-only">3</span></p> </li> <li class="active"> <p><span class="sr-only">4</span></p> </li> <li class="active"> <p><span class="sr-only">5</span></p> </li> </ul> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£36.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> <li> <span class="theme-icon theme-circle-tryb4buy"></span> <span class="p p-xsmall p-dark p-regular">Try before you buy</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/pixapro-pro-st-iv-2-point-4ghz-flash-transmitter/"> <div class="product-list-image"> <span class="background-info-grey p p-xsmall p-strong product-list--on-sale-flash options">+ OPTIONS</span> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_3179_365x365.png" class="img-responsive center-block lazyload" alt="PRO ST-IV 2.4GHz Flash Transmitter (XPRO)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">PRO ST-IV 2.4GHz Flash Transmitter (XPRO)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> <ul class="rating-stars rating reviews-rating reviews-rating--product-list text-center"> <li class="active"> <p><span class="sr-only">1</span></p> </li> <li class="active"> <p><span class="sr-only">2</span></p> </li> <li class="active"> <p><span class="sr-only">3</span></p> </li> <li class="active"> <p><span class="sr-only">4</span></p> </li> <li class="active"> <p><span class="sr-only">5</span></p> </li> </ul> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£59.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> <li> <span class="theme-icon theme-circle-tryb4buy"></span> <span class="p p-xsmall p-dark p-regular">Try before you buy</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/replacement-battery-for-gio1-round-head-speedlite/"> <div class="product-list-image"> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_13049_365x365.png" class="img-responsive center-block lazyload" alt="Replacement/Spare Battery for GIO1 Round Head Speedlite and Li-ion580 III Speedlite (GODOX VB26)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">Replacement/Spare Battery for GIO1 Round Head Speedlite and Li-ion580 III Speedlite (GODOX VB26)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£44.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> <div class="col-xs-24 col-sm-12 col-md-24 col-lg-5 related"> <div class="product-list-product default"> <a href="/product/round-head-smart-speedlite-bracket-with-bowens-s-type-fitting/"> <div class="product-list-image"> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="/uploaded/thumbnails/db_file_img_15549_365x365.png" class="img-responsive center-block lazyload" alt="S-Type SMART Speedlite Adapter Bracket (Suitable for GIO1, CITI300PRO, CITI100PRO &amp; PIKA200 Round Head)"/> </div><!-- /.product-list-image --> <div class="product-list-info"> <p class="product-list-brand p-strong p-brand">PiXAPRO</p> <p class="product-list-title p-strong p-dark">S-Type SMART Speedlite Adapter Bracket (Suitable for GIO1, CITI300PRO, CITI100PRO &amp; PIKA200 Round Head)</p> <!--<p class="product-list-short-desc weight-500 "></p>--> <div class="aggregate-rating text-center"> <ul class="rating-stars rating reviews-rating reviews-rating--product-list text-center"> <li class="active"> <p><span class="sr-only">1</span></p> </li> <li class="active"> <p><span class="sr-only">2</span></p> </li> <li class="active"> <p><span class="sr-only">3</span></p> </li> <li class="active"> <p><span class="sr-only">4</span></p> </li> <li class="active"> <p><span class="sr-only">5</span></p> </li> </ul> </div><!-- /.aggregate-rating --> <div class="product-list-price-wrapper"> <span class="product-list-price weight-400">£25.99</span> </div> <div class="whybuy-container product-list-whybuy-container mt-10"> <ul class="list-unstyled list-inline m-0"> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">Price Match</span> </li> </ul> </div><!-- /.whybuy-container --> </div><!-- /.product-list-info --> </a> </div><!-- /. product-list-product --> </div><!-- col-* --> </div><!-- /.owl-carousel owl-theme owl-loading related-products-list --> </div><!-- /.row --> </div><!-- /.product-list -->', 604800) /modules/cms/classes/cms_controller.php 1031
15 Cms_Controller->render_partial('shop:product_list', array(7) [products => object(Db_DataCollection), empty_text => null, view_mode => 'related', render_clearfix => '', layout => array(4), equal_height => '', additional_classes => 'owl-carousel owl-theme owl-loading related-products-list'], array(4) [cache => '1', cache_ttl => '604800', cache_vary_by => array(2), cache_versions => array(1)]) /modules/cms/classes/cms_controller.php(383) : eval()'d code 853
14 eval(()) /modules/cms/classes/cms_controller.php 383
13 Cms_Controller->evalWithException('?><? /** * Store om() results at the top of the page for use throughtout */ $posted_options = Shop_ProductHelper::get_default_options($product); $sku = $product->om('sku', $posted_options); $price = $product->om('price', $posted_options); $images = $product->om('images', $posted_options); $disabled = $product->om('disabled', $posted_options); $on_sale = $product->om('is_on_sale', $posted_options); $sale_price = $product->om('sale_price', $posted_options); $in_stock = intval($product->om('in_stock', $posted_options)); $allow_pre_order = $product->om('allow_pre_order', $posted_options); $track_inventory = $product->om('track_inventory', $posted_options); $is_out_of_stock = $product->om('is_out_of_stock', $posted_options); $low_stock = intval($product->om('low_stock_threshold', $posted_options)); $stock_threshold = intval($product->om('stock_alert_threshold', $posted_options)); $expected_availability = $product->om('expected_availability_date', $posted_options); /** * Check to see if the back end user is using stock without track inventory, it this is the case * default to stock being true, stock can be null, >= 0 if track inventory has not been enabled * and stock will still be true. */ $is_in_stock = ($in_stock >= 0 && !$track_inventory) || ($in_stock > 0 && $track_inventory); /** * Check to see if the product is now in the low stock level */ $low_stock_threshold = ($low_stock && $in_stock) && ($low_stock >= $in_stock && $low_stock > $stock_threshold && $in_stock > $stock_threshold); /** * Check to see if the product is now out of stock using the 'Out of Stock Threshold' field */ $out_of_stock_threshold = (!$track_inventory && $stock_threshold && $in_stock) && ($in_stock <= $stock_threshold); /** * Check to see if the product is on pre-order with some prerequisites before hand */ $on_pre_order = ($allow_pre_order) && (!$is_in_stock || $is_out_of_stock || $out_of_stock_threshold); /** * Compiles the above to see if the product is on pre order or in stock */ $currently_on_pre_order_or_in_stock = $on_pre_order || ($is_in_stock && (!$out_of_stock_threshold && !$is_out_of_stock)); /** * Checking the count once here and storing it in to a variable prevent the need for using * $images->count which is a sql call everytime to check, this will help overall * performance. */ $image_count = $images->count; /** * Checking the long description helps asses if the seconds tab/accordion should have the 'in' class * and act as the first tab/accordion */ $has_long_description = (strlen($product->description) > 0); /** * Create a realistic qty drop down to make sure we arn't displaying * too many qty options in the foreach and limit to the $stock_qty_limit value * This should prevent excessive memory usage when using the foreach. */ $stock_qty_limit = 5; $stock_level = $in_stock >= $stock_qty_limit ? $stock_qty_limit : $in_stock; if($currently_on_pre_order_or_in_stock) $stock_level = $stock_qty_limit; /** * Schema Markup * Helper var to fallback to main product image * if no schema image added in the backend */ $itemprop_image = ''; if(!$product->x_schema_image->count) $itemprop_image = 'itemprop="image"'; /** * Create a variable for the oEmbed markup so the variable can be alter * and sent shop:oembed partial with the correct availability */ $availability = "In Stock"; /** * Get a list of any related products and build a count variable to better preformance * in reusing the variable instead of an sql calling each time. */ $related_products = $product->list_related_products()->find_all(); $has_related_products = $related_products->count; /** * Get a list of any customer related products and build a count variable to better preformance * in reusing the variable instead of an sql calling each time. */ $custom_related_products = $product->custom_related_products; $has_custom_related_products = $custom_related_products ? $custom_related_products->count : false; /** * Add the questions variable here for checking against the scroll-to tab * count variable to better preformance in reusing the variable * instead of an sql calling each time. */ $questions = isset($product->questions) ? $product->questions : array(); // $has_questions = count($questions); $has_questions = true; /** * Check to see if the product has attributes */ $has_attributes = $product->properties->count > 0; $attributes = $product->properties; /** * Checks to see if there are any options available * for customisation */ $has_options = !! ($product->options->count + $product->extra_options->count); /** * YouTube vidoe embed code */ $youtube_vidoes = $product->youtube_embed; ?> <div class="product" itemscope itemtype="http://schema.org/Product"> <div class="product-top-container pb-xs-15 pb-md-60"> <div class="container"> <div class="border border-b pt-15 pb-10 position-relative"> <div class="row"> <div class="col-xs-18"> <? $gotparent = false; ?> </span> <? foreach($product->categories as $i=>$category): ?> <? if(isset($category->parent->parent->parent->code)): ?> <? if($category->parent->parent->parent->code == "shopbyproduct"): ?> <? if (strpos($category->code, 'sale-') === false): ?> <a href="<?= $category->page_url('category'); ?>"><span class="theme-grid back-icon"></span> <span class="p p-small mb-0">View all <?= $category->name; ?></span></a> <? $gotparent = true; ?> <? endif; ?> <? endif; ?> <? endif; ?> <? endforeach; ?> <? if ($gotparent == false): ?> <? foreach($product->categories as $i=>$category): ?> <? if(isset($category->parent->parent->code)): ?> <? if($category->parent->parent->code == "shopbyproduct"): ?> <a href="<?= $category->page_url('category'); ?>"><span class="theme-grid back-icon"></span> <span class="p p-small mb-0">View all <?= $category->name; ?></span></a> <? $gotparent = true; ?> <? endif; ?> <? endif; ?> <? endforeach; ?> <? endif; ?> </div> <div class="col-xs-6 text-right position-initial"> <div class="dropdown position-initial"> <a id="shareMenu" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <span class="p p-small mb-0">Share</span> <span class="theme-share back-icon"></span> </a> <div class="dropdown-menu sharemenu" aria-labelledby="shareMenu"> <div class="px-20 py-15"> <p class="p p-dark p-small p-regular mb-5">Share on</p> <div class="sharelinks"> <? $this->render_partial('shop:product_share_this', [], array( 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week 'cache_vary_by'=> array('url'), 'cache_versions'=> array('catalog'), )); ?> </div> <p class="p p-dark p-small p-regular pt-15 mb-5 position-relative">Share Link <span class="copyStatus">Click to copy</span></p> <input readonly type="text" value="" class="allowCopy noselect"> </div> </div> </div> </div> </div> </div> </div> </div> <div class="product-buyarea-container"> <div class="container"> <div class="row"> <div class="col-xs-24 col-sm-24 col-md-6 col-lg-7 xs-center"> <? if ($on_sale): ?> <div class="flashes pb-15"> <span class="label label-sale">ON SALE</span> </div> <? endif; ?> <? if($product->manufacturer): ?> <p class="p-strong p-brand mb-xs-0 mb-md-15"><?= $product->manufacturer->name; ?></p> <? endif; ?> <div class="title-container"> <h1 class="h1 h1-regular mb-xs-5 mb-md-15 mt-0"><?= $product->title ?></h1> <meta itemprop="name" content="<?= h($product->x_schema_title ? $product->x_schema_title : $product->name) ?>" /> </div><!-- /.title --> <div class="titlesub-container mb-30"> <div class="sku"><?= $sku ?></div> <div class="rating-container product-rating-container"> <? /** * Get the approved ratings for this product * statically put the worstRating & bestRating for schema markup */ $rating = round($product->rating_approved); $total_reviews = intval($product->rating_review_num); if ($rating > 0): ?> <div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"> <ul class="rating"> <? for($i=1; $i<=5; $i++): ?> <li class="<?= $i <= $rating ? 'active': null; ?> rating-star"> <p><span class="sr-only"><?=$i;?></span></p> </li> <? endfor; ?> <li class="rating-based-on">(<?= $total_reviews; ?>)</li> </ul><!-- /.rating_stars --> <meta itemprop="worstRating" content="1" /> <meta itemprop="bestRating" content="5" /> <p class="sr-only">Rating of <span itemprop="ratingValue"><?= $rating ? $rating : 0 ?></span> stars, based on <span itemprop="reviewCount"><?= $total_reviews; ?></span> reviews</p> </div><!-- /.aggregate-rating --> <? endif; ?> </div><!-- /.product-rating-container --> </div><!-- /.title sub --> <? if ($product->awards->count): ?> <div class="product-awards-container hidden-xs hidden-sm"> <? foreach ($product->awards as $key => $award): // Can also use file // $award->file->disk_name // $award->url_name; ?> <a href="https://www.essentialphoto.co.uk/awards/" target="_blank"> <img src="<?= $award->image->thumb('auto','auto', false); ?>" class="img-responsive"> </a> <? endforeach; ?> </div> <? endif; ?> </div> <div class="col-xs-24 col-sm-14 col-md-10"> <div class="product-image-thumbnail-container"> <div> <img src="<?= theme_resource_url('img/ajax-loader.gif'); ?>" id="carousel-loader" class="product-image-loader carousel-loader" /> <div class="product-images-container images owl-carousel owl-theme owl-loading border border-b" id="images"> <? if($image_count): ?> <? foreach ($images as $i=>$image): ?> <div class="product-images-item item" data-hash="image-<?= ($i+1); ?>"> <? if($images->first): ?> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="<?= root_url($image->thumb(800, 'auto', false), true) ?>" alt="<?= h($image->description) ?>" class="product-images-image img-responsive center-block lazyload" <?= $itemprop_image; ?> /> <? else: ?> <img src="<?= theme_resource_url('img/image-coming-soon.jpg'); ?>" alt="" class="product-images-image img-responsive center-block"/> <? endif; ?> </div><!-- /.product-images-item --> <? endforeach; ?> <? else: ?> <img src="<?= theme_resource_url('img/image-coming-soon.jpg'); ?>" alt="" class="img-responsive center-block" width="625" /> <? endif; ?> </div><!-- /.product-images-container --> <? /** * If we have custom schema images then foreach through these up to max of 6 * instead of the main image. */ if(!strlen($itemprop_image)): ?> <meta itemprop="image" content="<?= root_url($product->x_schema_image->thumb(625, 'auto', false),true); ?>" alt="<?= h($product->x_schema_image->description ? $product->x_schema_image->description : $product->name) ?>" /> <? endif; ?> </div> <? if ($image_count): ?> <div class="col-xs-24"> <div class="product-thumbnails-container thumbnails" id="thumbnails"> <? foreach ($images as $i=> $image): ?> <div class="product-thumbnails-item item"> <a href="#image-<?= ($i+1); ?>"> <img src="/themes/default/resources/img/low-res/365by365.jpg" data-src="<?= $image->thumb(367, 367, false) ?>" alt="<?= h($image->description ? $image->description : null) ?>" class="product-thumbnails-image img-responsive center-block url lazyload" /> </a> </div><!-- /.product-thumbnails-item --> <? endforeach ?> </div><!-- /.product-thumbnails-container --> </div><!-- /.col-* --> <? endif; ?> </div><!-- /.product-image-thumbnail-container --> </div> <div class="col-xs-24 col-sm-10 pull-sm-right col-md-8 col-lg-7 mb-xs-30 mb-sm-0"> <?= open_form(array('role'=> "form")); ?> <div class="card-container" itemprop="offers" itemscope itemtype="http://schema.org/Offer"> <div class="card py-25 px-30"> <div class="card-section"> <div class="price-container product-prices-container border border-b mb-10"> <?php $showVat = true; if ($this->customer) { Shop_CheckoutData::load_from_customer($this->customer, $force = true); $rates = Shop_TaxClass::get_tax_rates_static( $product->tax_class_id, Shop_CheckoutData::get_shipping_info() ); if (count($rates)) { $showVat = ($rates[0]->rate > 0); } } ?> <p class="p-small p-dark p-strong m-0">Buy online</p> <span class="price product-price h1 h1-regular m-0 <?= $on_sale ? 'price--sale-price' : null;?>"> <?= format_currency($sale_price) ?> <?php if ($showVat): ?> <em><?= format_currency($sale_price/1.2) ?> ex vat</em> <?php endif; ?> </span> <? if ($on_sale): ?> <div class="price price--was-price"> <span class="p p-small p-grey p-strong"> Was: <?= format_currency($price) ?></span> <span class="price--save p p-small p-brand p-strong">SAVE <?= format_currency($price-$sale_price) ?></span> </div> <? endif; ?> <input type="hidden" value="<?= $sale_price ?>" id="base_product_price"/> <meta itemprop="price" content="<?= number_format($sale_price, 2, '.', ','); ?>" /> <meta itemprop="priceCurrency" content="<?= Shop_CurrencySettings::get()->code; ?>" /> <meta itemprop="itemCondition" content="http://schema.org/NewCondition" /> <meta itemprop="url" content="<?= root_url($product->page_url('product'),true); ?>" /> <? $euro_rate = Shop_CurrencyConverter::create()->get_rate('GBP','EUR'); ?> <? $usd_rate = Shop_CurrencyConverter::create()->get_rate('GBP','USD'); ?> <p class="p-small m-0 pt-5 pb-0"> <i>Conversion (Approx):</i> | <i>&euro;<?= number_format($sale_price*$euro_rate, 0, '.', ','); ?></i> | <i>$<?= number_format($sale_price*$usd_rate, 0, '.', ','); ?></i> | </p> </div><!-- /.product-prices-container --> <div class="stock-container product-stock-container"> <div class="stock product-stock"> <? if($low_stock_threshold): ?> <span class="icon-fonts-icon-approved stock-icon stock-icon--limited-stock"></span> <span class="p p-xsmall p-dark p-regular">Limited stock available</span> <link itemprop="availability" href="http://schema.org/LimitedAvailability"/> <? elseif($on_pre_order): ?> <span class="theme-icon theme-circle-cross"><span class="path1"></span><span class="path2"></span><span class="path3"></span></span> <link itemprop="availability" href="http://schema.org/PreOrder"/> <span class="p p-xsmall p-brand p-regular"><? $availability = "Pre Order"; ?>Out of stock, pre-order available</span> <? elseif($out_of_stock_threshold || (!$is_in_stock) || $is_out_of_stock): ?> <span class="theme-icon theme-circle-cross"><span class="path1"></span><span class="path2"></span><span class="path3"></span></span> <link itemprop="availability" href="http://schema.org/OutOfStock"/> <span class="p p-xsmall p-brand p-regular"><? $availability = "Out Of Stock"; ?>Out of stock</span> <? else: ?> <span class="theme-icon theme-circle-tick"></span> <span class="p p-xsmall p-dark p-regular">In Stock, ready to ship</span> <link itemprop="availability" href="http://schema.org/InStock"/> <? endif; ?> <? if($expected_availability && ($on_pre_order || $out_of_stock_threshold || $is_in_stock || $is_out_of_stock)): ?> <span class="stock-expected-availabilty-date expected-availabilty-date p p-xsmall p-dark p-regular"> <br />Est Availability: <?=$expected_availability->format('%d/%m/%Y'); ?> </span> <? endif; ?> </div><!-- /.stock --> </div><!-- /.stock-container --> <div class="whybuy-container product-whybuy-container border border-b mb-10"> <ul class="list-unstyled"> <? if ($product->x_price_match_guarantee): ?> <li> <span class="theme-icon theme-circle-pricematch"></span> <span class="p p-xsmall p-dark p-regular">PRICE MATCH GUARANTEE -</span> <a class="p p-xsmall p-blue" href="" data-ajax-handler="core:on_null" data-ajax-update="information-modal=shop:product_price_match">more info</a> </li> <? endif; ?> <? if ($product->x_finance_available): ?> <li> <span class="theme-icon theme-circle-info"></span> <span class="p p-xsmall p-dark p-regular">Finance <span class="hidden-md hidden-sm"> available </span>with <img class="deko" src="/themes/default/resources/img/deko.svg"> - </span> <a class="p p-xsmall p-blue" href="" data-ajax-handler="core:on_null" data-ajax-update="information-modal=shop:product_finance">more info</a> </li> <? endif ?> <li> <span class="theme-icon theme-circle-shipping"></span> <span class="p p-xsmall p-dark p-regular">Intl. shipping available-</span> <a href="#" class="p p-xsmall p-blue" data-ajax-handler="core:on_null" data-ajax-update="information-modal=shop:product_international_shipping" data-ajax-extra-fields="product_id='<?= $product->id; ?>'">check rates</a> </li> <? if ($product->x_try_before_you_buy): ?> <li> <span class="theme-icon theme-circle-tryb4buy"></span> <span class="p p-xsmall p-dark p-regular">Try before you buy -</span> <a class="p p-xsmall p-blue" href="/try-b4-you-buy/">more info</a> </li> <? endif; ?> </ul> </div><!-- /.whybuy-container --> </div><!-- /.card-section --> <div class="product-quantity-buy-container <?= (! $product->options->count && ! $product->extra_options->count) ? 'mt-15' : ''; ?>"> <? if($currently_on_pre_order_or_in_stock): ?> <? if ($product->options->count): ?> <div class="mb-15"> <div class="card-section"> <? $this->render_partial('shop:product_options'); ?> </div><!-- /.card-section --> </div> <? endif; ?> <? if($product->extra_options->count): ?> <div class="mb-15"> <div class="card-section card-section--no-border"> <? $this->render_partial('shop:product_extra_options', [], [ 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week 'cache_vary_by'=> array('url'), 'cache_versions'=> array('catalog'), ]); ?> </div><!-- /.card-section --> </div> <? endif; ?> <div class="product-quantity-container"> <div class="product-quantity-options"> <label for="qty" class="product-quantity-label hide">Qty:</label> <select name="product_cart_quantity" id="qty" class="form-control product-quantity-select"> <? for($i=1; $i<=$stock_level; $i++): ?> <option value="<?= $i; ?>"><?= $i; ?></option> <? endfor; ?> </select> </div><!-- /.product-quantity-options --> </div><!-- /.product-quantity-container --> <? endif; ?> <div class="add-to-cart-container <? if ($currently_on_pre_order_or_in_stock): ?><? else: ?>out-of-stock<? endif; ?>"> <div class="add-to-cart-options"> <? if ($currently_on_pre_order_or_in_stock): ?> <button type="submit" name="add_to_cart" class="btn btn-primary add-to-cart-btn add-to-cart-btn--in-stock add-to-cart-btn--pre-order" data-ajax-handler="bundleproduct:on_addToCart" data-ajax-update="product-page=shop:product,mini-cart=shop:mini_cart,added-to-cart-modal=shop:modal_added_to_cart" data-ajax-indicator-html="Adding to basket..."> <?= $on_pre_order ? 'Pre Order' : 'Add To Basket'; ?> <span class="icon-basket icon-fonts-icon-basket add-to-cart-btn-icon"></span> </button> <? else: ?> <button type="button" class="btn btn-primary btn-out-of-stock add-to-cart-btn--out-of-stock" disabled="disabled"> Out of Stock </button> <? endif; ?> </div><!-- /.add-to-cart-options --> </div><!-- /.add-to-cart-container --> <div class="mt-10"> <span class="theme-creditcards-secure p p-xlarge p-grey pr-5"></span><span class="p p-xsmall p-dark p-regular">Verified Secure shopping</span> </div> <div class="mt-10"> <!-- Placement v2 --> <klarna-placement data-key="top-strip-promotion-badge" data-locale="en-GB" ></klarna-placement> <!-- end Placement --> </div> </div> </div><!-- /.buy-box --> </div><!-- /.buy-box-container --> </div><!-- /.col-* --> </div> </form> </div> </div> <div class="product-tabs"> <div class="container"> <ul class="product-nav hidden-xs"> <? if($has_long_description): ?><li><a class="tab-open active" href="#product-overview">Overview</a></li><? endif; ?> <? if ($has_attributes): ?><li><a class="tab-open" href="#product-specifications">Specifications</a></li><? endif; ?> <? if ($youtube_vidoes->count): ?><li><a class="tab-open" href="#product-videos">Videos</a></li><? endif; ?> <? if($has_resource): ?><li><a class="tab-open" href="#product-downloads">Downloads</a></li><? endif; ?> <li><a class="tab-open" href="#product-questions">Q&amp;A&rsquo;s</a></li> <li><a class="tab-open" href="#delivery-and-returns-panel">Delivery &amp; Returns</a></li> </ul> </div> </div> <div class="container"> <div class="row my-50"> <div class="col-xs-24"> <div class="information-container product-accordion-container"> <div class="panel-group accordion-group" id="accordion" role="tablist" aria-multiselectable="true"> <? if($has_long_description): ?> <div class="panel panel-default accordion-panel" id="product-overview"> <div class="panel-heading accordion-heading" role="tab" id="description"> <div class="panel-title accordion-header accordion-first"> <a href="#collapseDescription" role="button" data-toggle="collapse" data-parent="#accordion" aria-expanded="true" aria-controls="collapseDescription" class="accordion-link"> <h2 class="h2 accordion-title">- Overview</h2> <i class="icon-fonts-icon-plus accordion-icon"></i> </a> </div><!-- /.accordion-header --> </div><!-- /.accordion-heading --> <div id="collapseDescription" class="panel-collapse collapse in accordion-collapse" role="tabpanel" aria-labelledby="description"> <div class="panel-body accordion-body"> <div class="accordion-long-description"> <? if ($product->featureicons_list->count): ?> <div class="row"> <div class="col-xs-24 pt-xs-50 pt-sm-0"> <ul class="list-unstyled icon-list owl-carousel owl-theme"> <? foreach ($product->featureicons_list as $key => $icon): ?> <li style="width:120px;"> <img src="<?= $icon->icon; ?>" width="68"> <span class="p p-xsmall p-strong p-grey"><?= $icon->title; ?></span> </li> <? endforeach; ?> </ul> </div> </div> <? endif; ?> <div class="row"> <div class="col-sm-15"> <?= $product->description; ?> </div> <div class="col-sm-8 col-sm-offset-1"> <? if ($product->feature_list->count): ?> <div class="h3 mt-0">Features</div> <ul> <? foreach($product->feature_list as $features): ?> <li class="pb-5"><?= $features->feature; ?></li> <? endforeach; ?> </ul> <? endif; ?> <? if ($product->whats_in_the_box_list->count): ?> <div class="h3">What&rsquo;s In the Box</div> <ul> <? foreach ($product->whats_in_the_box_list as $item): ?> <li class="pb-5"><?= $item->included; ?></li> <? endforeach; ?> </ul> <? endif; ?> </div> </div> </div><!-- /.accordion-long-description --> </div><!-- /.accordion-body --> </div><!-- /.accordion-collapse --> </div><!-- /.accordion-default --> <? endif; ?> <? if ($has_attributes): ?> <div class="panel panel-default accordion-panel" id="product-specifications"> <div class="panel-heading accordion-heading" role="tab" id="spec"> <div class="panel-title accordion-header"> <a href="#collapseSpec" role="button" data-toggle="collapse" data-parent="#accordion" aria-expanded="true" aria-controls="collapseSpec" class="<?= $has_long_description ? 'collapsed' : ''; ?> accordion-link"> <h2 class="h2 accordion-title">- Specifications</h2> <i class="icon-fonts-icon-plus accordion-icon"></i> </a> </div><!-- /.accordion-header --> </div><!-- /.accordion-heading --> <div id="collapseSpec" class="panel-collapse collapse accordion-collapse" role="tabpanel" aria-labelledby="description"> <div class="panel-body accordion-body"> <div class="accordion-spec"> <h4 class="h2 pb-40 my-0 hidden-xs">Specifications</h4> <div class="row"> <? $attributes = $attributes->as_array(); $len = count($attributes); $firsthalf = array_slice($attributes, 0, $len / 2); $secondhalf = array_slice($attributes, $len / 2); ?> <div class="col-sm-12 attributes-table"> <table class="table table-striped"> <tbody> <? foreach($firsthalf as $attribute): ?> <tr> <td class="attributes-name weight-400"> <? if($attribute->x_glyphicon): ?> <span class="<?=$attribute->x_glyphicon;?> icon attributes-icon pull-left"></span> <? endif; ?> <?= $attribute->name ?> </td> <td class="attributes-value"> <?= nl2br($attribute->value) ?> </td> </tr><!-- /.attributes-details --> <? endforeach ?> </tbody><!-- /.attributes --> </table><!-- /.attributes-container --> </div> <div class="col-sm-12 attributes-table"> <table class="table table-striped"> <tbody> <? foreach($secondhalf as $attribute): ?> <tr> <td class="attributes-name weight-400"> <? if($attribute->x_glyphicon): ?> <span class="<?=$attribute->x_glyphicon;?> icon attributes-icon pull-left"></span> <? endif; ?> <?= $attribute->name ?> </td> <td class="attributes-value"> <?= nl2br($attribute->value) ?> </td> </tr><!-- /.attributes-details --> <? endforeach ?> </tbody><!-- /.attributes --> </table><!-- /.attributes-container --> </div> </div> </div><!-- /.accordion-long-description --> </div><!-- /.accordion-body --> </div><!-- /.accordion-collapse --> </div><!-- /.accordion-default --> <? endif; ?> <? if ($youtube_vidoes->count): ?> <div class="panel panel-default accordion-panel" id="product-videos"> <div class="panel-heading accordion-heading" role="tab" id="videos"> <div class="panel-title accordion-header"> <a href="#collapseVideos" role="button" data-toggle="collapse" data-parent="#accordion" aria-expanded="true" aria-controls="collapseVideos" class="<?= $has_long_description ? 'collapsed' : ''; ?> accordion-link"> <h2 class="h2 accordion-title">- Videos</h2> <i class="icon-fonts-icon-plus accordion-icon"></i> </a> </div><!-- /.accordion-header --> </div><!-- /.accordion-heading --> <div id="collapseVideos" class="panel-collapse collapse accordion-collapse" role="tabpanel" aria-labelledby="videos"> <div class="panel-body accordion-body"> <div class="accordion-videos"> <h4 class="h2 pb-10 my-0 hidden-xs">Videos</h4> <div class="row"> <? foreach ($youtube_vidoes as $youtube): ?> <div class="col-sm-12 mt-30"> <div class="embed-responsive embed-responsive-16by9"> <object class="embed-responsive-item" data="https://www.youtube.com/embed/<?= $youtube->code; ?>"></object> </div> </div> <? endforeach ?> </div> </div><!-- /.accordion-long-description --> </div><!-- /.accordion-body --> </div><!-- /.accordion-collapse --> </div><!-- /.accordion-default --> <? endif; ?> <? if($has_resource): ?> <div class="panel panel-default accordion-panel" id="product-downloads"> <div class="panel-heading accordion-heading" role="tab" id="resources"> <div class="panel-title accordion-header"> <a href="#collapseResources" role="button" data-toggle="collapse" data-parent="#accordion" aria-expanded="true" aria-controls="collapseResources" class="<?= $has_long_description ? 'collapsed' : ''; ?> accordion-link"> <h2 class="h2 accordion-title">- Downloads</h2> <i class="icon-fonts-icon-plus accordion-icon"></i> </a> </div><!-- /.accordion-header --> </div><!-- /.accordion-heading --> <div id="collapseResources" class="panel-collapse collapse accordion-collapse" role="tabpanel" aria-labelledby="resources"> <div class="panel-body accordion-body"> <div class="accordion-resources"> <h4 class="h2 pb-40 my-0 hidden-xs">Downloads</h4> <?php $this->render_partial('shop:product_related_resources', array( 'category_name' => isset($product->categories[0]) ? $product->categories[0]->name : "Resources" )); ?> </div><!-- /.accordion-long-description --> </div><!-- /.accordion-body --> </div><!-- /.accordion-collapse --> </div><!-- /.accordion-default --> <? endif; ?> <? if($has_questions): ?> <div class="panel panel-default accordion-panel" id="product-questions"> <div class="panel-heading accordion-heading" role="tab" id="question-and-answers-panel"> <div class="panel-title accordion-header"> <a href="#collapseQuestionAnwsers" role="button" data-toggle="collapse" data-parent="#accordion" aria-expanded="false" aria-controls="collapseQuestionAnwsers" class="<?= $has_long_description ? 'collapsed' : ''; ?> accordion-link"> <h2 class="h2 accordion-title">- Q&amp;A</h2> <i class="icon-fonts-icon-plus accordion-icon"></i> </a> </div><!-- /.accordion-header --> </div><!-- /.accordion-heading --> <div id="collapseQuestionAnwsers" class="panel-collapse collapse" role="tabpanel" aria-labelledby="question-and-answers-panel"> <div class="panel-body accordion-body" id="questions-answers"> <h4 class="h2 pb-40 my-0 hidden-xs">Q&amp;A&rsquo;s</h4> <? $this->render_partial('shop:product_questions_answers'); ?> </div><!-- /.accordion-body --> </div><!-- /.accordion-collapse --> </div><!-- /.accordion-default --> <? endif; ?> <div class="panel panel-default accordion-panel" id="delivery-and-returns-panel"> <div class="panel-heading accordion-heading" role="tab"> <div class="panel-title accordion-header"> <a href="#collapseDeliveryReturns" class="<?= $has_long_description ? 'collapsed' : ''; ?> accordion-link" role="button" data-toggle="collapse" data-parent="#accordion" aria-expanded="false" aria-controls="collapseDeliveryReturns" > <h2 class="h2 accordion-title">- Delivery &amp; Returns</h2> <i class="icon-fonts-icon-plus accordion-icon"></i> </a> </div> </div> <div id="collapseDeliveryReturns" class="panel-collapse collapse <?= $has_long_description ? '' : 'in'; ?> accordion-collapse delivery-and-returns-panel" role="tabpanel" aria-labelledby="delivery-and-returns-panel"> <div class="panel-body accordion-body"> <h4 class="h2 pb-40 my-0 hidden-xs">Delivery &amp; Returns</h4> <div class="row"> <div class="col-xs-24 col-sm-16 col-md-15 content"> <? global_content_block('delivery_and_returns'); ?> </div> <div class="col-xs-24 col-sm-8 pull-right"> <h3 class="h3">International Delivery Rates</h3> <div class="international-block standout-block text-center p-30 mt-20"> <span class="theme-shipping"></span> <p class="p-light pt-30"> We are able to ship from our UK based warehouses to many countries around the world. Click below to check shipping rates to your country... </p> <a href="" data-ajax-handler="core:on_null" data-ajax-update="information-modal=shop:product_international_shipping" data-ajax-extra-fields="product_id='<?= $product->id; ?>'" class="btn btn-secondary btn-md my-10">Check your country</a> </div> </div> </div> </div> </div> </div> </div><!-- /.pane-group --> </div><!-- /.information-container --> </div><!-- /.col-* --> </div> </div> <? $this->render_partial('snippet:usedby', [], [ 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week ]); ?> <div class="reviews-wrapper" id="product-reviews"> <div id="reviews"> <? $this->render_partial('shop:product_reviews', [], [ 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week 'cache_vary_by'=> array('url'), 'cache_versions'=> array('catalog'), ]); ?> </div><!-- /#reviews --> </div> <div class="trustedshops"> <div class="container"> <div class="row"> <div class="col-xs-24"> <script type="text/javascript"> _tsProductReviewsConfig = { tsid: 'X46B91D11117D159E86E03E196930C6E4', sku: ['<?= $sku; ?>'], variant: 'productreviews', /* optional */ borderColor: '#be0f34', backgroundColor: '#ffffff', locale: 'en_GB', starColor: '#be0f34', commentBorderColor: '#dad9d5', commentHideArrow: 'false', richSnippets: 'on', starSize: '15px', ratingSummary: 'false', maxHeight: '600px', hideEmptySticker: 'false', filter: 'true', introtext: 'What our customers say about us:' }; var scripts = document.getElementsByTagName('SCRIPT'), me = scripts[scripts.length - 1]; var _ts = document.createElement('SCRIPT'); _ts.type = 'text/javascript'; _ts.async = true; _ts.charset = 'utf-8'; _ts.src ='//widgets.trustedshops.com/reviews/tsSticker/tsProductSticker.js'; me.parentNode.insertBefore(_ts, me); _tsProductReviewsConfig.script = _ts; </script> </div> </div> </div> </div> <div class="container py-50" id="related-products"> <div class="row"> <? if($has_related_products): ?> <div class="col-xs-24"> <div class="related-products"> <div class="h1 text-center pb-40">Related Products</div> <div> <!-- Nav tabs --> <ul class="nav nav-tabs centered-tabs mb-60" role="tablist"> <? if($has_related_products): ?> <li role="presentation" class="active"> <a href="#compatible_accessories" aria-controls="compatible_accessories" role="tab" data-toggle="tab">Compatible Accessories</a> </li><!-- <? endif ?> --><li role="presentation"> <a href="#alternative_products" aria-controls="alternative_products" role="tab" data-toggle="tab">Alternative Products</a> </li> </ul> <!-- Tab panes --> <div class="tab-content"> <? if($has_related_products): ?> <div role="tabpanel" class="tab-pane active" id="compatible_accessories"> <? $this->render_partial('shop:product_list',array( 'products' => $related_products, 'empty_text'=> null, 'view_mode' => 'related', 'render_clearfix' => false, 'layout'=> array('phone_xs'=> 1, 'tablet_sm'=> 2, 'desktop_md'=> 1, 'desktop_lg'=> 5), 'equal_height'=> false, 'additional_classes' => 'owl-carousel owl-theme owl-loading related-products-list' ), array( 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week 'cache_vary_by'=> array('url', 'product_list' => 'related_products'), 'cache_versions'=> array('catalog'), )); ?> </div> <? endif ?> <? if($has_custom_related_products): ?> <div role="tabpanel" class="tab-pane fade" id="alternative_products"> <? $this->render_partial('shop:product_list',array( 'products' => $custom_related_products, 'empty_text'=> null, 'view_mode' => 'related', 'render_clearfix' => false, 'layout'=> array('phone_xs'=> 1, 'tablet_sm'=> 2, 'desktop_md'=> 1, 'desktop_lg'=> 5), 'equal_height'=> false, 'additional_classes' => 'owl-carousel owl-theme owl-loading related-products-list' ), array( 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week 'cache_vary_by'=> array('url', 'product_list' => 'custom_related_products'), 'cache_versions'=> array('catalog'), )); ?> </div> <? endif ?> </div> </div> </div><!-- /.related-products --> </div><!-- /.col-* --> <? endif ?> </div><!-- /.row --> </div><!-- /.container --> <meta itemprop="description" content="<?= $product->x_schema_description ? $product->x_schema_description : $product->short_description; ?>" /> <meta itemprop="url" content="<?= root_url($product->page_url('product'),true); ?>" /> <meta itemprop="category" content="<?= isset($product->categories[0]) ? $product->categories[0]->name : 'No Category'; ?>" /> <meta itemprop="sku" content="<?= $sku; ?>" /> <? if($product->manufacturer): ?> <meta itemprop="brand" content="<?= $product->manufacturer->name; ?>" /> <? endif; ?> <script> fbq('track', 'ViewContent', { content_name: '<?= $product->title ?>', content_category: '<?= $product->categories[0]->name; ?>', content_ids: ['<?= $product->sku; ?>'], content_type: 'product', value: <?= number_format($product->get_sale_price(1), 2, '.', '') ?>, currency: 'GBP' }); </script> </div><!-- /.product --> <div id="added-to-cart-modal"></div><!-- /.added-to-cart-modal --> <div id="information-modal" class="information-modal"></div><!-- /.information-modal --> ', 'CMS partial', 'shop:product', array(0)) /modules/cms/classes/cms_controller.php 1020
12 Cms_Controller->render_partial('shop:product') /modules/cms/classes/cms_controller.php(383) : eval()'d code 42
11 eval(()) /modules/cms/classes/cms_controller.php 383
10 Cms_Controller->evalWithException('?><? $this->render_partial('snippet:usp_primary'); ?> <div class="product-page"> <? /** * Display error if we don't have the object or * is out of stock, 'Track Inventory' and 'Hide if Out Of Stock' is enabled * */ if(!$product || !isset($product)): ?> <div class="container"> <div class="row"> <div class="col-xs-24 text-center"> <div class="error not-found"> <h2>Product not found</h2> <p>It seems the requested product was not found.</p> <p>Don't worry we have <a href="<?=root_url('/store/'); ?>" title="continue shopping"><strong>loads more for you to see</strong></a></p> </div><!-- /.not-found --> </div><!-- /.col-* --> </div><!-- /.row --> </div><!-- /.container --> <? /** * Display unavilable message if the product is unavailable * */ elseif($product_unavailable): ?> <div class="container"> <div class="row"> <div class="col-xs-24"> <div class="error unavailable"> <h2>Product unavailble</h2> <p>This product is currently unavailable, it maye be restocked at a later date.</p> <p>Don't worry we have <a href="<?=root_url('/store/'); ?>" title="continue shopping"><strong>loads more for you to see</strong></a></p> </div><!-- /.unavailable--> </div><!-- /.col-* --> </div><!-- /.row --> </div><!-- /.container --> <? else: ?> <div id="product-page"> <? $this->render_partial('shop:product'); ?> </div> <? $this->render_partial('shop:product_blogposts', [], [ 'cache'=> true, 'cache_ttl'=> 604800, // Recache every 1 week 'cache_vary_by'=> array('url'), 'cache_versions'=> array('catalog'), ]); ?> <? endif; ?> </div><!-- /.product-page --> <? $this->render_partial('snippet:usp'); ?>', 'CMS page', 'GIO1 Round Head Speedlite Plus Accessory Kit') /modules/cms/classes/cms_controller.php 608
9 Cms_Controller->eval_page_content(()) /modules/cms/classes/cms_controller.php 198
8 Cms_Controller->open(object(Cms_Page), array(1) [0 => 'gio1-round-head-speedlite-plus-accessory-kit']) /controllers/application.php 72
7 Application->On404(()) /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/gio1-round-head-speedlite-plus-accessory-kit') /phproad/system/phproad.php 31
2 include('/var/www/vhosts/essentialphoto.co.uk/httpdocs/phproad/system/phproad.php') /boot.php 117
1 require_once('/var/www/vhosts/essentialphoto.co.uk/httpdocs/boot.php') /index.php 3