morepork Posted June 4, 2014 Share Posted June 4, 2014 Hi there, I am wondering how and where (product.tpl?) to change the way a discount is displayed from: -$20.00 to $20.00 off Link to comment Share on other sites More sharing options...
vekia Posted June 4, 2014 Share Posted June 4, 2014 what theme you use? default one? Link to comment Share on other sites More sharing options...
morepork Posted June 4, 2014 Author Share Posted June 4, 2014 I am using the Transformer responsive theme... Link to comment Share on other sites More sharing options...
vekia Posted June 5, 2014 Share Posted June 5, 2014 okay, so can you show cotnents of product.tpl file ? it's due to the fact that you use non default template and it's hard to tell what you have to change Link to comment Share on other sites More sharing options...
morepork Posted June 5, 2014 Author Share Posted June 5, 2014 Oh, I see. Here it is: product.tpl {* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {include file="$tpl_dir./errors.tpl"} {if $errors|@count == 0} {if !isset($priceDisplayPrecision)} {assign var='priceDisplayPrecision' value=2} {/if} {if !$priceDisplay || $priceDisplay == 2} {assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, $priceDisplayPrecision)} {assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)} {elseif $priceDisplay == 1} {assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)} {assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)} {/if} {assign var='enable_google_rich_snippets' value=(!isset($sttheme.google_rich_snippets) || (isset($sttheme.google_rich_snippets) && $sttheme.google_rich_snippets))} <div class="primary_block row" {if $enable_google_rich_snippets}itemscope itemtype="http://schema.org/Product"{/if}> {if isset($adminActionDisplay) && $adminActionDisplay} <div id="admin-action"> <p>{l s='This product is not visible to your customers.'} <input type="hidden" id="admin-action-product-id" value="{$product->id}" /> <input type="submit" value="{l s='Publish'}" name="publish_button" class="exclusive" /> <input type="submit" value="{l s='Back'}" name="lnk_view" class="exclusive" /> </p> <p id="admin-action-result"></p> </div> {/if} {if isset($confirmation) && $confirmation} <p class="confirmation"> {$confirmation} </p> {/if} <!-- left infos--> <div class="pb-left-column col-xs-12 {if isset($sttheme.product_big_image) && $sttheme.product_big_image} col-sm-6 col-md-6 {else} col-sm-4 col-md-4 {/if}"> <!-- product img--> <div id="image-block" class="clearfix"> {capture name="sale_reduction"} {if $product->new}<span class="new"><i>{l s='New'}</i></span>{/if} {if $product->show_price AND !$PS_CATALOG_MODE AND $product->on_sale}<span class="on_sale"><i>{l s='Sale'}</i></span>{/if} {if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE AND $product->specificPrice} {if $product->specificPrice.reduction_type == 'percentage'} {hook h='displayAnywhere' function='getSaleStyleCircle' percentage_amount='percentage' reduction=$product->specificPrice.reduction price_without_reduction=$productPriceWithoutReduction price=$productPrice mod='stthemeeditor' caller='stthemeeditor'} {elseif $product->specificPrice.reduction_type == 'amount' AND $product->specificPrice.reduction|intval !=0} {hook h='displayAnywhere' function='getSaleStyleCircle' percentage_amount='amount' reduction=$product->specificPrice.reduction price_without_reduction=$productPriceWithoutReduction price=$productPrice mod='stthemeeditor' caller='stthemeeditor'} {else} <span class="sale_percentage_sticker img-circle" style="display:none;"></span> {/if} {/if} {/capture} {if $have_image} <span id="view_full_size"> {if $jqZoomEnabled && $have_image && !$content_only} <a class="jqzoom" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" rel="gal1" href="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox_default')|escape:'html':'UTF-8'}" {if $enable_google_rich_snippets}itemprop="url"{/if}> <img id="jqzoom_bigpic" {if $enable_google_rich_snippets}itemprop="image"{/if} src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html':'UTF-8'}" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}"/> </a> {$smarty.capture.sale_reduction} {else} <img id="bigpic" {if $enable_google_rich_snippets}itemprop="image"{/if} src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html':'UTF-8'}" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" width="{$largeSize.width}" height="{$largeSize.height}"/> {if !$content_only} <a href="javascript:;" class="span_link no-print icon_wrap visible-md visible-lg" title="{l s='View larger'}"><i class="icon-plus icon-large"></i></a> {/if} {$smarty.capture.sale_reduction} {/if} </span> {else} <span id="view_full_size"> <img {if $enable_google_rich_snippets}itemprop="image"{/if} src="{$img_prod_dir}{$lang_iso}-default-large_default.jpg" id="bigpic" alt="" title="{$product->name|escape:'html':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}"/> {if !$content_only} <a href="javascript:;" class="span_link no-print icon_wrap visible-md visible-lg" title="{l s='View larger'}"><i class="icon-plus icon-large"></i></a> {/if} {$smarty.capture.sale_reduction} </span> {/if} </div> <!-- end image-block --> {if isset($images) && count($images) > 0} <!-- thumbnails --> <div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}"> {if isset($images) && count($images)}<span class="view_scroll_spacer"><a id="view_scroll_left" class="" title="{l s='Other views'} {l s='Previous'}" href="javascript:{ldelim}{rdelim}"><i class="icon-left-open-1"></i></a></span>{/if} <div id="thumbs_list"> <ul id="thumbs_list_frame"> {if isset($images)} {foreach from=$images item=image name=thumbnails} {assign var=imageIds value="`$product->id`-`$image.id_image`"} {if !empty($image.legend)} {assign var=imageTitle value=$image.legend|escape:'html':'UTF-8'} {else} {assign var=imageTitle value=$product->name|escape:'html':'UTF-8'} {/if}<li id="thumbnail_{$image.id_image}"{if $smarty.foreach.thumbnails.last} class="last"{/if}> <a {if $jqZoomEnabled && $have_image && !$content_only} href="javascript:void(0);" rel="{literal}[spam-filter]/literal}gallery: 'gal1', smallimage: '{$link->getImageLink($product->link_rewrite, $imageIds, 'large_default')|escape:'html':'UTF-8'}',largeimage: '{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox_default')|escape:'html':'UTF-8'}'{literal[spam-filter]{/literal}" {else} href="{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox_default')|escape:'html':'UTF-8'}" data-fancybox-group="other-views" class="fancybox{if $image.id_image == $cover.id_image} shown{/if}" {/if} title="{$imageTitle}"> <img class="img-responsive" id="thumb_{$image.id_image}" src="{$link->getImageLink($product->link_rewrite, $imageIds, 'medium_default')|escape:'html':'UTF-8'}" alt="{$imageTitle}" title="{$imageTitle}" height="{$mediumSize.height}" width="{$mediumSize.width}" {if $enable_google_rich_snippets}itemprop="image"{/if} /> </a> </li>{/foreach} {/if} </ul> </div> <!-- end thumbs_list --> {if isset($images) && count($images)}<a id="view_scroll_right" title="{l s='Other views'} {l s='Next'}" href="javascript:{ldelim}{rdelim}"><i class="icon-right-open-1"></i></a>{/if} </div> <!-- end views-block --> <!-- end thumbnails --> {/if} {if isset($images) && count($images) > 1} <p class="resetimg clear no-print"> <span id="wrapResetImages" style="display: none;"> <a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}" name="resetImages"> <i class="icon-picture-2"></i> {l s='Display all pictures'} </a> </span> </p> {/if} {if !$content_only} <!-- usefull links--> <ul id="usefull_link_block" class="clearfix no-print"> {if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if} {if $have_image && !$jqZoomEnabled}{/if} </ul> {/if} </div> <!-- end pb-left-column --> <!-- end left infos--> <!-- center infos --> <div class="pb-center-column col-xs-12 {if isset($sttheme.product_big_image) && $sttheme.product_big_image} col-sm-6 col-md-6 {else} {if isset($HOOK_PRODUCT_SECONDARY_COLUMN) && !$content_only} col-sm-5 col-md-5 {else} col-sm-8 col-md-8 {/if} {/if}"> <h1 {if $enable_google_rich_snippets}itemprop="name"{/if} class="heading">{$product->name|escape:'html':'UTF-8'}</h1> {if $show_brand_logo==2 && $product_manufacturer->id_manufacturer} <a id="product_manufacturer_logo" {if $enable_google_rich_snippets} itemprop="brand" itemscope="" itemtype="http://schema.org/Organization" {/if} href="{$link->getmanufacturerLink($product_manufacturer->id_manufacturer, $product_manufacturer->link_rewrite)}" title="{l s='All products of this manufacturer'}"> {if $enable_google_rich_snippets}<meta itemprop="name" content="{$product_manufacturer->name}" />{/if} <img {if $enable_google_rich_snippets} itemprop="image" {/if} alt="{$product_manufacturer->name}" src="{$img_manu_dir}{$product_manufacturer->id_manufacturer}-manufacturer_default.jpg" /> </a> {/if} {if $product->description_short || $packItems|@count > 0} <div id="short_description_block"> {if $product->description_short} <div id="short_description_content" class="rte align_justify" {if $enable_google_rich_snippets}itemprop="description"{/if}>{$product->description_short}</div> {/if} {if $product->description} <p class="buttons_bottom_block"> <a href="javascript:{ldelim}{rdelim}" class="button"> {l s='More details'} </a> </p> {/if} <!--{if $packItems|@count > 0} <div class="short_description_pack"> <h3>{l s='Pack content'}</h3> {foreach from=$packItems item=packItem} <div class="pack_content"> {$packItem.pack_quantity} x <a href="{$link->getProductLink($packItem.id_product, $packItem.link_rewrite, $packItem.category)|escape:'html':'UTF-8'}">{$packItem.name|escape:'html':'UTF-8'}</a> <p>{$packItem.description_short}</p> </div> {/foreach} </div> {/if}--> </div> <!-- end short_description_block --> {/if} <div class="product_info_box"> {if $product->online_only} <span class="online_only sm_lable">{l s='Online only'}</span> {/if} {if $product->specificPrice && $product->specificPrice.reduction && $productPriceWithoutReduction > $productPrice} <span class="discount sm_lable">{l s='Reduced price!'}</span> {/if} <div class="product_info_wrap" id="product_reference"{if empty($product->reference) || !$product->reference} style="display: none;"{/if}> <span class="editable sm_lable" {if $enable_google_rich_snippets}itemprop="sku"{/if}>{if !isset($groups)}{$product->reference|escape:'html':'UTF-8'}{/if}</span> </div> {capture name=condition} {if $product->condition == 'new'}{l s='New'} {elseif $product->condition == 'used'}{l s='Used'} {elseif $product->condition == 'refurbished'}{l s='Refurbished'} {/if} {/capture} <div class="product_info_wrap" id="product_condition"{if !$product->condition} style="display: none;"{/if}> <span class="editable sm_lable" {if $enable_google_rich_snippets}itemprop="condition"{/if}>{$smarty.capture.condition}</span> </div> </div> {if ($product->show_price && !isset($restricted_country_mode)) || isset($groups) || $product->reference || (isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS)} <!-- add to cart form--> <form id="buy_block"{if $PS_CATALOG_MODE && !isset($groups) && $product->quantity > 0} class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html':'UTF-8'}" method="post"> <!-- hidden datas --> <p class="hidden"> <input type="hidden" name="token" value="{$static_token}" /> <input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" /> <input type="hidden" name="add" value="1" /> <input type="hidden" name="id_product_attribute" id="idCombination" value="" /> </p> <div class="box-info-product"> <div class="content_prices clearfix"> {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE} <!-- prices --> <div class="price_box clearfix"> <p class="our_price_display pull-left" {if $enable_google_rich_snippets}itemprop="offers" itemscope itemtype="http://schema.org/Offer"{/if}> {if $enable_google_rich_snippets}{if $product->quantity > 0}<link itemprop="availability" href="http://schema.org/InStock"/>{/if}{/if} {if $priceDisplay >= 0 && $priceDisplay <= 2} <span id="our_price_display" {if $enable_google_rich_snippets}itemprop="price"{/if}>{convertPrice price=$productPrice}</span> {if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label)) && (isset($sttheme.display_tax_label) && $sttheme.display_tax_label)} <span class="product_tax_label">{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}</span> {/if} {if $enable_google_rich_snippets}<meta itemprop="priceCurrency" content="{$currency->iso_code}" />{/if} {/if} </p> <p id="old_price" class="{if (!$product->specificPrice || !$product->specificPrice.reduction) && $group_reduction == 0} hidden{/if} pull-left"> {if $priceDisplay >= 0 && $priceDisplay <= 2} <span id="old_price_display">{if $productPriceWithoutReduction > $productPrice}{convertPrice price=$productPriceWithoutReduction}{/if}</span> <!-- {if $tax_enabled && $display_tax_label == 1}{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if} --> {/if} </p> <p id="reduction_percent" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if} class="pull-left"> <span id="reduction_percent_display" class="sale_percentage"> {if $product->specificPrice && $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if} </span> </p> <p id="reduction_amount" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|floatval ==0} style="display:none"{/if} class="pull-left"> <span id="reduction_amount_display" class="sale_percentage"> {if $product->specificPrice && $product->specificPrice.reduction_type == 'amount' && $product->specificPrice.reduction|intval !=0} -{convertPrice price=$productPriceWithoutReduction-$productPrice|floatval} {/if} </span> </p> {if $priceDisplay == 2} <span id="pretaxe_price" class="pull-left"> <span id="pretaxe_price_display">{convertPrice price=$product->getPrice(false, $smarty.const.NULL)}</span> {l s='tax excl.'} </span> {/if} </div> <!-- end prices --> {if $packItems|@count && $productPrice < $product->getNoPackPrice()} <div class="pack_price mar_t4">{l s='Instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></div> {/if} {if $product->ecotax != 0} <div class="price-ecotax mar_t4">{l s='Include'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='For green tax'} {if $product->specificPrice && $product->specificPrice.reduction} <br />{l s='(not impacted by the discount)'} {/if} </div> {/if} {if !empty($product->unity) && $product->unit_price_ratio > 0.000000} {math equation="pprice / punit_price" pprice=$productPrice punit_price=$product->unit_price_ratio assign=unit_price} <div class="unit-price mar_t4"><span id="unit_price_display">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'html':'UTF-8'}</div> {/if} {/if} {*close if for show price*} </div> <!-- end content_prices --> <div class="product_attributes clearfix"> {if isset($groups)} <!-- attributes --> <div id="attributes"> <div class="clearfix"></div> {foreach from=$groups key=id_attribute_group item=group} {if $group.attributes|@count} <fieldset class="attribute_fieldset"> <label class="attribute_label" {if $group.group_type != 'color' && $group.group_type != 'radio'}for="group_{$id_attribute_group|intval}"{/if}>{$group.name|escape:'html':'UTF-8'} :</label> {assign var="groupName" value="group_$id_attribute_group"} <div class="attribute_list"> {if ($group.group_type == 'select')} <select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="form-control attribute_select no-print"> {foreach from=$group.attributes key=id_attribute item=group_attribute} <option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'html':'UTF-8'}">{$group_attribute|escape:'html':'UTF-8'}</option> {/foreach} </select> {elseif ($group.group_type == 'color')} <ul id="color_to_pick_list" class="clearfix"> {assign var="default_colorpicker" value=""} {foreach from=$group.attributes key=id_attribute item=group_attribute} <li{if $group.default == $id_attribute} class="selected"{/if}> <a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}" id="color_{$id_attribute|intval}" name="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}" style="background: {$colors.$id_attribute.value|escape:'html':'UTF-8'};" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}"> {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')} <img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="20" height="20" /> {/if} </a> </li> {if ($group.default == $id_attribute)} {$default_colorpicker = $id_attribute} {/if} {/foreach} </ul> <input type="hidden" class="color_pick_hidden" name="{$groupName|escape:'html':'UTF-8'}" value="{$default_colorpicker|intval}" /> {elseif ($group.group_type == 'radio')} <ul> {foreach from=$group.attributes key=id_attribute item=group_attribute} <li> <input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} /> <span>{$group_attribute|escape:'html':'UTF-8'}</span> </li> {/foreach} </ul> {/if} </div> <!-- end attribute_list --> </fieldset> {/if} {/foreach} </div> <!-- end attributes --> {/if} {if ($display_qties == 1 && !$PS_CATALOG_MODE && $PS_STOCK_MANAGEMENT && $product->available_for_order)} <!-- number of item in stock --> <div id="pQuantityAvailable"{if $product->quantity <= 0} style="display: none;"{/if}> <span id="quantityAvailable">{$product->quantity|intval}</span> <span {if $product->quantity > 1} style="display: none;"{/if} id="quantityAvailableTxt">{l s='Item'}</span> <span {if $product->quantity == 1} style="display: none;"{/if} id="quantityAvailableTxtMultiple">{l s='Items'}</span> </div> {/if} {if $PS_STOCK_MANAGEMENT} <!-- availability --> <div id="availability_statut"{if ($product->quantity <= 0 && !$product->available_later && $allow_oosp) || ($product->quantity > 0 && !$product->available_now) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}> {*<span id="availability_label">{l s='Availability:'}</span>*} <span id="availability_value"{if $product->quantity <= 0} class="warning"{/if}>{if $product->quantity <= 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}</span> </div> <div class="warning_inline mar_t4" id="last_quantities"{if ($product->quantity > $last_qties || $product->quantity <= 0) || $allow_oosp || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none"{/if} >{l s='Warning: Last items in stock!'}</div> {/if} <div id="availability_date"{if ($product->quantity > 0) || !$product->available_for_order || $PS_CATALOG_MODE || !isset($product->available_date) || $product->available_date < $smarty.now|date_format:'%Y-%m-%d'} style="display: none;"{/if}> <span id="availability_date_label">{l s='Availability date:'}</span> <span id="availability_date_value">{dateFormat date=$product->available_date full=false}</span> </div> <!-- Out of stock hook --> <div id="oosHook"{if $product->quantity > 0} style="display: none;"{/if}> {$HOOK_PRODUCT_OOS} </div> </div> <!-- end product_attributes --> <div class="box-cart-bottom"> <!-- quantity wanted --> <div class="qt_cart_box clearfix {if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} hidden {/if} "> {if !$PS_CATALOG_MODE} <p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}> <span class="quantity_input_wrap clearfix"> <a href="#" data-field-qty="qty" class="product_quantity_down">-</a> <input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" /> <a href="#" data-field-qty="qty" class="product_quantity_up">+</a> </span> </p> {/if} <div id="add_to_cart_wrap" class="{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} unvisible {/if}"> <p id="add_to_cart" class="buttons_bottom_block no-print"> <button type="submit" name="Submit" class="btn btn-large btn_primary exclusive"> <span>{l s='Add to cart'}</span> </button> </p> </div> </div> <!-- minimal quantity wanted --> <p id="minimal_quantity_wanted_p"{if $product->minimal_quantity <= 1 || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}> {l s='This product is not sold individually. You must select at least'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b> {l s='quantity for this product.'} </p> {if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if} </div> <!-- end box-cart-bottom --> </div> <!-- end box-info-product --> </form> {/if} {if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if} </div> <!-- end center infos--> <!-- pb-right-column--> {if !$content_only && !(isset($sttheme.product_big_image) && $sttheme.product_big_image)} {if isset($HOOK_PRODUCT_SECONDARY_COLUMN)} <div class="pb-right-column col-xs-12 col-sm-3 col-md-3"> {if $show_brand_logo==1 && $product_manufacturer->id_manufacturer} <a id="product_manufacturer_logo" {if $enable_google_rich_snippets} itemprop="brand" itemscope="" itemtype="http://schema.org/Organization" {/if} href="{$link->getmanufacturerLink($product_manufacturer->id_manufacturer, $product_manufacturer->link_rewrite)}" title="{l s='All products of this manufacturer'}"> {if $enable_google_rich_snippets}<meta itemprop="name" content="{$product_manufacturer->name}" />{/if} <img {if $enable_google_rich_snippets} itemprop="image" {/if} alt="{$product_manufacturer->name}" src="{$img_manu_dir}{$product_manufacturer->id_manufacturer}-manufacturer_default.jpg" /> </a> {/if} {$HOOK_PRODUCT_SECONDARY_COLUMN} </div> {/if} {/if} <!-- end pb-right-column--> </div> <!-- end primary_block --> {if !$content_only} {if (isset($quantity_discounts) && count($quantity_discounts) > 0)} <!-- quantity discount --> <section class="block section"> <h4 class="title_block"><span>{l s='Volume discounts'}</span></h4> <div id="quantityDiscount"> <table class="std table-product-discounts"> <thead> <tr> <th>{l s='Quantity'}</th> <th>{if $display_discount_price}{l s='Price'}{else}{l s='Discount'}{/if}</th> <th>{l s='You Save'}</th> </tr> </thead> <tbody> {foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'} <tr id="quantityDiscount_{$quantity_discount.id_product_attribute}" class="quantityDiscount_{$quantity_discount.id_product_attribute}" data-discount-type="{$quantity_discount.reduction_type}" data-discount="{$quantity_discount.real_value|floatval}" data-discount-quantity="{$quantity_discount.quantity|intval}"> <td> {$quantity_discount.quantity|intval} </td> <td> {if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'} {if $display_discount_price} {convertPrice price=$productPrice-$quantity_discount.real_value|floatval} {else} {convertPrice price=$quantity_discount.real_value|floatval} {/if} {else} {if $display_discount_price} {convertPrice price = $productPrice-($productPrice*$quantity_discount.reduction)|floatval} {else} {$quantity_discount.real_value|floatval}% {/if} {/if} </td> <td> <span>{l s='Up to'}</span> {if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'} {$discountPrice=$productPrice-$quantity_discount.real_value|floatval} {else} {$discountPrice=$productPrice-($productPrice*$quantity_discount.reduction)|floatval} {/if} {$discountPrice=$discountPrice*$quantity_discount.quantity} {$qtyProductPrice = $productPrice*$quantity_discount.quantity} {convertPrice price=$qtyProductPrice-$discountPrice} </td> </tr> {/foreach} </tbody> </table> </div> </section> {/if} {if isset($packItems) && $packItems|@count > 0} <section id="blockpack" class="block section"> <h4 class="title_block"><span>{l s='Pack content'}</span></h4> {include file="$tpl_dir./product-list.tpl" products=$packItems for_f='packitems'} </section> {/if} <!--end HOOK_PRODUCT_TAB --> {if isset($accessories) && $accessories} <!--Accessories --> <section id="accessories_block" class="products_block block section"> <h4 class="title_block"><span>{l s='Accessories'}</span></h4> <div id="accessories-itemslider" class="flexslider"> <div class="nav_top_right"></div> <div class="sliderwrap products_slider"> <ul class="slides"> {foreach from=$accessories item=accessory name=accessories_list} {if ($accessory.allow_oosp || $accessory.quantity_all_versions > 0 || $accessory.quantity > 0) && $accessory.available_for_order && !isset($restricted_country_mode)} {assign var='accessoryLink' value=$link->getProductLink($accessory.id_product, $accessory.link_rewrite, $accessory.category)} <li class="ajax_block_product product_accessories_description {if $smarty.foreach.accessories_list.first} first_item{elseif $smarty.foreach.accessories_list.last} last_item{else} item{/if}"> <div class="pro_first_box"> <a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{$accessory.legend|escape:'html':'UTF-8'}" class="product-image product_image"> <img class="img-responsive front-image" src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'home_default')|escape:'html':'UTF-8'}" alt="{$accessory.legend|escape:'html':'UTF-8'}" width="{$homeSize.width}" height="{$homeSize.height}" /> {hook h='displayAnywhere' function='getHoverImage' id_product=$accessory.id_product product_link_rewrite=$accessory.link_rewrite home_default_height=$homeSize.height home_default_width=$homeSize.width product_name=$accessory.name mod='sthoverimage' caller='sthoverimage'}{$smarty.capture.new_on_sale} </a> {capture name="pro_a_cart"} {if !$PS_CATALOG_MODE && ($accessory.allow_oosp || $accessory.quantity > 0)} <a class="exclusive ajax_add_to_cart_button" href="{$link->getPageLink('cart', true, NULL, "qty=1&id_product={$accessory.id_product|intval}&token={$static_token}&add")|escape:'html':'UTF-8'}" data-id-product="{$accessory.id_product|intval}" title="{l s='Add to cart'}" rel="nofollow"><div><i class="icon-basket icon-0x icon-mar-lr2"></i><span>{l s='Add to cart'}</span></div></a> {else} <a class="button exclusive view_button" href="{$accessoryLink|escape:'html':'UTF-8'}" title="{l s='View'}" rel="nofollow"><div><i class="icon-eye-2 icon-0x icon-mar-lr2"></i><span>{l s='View'}</span></div></a> {/if} {/capture} {capture name="pro_a_compare"} {if isset($comparator_max_item) && $comparator_max_item} <a class="add_to_compare" href="{$accessoryLink|escape:'html':'UTF-8'}" data-id-product="{$accessory.id_product}" rel="nofollow" data-product-cover="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'thumb_default')|escape:'html':'UTF-8'}" data-product-name="{$accessory.name|escape:'html':'UTF-8'}"><div><i class="icon-ajust icon-0x icon-mar-lr2"></i><span>{l s='Add to compare'}</span></div></a> {/if} {/capture} {capture name="pro_a_wishlist"} {hook h='displayAnywhere' function="getAddToWhishlistButton" id_product=$accessory.id_product show_icon=0 mod='stthemeeditor' caller='stthemeeditor'} {/capture} {assign var="fly_i" value=1} {if trim($smarty.capture.pro_a_cart)}{assign var="fly_i" value=$fly_i+1}{/if} {if trim($smarty.capture.pro_a_compare)}{assign var="fly_i" value=$fly_i+1}{/if} {if trim($smarty.capture.pro_a_wishlist)}{assign var="fly_i" value=$fly_i+1}{/if} <div class="hover_fly {if isset($sttheme.flyout_buttons) && $sttheme.flyout_buttons}hover_fly_static{/if} fly_{$fly_i} clearfix"> {$smarty.capture.pro_a_cart} {if isset($quick_view) && $quick_view} <a class="quick-view" href="{$accessoryLink|escape:'html':'UTF-8'}" rel="{$accessoryLink|escape:'html':'UTF-8'}"><div><i class="icon-search-1 icon-0x icon-mar-lr2"></i><span>{l s='Quick view'}</span></div></a> {else} <a href="{$accessoryLink|escape:'html':'UTF-8'}" class="pro_more_info" rel="nofollow" title="{l s='More info'}"><div><i class="icon-link icon-0x icon-mar-lr2"></i><span>{l s='More info'}</span></div></a> {/if} {$smarty.capture.pro_a_compare} {$smarty.capture.pro_a_wishlist} </div> </div> <div class="pro_second_box"> {if isset($sttheme.length_of_product_name) && $sttheme.length_of_product_name==1} {assign var="length_of_product_name" value=70} {else} {assign var="length_of_product_name" value=35} {/if} <p class="s_title_block {if isset($sttheme.length_of_product_name) && $sttheme.length_of_product_name} nohidden {/if}"><a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{$accessory.name|escape:'html':'UTF-8'}">{if isset($sttheme.length_of_product_name) && $sttheme.length_of_product_name==2}{$accessory.name|escape:'html':'UTF-8'}{else}{$accessory.name|truncate:$length_of_product_name:'...'|escape:'html':'UTF-8'}{/if}</a></p> {if $accessory.show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE} <div class="price_container"> <span class="price"> {if $priceDisplay != 1} {displayWtPrice p=$accessory.price}{else}{displayWtPrice p=$accessory.price_tax_exc} {/if} </span> </div> {/if} </div> </li> {/if} {/foreach} </ul> </div> </div> {hook h='displayAnywhere' function="getCarouselJavascript" identify='accessories' mod='stthemeeditor' caller='stthemeeditor'} </section> <!--end Accessories --> {/if} <!-- description & features --> {if (isset($product) && $product->description) || (isset($features) && $features) || (isset($HOOK_PRODUCT_TAB) && $HOOK_PRODUCT_TAB) || (isset($attachments) && $attachments) || isset($product) && $product->customizable} <div id="more_info_block" class="mar_b2"> <ul id="more_info_tabs" class="idTabs common_tabs li_fl clearfix hidden-xs"> {if isset($product) && $product->description}<li><a id="more_info_tab_more_info" href="#idTab1">{l s='More info'}</a></li>{/if} {if isset($sttheme.display_pro_tags) && $sttheme.display_pro_tags==1 && isset($product->tags[$cookie->id_lang]) && count($product->tags[$cookie->id_lang])}<li><a id="more_info_tab_tags" href="#idTab211">{l s='Tags'}</a></li>{/if} {if isset($features) && $features}<li><a id="more_info_tab_data_sheet" href="#idTab2">{l s='Data sheet'}</a></li>{/if} {if isset($attachments) && $attachments}<li><a id="more_info_tab_attachments" href="#idTab9">{l s='Download'}</a></li>{/if} {if isset($product) && $product->customizable}<li><a href="#idTab10">{l s='Product customization'}</a></li>{/if} {$HOOK_PRODUCT_TAB} </ul> <div id="more_info_sheets" class="sheets align_justify"> {if isset($product) && $product->description} <div id="idTab1" class="rte product_accordion"> <!-- full description --> <a href="javascript:;" class="opener visible-xs"> </a> <div class="product_accordion_title visible-xs"> {l s='More info'} </div> <div class="pa_content"> <div class="rte">{$product->description}</div> {if isset($sttheme.display_pro_tags) && $sttheme.display_pro_tags==2 && isset($product->tags[$cookie->id_lang]) && count($product->tags[$cookie->id_lang])} <div id="tag_box_bottom_of_desc" class="clearfix"> <span>{l s='Tags:'}</span> {foreach $product->tags[$cookie->id_lang] as $tag} <a href="{$link->getPageLink('search', true, NULL, "tag={$tag|urlencode}")|escape:'html'}" title="{l s='More about'} {$tag|escape:html:'UTF-8'}">{$tag|escape:html:'UTF-8'}</a>{if !$tag@last}{/if} {/foreach} </div> {/if} </div> </div> {/if} {if isset($sttheme.display_pro_tags) && $sttheme.display_pro_tags==1 && isset($product->tags[$cookie->id_lang]) && count($product->tags[$cookie->id_lang])} <div id="idTab211" class="product_accordion block_hidden_only_for_screen"> <!-- product's features --> <a href="javascript:;" class="opener visible-xs"> </a> <div class="product_accordion_title visible-xs"> {l s='Tags'} </div> <div class="pa_content"> {foreach $product->tags[$cookie->id_lang] as $tag} <a href="{$link->getPageLink('search', true, NULL, "tag={$tag|urlencode}")|escape:'html'}" title="{l s='More about'} {$tag|escape:html:'UTF-8'}">{$tag|escape:html:'UTF-8'}</a>{if !$tag@last}, {/if} {/foreach} </div> </div> {/if} {if isset($features) && $features} <div id="idTab2" class="product_accordion block_hidden_only_for_screen"> <!-- product's features --> <a href="javascript:;" class="opener visible-xs"> </a> <div class="product_accordion_title visible-xs"> {l s='Data sheet'} </div> <div class="pa_content"> <table class="table-data-sheet"> {foreach from=$features item=feature} <tr class="{cycle values="odd,even"}"> {if isset($feature.value)} <td>{$feature.name|escape:'html':'UTF-8'}</td> <td>{$feature.value|escape:'html':'UTF-8'}</td> {/if} </tr> {/foreach} </table> </div> </div> {/if} {if isset($attachments) && $attachments} <div id="idTab9" class="product_accordion block_hidden_only_for_screen"> <a href="javascript:;" class="opener visible-xs"> </a> <div class="product_accordion_title visible-xs"> {l s='Download'} </div> <div class="pa_content"> {foreach from=$attachments item=attachment name=attachements} {if $smarty.foreach.attachements.iteration %3 == 1}<div class="row">{/if} <div class="col-lg-4"> <h4><a href="{$link->getPageLink('attachment', true, NULL, "id_attachment={$attachment.id_attachment}")|escape:'html':'UTF-8'}">{$attachment.name|escape:'html':'UTF-8'}</a></h4> <p class="text-muted">{$attachment.description|escape:'html':'UTF-8'}</p> <a class="btn btn-default btn-block" href="{$link->getPageLink('attachment', true, NULL, "id_attachment={$attachment.id_attachment}")|escape:'html':'UTF-8'}"> <i class="icon-download"></i> {l s="Download"} ({Tools::formatBytes($attachment.file_size, 2)}) </a> <hr> </div> {if $smarty.foreach.attachements.iteration %3 == 0 || $smarty.foreach.attachements.last}</div>{/if} {/foreach} </div> </div> {/if} {if isset($product) && $product->customizable} <!--Customization --> <div id="idTab10" class="customization_block product_accordion block_hidden_only_for_screen"> <a href="javascript:;" class="opener visible-xs"> </a> <div class="product_accordion_title visible-xs"> {l s='Product customization'} </div> <div class="pa_content"> <!-- Customizable products --> <form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm" class="clearfix"> <p class="infoCustomizable"> {l s='After saving your customized product, remember to add it to your cart.'} {if $product->uploadable_files} <br /> {l s='Allowed file formats are: GIF, JPG, PNG'}{/if} </p> {if $product->uploadable_files|intval} <div class="customizableProductsFile"> <h5 class="product-heading-h5">{l s='Pictures'}</h5> <ul id="uploadable_files" class="clearfix"> {counter start=0 assign='customizationField'} {foreach from=$customizationFields item='field' name='customizationFields'} {if $field.type == 0} <li class="customizationUploadLine{if $field.required} required{/if}">{assign var='key' value='pictures_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if isset($pictures.$key)} <div class="customizationUploadBrowse"> <img src="{$pic_dir}{$pictures.$key}_small" alt="" /> <a href="{$link->getProductDeletePictureLink($product, $field.id_customization_field)|escape:'html':'UTF-8'}" title="{l s='Delete'}" > <img src="{$img_dir}icon/delete.gif" alt="{l s='Delete'}" class="customization_delete_icon" width="11" height="13" /> </a> </div> {/if} <div class="customizationUploadBrowse form-group"> <label class="customizationUploadBrowseDescription"> {if !empty($field.name)} {$field.name} {else} {l s='Please select an image file from your computer'} {/if} {if $field.required}<sup>*</sup>{/if} </label> <input type="file" name="file{$field.id_customization_field}" id="img{$customizationField}" class="form-control customization_block_input {if isset($pictures.$key)}filled{/if}" /> </div> </li> {counter} {/if} {/foreach} </ul> </div> {/if} {if $product->text_fields|intval} <div class="customizableProductsText"> <h5 class="product-heading-h5">{l s='Text'}</h5> <ul id="text_fields"> {counter start=0 assign='customizationField'} {foreach from=$customizationFields item='field' name='customizationFields'} {if $field.type == 1} <li class="customizationUploadLine{if $field.required} required{/if}"> <label for ="textField{$customizationField}"> {assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if !empty($field.name)} {$field.name} {/if} {if $field.required}<sup>*</sup>{/if} </label> <textarea name="textField{$field.id_customization_field}" class="form-control customization_block_input" id="textField{$customizationField}" rows="3" cols="20">{strip} {if isset($textFields.$key)} {$textFields.$key|stripslashes} {/if} {/strip}</textarea> </li> {counter} {/if} {/foreach} </ul> </div> {/if} <p id="customizedDatas"> <input type="hidden" name="quantityBackup" id="quantityBackup" value="" /> <input type="hidden" name="submitCustomizedDatas" value="1" /> <button class="button btn btn-default button button-small" name="saveCustomization"> <span>{l s='Save'}</span> </button> <span id="ajax-loader" class="unvisible"> <img src="{$img_ps_dir}loader.gif" alt="loader" /> </span> </p> </form> <p class="clear required"><sup>*</sup> {l s='required fields'}</p> </div> </div> <!--end Customization --> {/if} {if isset($HOOK_PRODUCT_TAB_CONTENT) && $HOOK_PRODUCT_TAB_CONTENT}{$HOOK_PRODUCT_TAB_CONTENT}{/if} </div> </div> {/if} {if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if} {/if} {strip} {if isset($smarty.get.ad) && $smarty.get.ad} {addJsDefL name=ad}{$base_dir|cat:$smarty.get.ad|escape:'html':'UTF-8'}{/addJsDefL} {/if} {if isset($smarty.get.adtoken) && $smarty.get.adtoken} {addJsDefL name=adtoken}{$smarty.get.adtoken|escape:'html':'UTF-8'}{/addJsDefL} {/if} {addJsDef allowBuyWhenOutOfStock=$allow_oosp|boolval} {addJsDef availableNowValue=$product->available_now|escape:'quotes':'UTF-8'} {addJsDef availableLaterValue=$product->available_later|escape:'quotes':'UTF-8'} {addJsDef attribute_anchor_separator=$attribute_anchor_separator|addslashes} {addJsDef attributesCombinations=$attributesCombinations} {addJsDef currencySign=$currencySign|html_entity_decode:2:"UTF-8"} {addJsDef currencyRate=$currencyRate|floatval} {addJsDef currencyFormat=$currencyFormat|intval} {addJsDef currencyBlank=$currencyBlank|intval} {addJsDef currentDate=$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} {if isset($combinations) && $combinations} {addJsDef combinations=$combinations} {addJsDef combinationsFromController=$combinations} {addJsDef displayDiscountPrice=$display_discount_price} {addJsDefL name='upToTxt'}{l s='Up to' js=1}{/addJsDefL} {/if} {if isset($combinationImages) && $combinationImages} {addJsDef combinationImages=$combinationImages} {/if} {addJsDef customizationFields=$customizationFields} {addJsDef default_eco_tax=$product->ecotax|floatval} {addJsDef displayPrice=$priceDisplay|intval} {addJsDef ecotaxTax_rate=$ecotaxTax_rate|floatval} {addJsDef group_reduction=$group_reduction} {if isset($cover.id_image_only)} {addJsDef idDefaultImage=$cover.id_image_only|intval} {else} {addJsDef idDefaultImage=0} {/if} {addJsDef img_ps_dir=$img_ps_dir} {addJsDef img_prod_dir=$img_prod_dir} {addJsDef id_product=$product->id|intval} {addJsDef jqZoomEnabled=$jqZoomEnabled|boolval} {addJsDef maxQuantityToAllowDisplayOfLastQuantityMessage=$last_qties|intval} {addJsDef minimalQuantity=$product->minimal_quantity|intval} {addJsDef noTaxForThisProduct=$no_tax|boolval} {addJsDef oosHookJsCodeFunctions=Array()} {addJsDef productHasAttributes=isset($groups)|boolval} {addJsDef productPriceTaxExcluded=($product->getPriceWithoutReduct(true)|default:'null' - $product->ecotax)|floatval} {addJsDef productBasePriceTaxExcluded=($product->base_price - $product->ecotax)|floatval} {addJsDef productReference=$product->reference|escape:'html':'UTF-8'} {addJsDef productAvailableForOrder=$product->available_for_order|boolval} {addJsDef productPriceWithoutReduction=$productPriceWithoutReduction|floatval} {addJsDef productPrice=$productPrice|floatval} {addJsDef productUnitPriceRatio=$product->unit_price_ratio|floatval} {addJsDef productShowPrice=(!$PS_CATALOG_MODE && $product->show_price)|boolval} {addJsDef PS_CATALOG_MODE=$PS_CATALOG_MODE} {if $product->specificPrice && $product->specificPrice|@count} {addJsDef product_specific_price=$product->specificPrice} {else} {addJsDef product_specific_price=array()} {/if} {if $display_qties == 1 && $product->quantity} {addJsDef quantityAvailable=$product->quantity} {else} {addJsDef quantityAvailable=0} {/if} {addJsDef quantitiesDisplayAllowed=$display_qties|boolval} {if $product->specificPrice && $product->specificPrice.reduction && $product->specificPrice.reduction_type == 'percentage'} {addJsDef reduction_percent=$product->specificPrice.reduction*100|floatval} {else} {addJsDef reduction_percent=0} {/if} {if $product->specificPrice && $product->specificPrice.reduction && $product->specificPrice.reduction_type == 'amount'} {addJsDef reduction_price=$product->specificPrice.reduction|floatval} {else} {addJsDef reduction_price=0} {/if} {if $product->specificPrice && $product->specificPrice.price} {addJsDef specific_price=$product->specificPrice.price|floatval} {else} {addJsDef specific_price=0} {/if} {addJsDef specific_currency=($product->specificPrice && $product->specificPrice.id_currency)|boolval} {* TODO: remove if always false *} {addJsDef stock_management=$stock_management|intval} {addJsDef taxRate=$tax_rate|floatval} {addJsDefL name=doesntExist}{l s='This combination does not exist for this product. Please select another combination.' js=1}{/addJsDefL} {addJsDefL name=doesntExistNoMore}{l s='This product is no longer in stock' js=1}{/addJsDefL} {addJsDefL name=doesntExistNoMoreBut}{l s='with those attributes but is available with others.' js=1}{/addJsDefL} {addJsDefL name=fieldRequired}{l s='Please fill in all the required fields before saving your customization.' js=1}{/addJsDefL} {addJsDefL name=uploading_in_progress}{l s='Uploading in progress, please be patient.' js=1}{/addJsDefL} {addJsDefL name=reduction_save}{l s='Save' js=1}{/addJsDefL} {addJsDefL name=reduction_off}{l s='Off' js=1}{/addJsDefL} {/strip} {/if} It also shows up in the shopping cart summary (I am using regular, not express checkout): shopping-cart.tpl {* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {capture name=path}{l s='Your shopping cart'}{/capture} <h1 id="cart_title" class="page-heading">{l s='Shopping-cart summary'}</h1> {if isset($account_created)} <p class="alert alert-success"> {l s='Your account has been created.'} </p> {/if} {assign var='current_step' value='summary'} {include file="$tpl_dir./order-steps.tpl"} {include file="$tpl_dir./errors.tpl"} {if isset($empty)} <p class="alert alert-warning">{l s='Your shopping cart is empty.'}</p> {hook h='displayAnywhere' location="11" mod='steasycontent' caller='steasycontent'} {elseif $PS_CATALOG_MODE} <p class="alert alert-warning">{l s='This store has not accepted your new order.'}</p> {else} <p style="display:none" id="emptyCartWarning" class="alert alert-warning">{l s='Your shopping cart is empty.'}</p> {if isset($lastProductAdded) AND $lastProductAdded} <div class="cart_last_product"> <div class="cart_last_product_header"> <div class="left">{l s='Last product added'}</div> </div> <a class="cart_last_product_img" href="{$link->getProductLink($lastProductAdded.id_product, $lastProductAdded.link_rewrite, $lastProductAdded.category, null, null, $lastProductAdded.id_shop)|escape:'html':'UTF-8'}"> <img src="{$link->getImageLink($lastProductAdded.link_rewrite, $lastProductAdded.id_image, 'small_default')|escape:'html':'UTF-8'}" alt="{$lastProductAdded.name|escape:'html':'UTF-8'}"/> </a> <div class="cart_last_product_content"> <p class="product-name"> <a href="{$link->getProductLink($lastProductAdded.id_product, $lastProductAdded.link_rewrite, $lastProductAdded.category, null, null, null, $lastProductAdded.id_product_attribute)|escape:'html':'UTF-8'}"> {$lastProductAdded.name|escape:'html':'UTF-8'} </a> </p> {if isset($lastProductAdded.attributes) && $lastProductAdded.attributes} <small> <a href="{$link->getProductLink($lastProductAdded.id_product, $lastProductAdded.link_rewrite, $lastProductAdded.category, null, null, null, $lastProductAdded.id_product_attribute)|escape:'html':'UTF-8'}"> {$lastProductAdded.attributes|escape:'html':'UTF-8'} </a> </small> {/if} </div> </div> {/if} {assign var='total_discounts_num' value="{if $total_discounts != 0}1{else}0{/if}"} {assign var='use_show_taxes' value="{if $use_taxes && $show_taxes}2{else}0{/if}"} {assign var='total_wrapping_taxes_num' value="{if $total_wrapping != 0}1{else}0{/if}"} {if !isset($empty) && !$PS_CATALOG_MODE} <p class="color_666">{l s='Your shopping cart contains:'} <span id="summary_products_quantity">{$productNumber} {if $productNumber == 1}{l s='product'}{else}{l s='products'}{/if}</span> </p> {/if} <div id="order-detail-content" class="table_block"> <table id="cart_summary" class="table table-bordered resp_table"> <thead> <tr> <th class="cart_product first_item">{l s='Product'}</th> <th class="cart_description item">{l s='Description'}</th> {if $PS_STOCK_MANAGEMENT} <th class="cart_avail item">{l s='Avail.'}</th> {/if} <th class="cart_unit item">{l s='Unit price'}</th> <th class="cart_quantity item">{l s='Qty'}</th> <th class="cart_total item">{l s='Total'}</th> <th class="cart_delete last_item"> </th> </tr> </thead> <tbody> {assign var='odd' value=0} {assign var='have_non_virtual_products' value=false} {foreach $products as $product} {if $product.is_virtual == 0} {assign var='have_non_virtual_products' value=true} {/if} {assign var='productId' value=$product.id_product} {assign var='productAttributeId' value=$product.id_product_attribute} {assign var='quantityDisplayed' value=0} {assign var='odd' value=($odd+1)%2} {assign var='ignoreProductLast' value=isset($customizedDatas.$productId.$productAttributeId) || count($gift_products)} {* Display the product line *} {include file="$tpl_dir./shopping-cart-product-line.tpl" productLast=$product@last productFirst=$product@first} {* Then the customized datas ones*} {if isset($customizedDatas.$productId.$productAttributeId)} {foreach $customizedDatas.$productId.$productAttributeId[$product.id_address_delivery] as $id_customization=>$customization} <tr id="product_{$product.id_product}_{$product.id_product_attribute}_{$id_customization}_{$product.id_address_delivery|intval}" class="product_customization_for_{$product.id_product}_{$product.id_product_attribute}_{$product.id_address_delivery|intval}{if $odd} odd{else} even{/if} customization alternate_item {if $product@last && $customization@last && !count($gift_products)}last_item{/if}"> <td></td> <td colspan="3"> {foreach $customization.datas as $type => $custom_data} {if $type == $CUSTOMIZE_FILE} <div class="customizationUploaded"> <ul class="customizationUploaded"> {foreach $custom_data as $picture} <li><img src="{$pic_dir}{$picture.value}_small" alt="" class="customizationUploaded" /></li> {/foreach} </ul> </div> {elseif $type == $CUSTOMIZE_TEXTFIELD} <ul class="typedText"> {foreach $custom_data as $textField} <li> {if $textField.name} {$textField.name} {else} {l s='Text #'}{$textField@index+1} {/if} : {$textField.value} </li> {/foreach} </ul> {/if} {/foreach} </td> <td class="cart_quantity" colspan="2"> {if isset($cannotModify) AND $cannotModify == 1} <span>{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}</span> {else} <input type="hidden" value="{$customization.quantity}" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{$id_customization}_{$product.id_address_delivery|intval}_hidden"/> <input type="text" value="{$customization.quantity}" class="cart_quantity_input form-control grey" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{$id_customization}_{$product.id_address_delivery|intval}"/> <div class="cart_quantity_button clearfix"> {if $product.minimal_quantity < ($customization.quantity -$quantityDisplayed) OR $product.minimal_quantity <= 1} <a id="cart_quantity_down_{$product.id_product}_{$product.id_product_attribute}_{$id_customization}_{$product.id_address_delivery|intval}" class="cart_quantity_down btn btn-default button-minus" href="{$link->getPageLink('cart', true, NULL, "add=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery}&id_customization={$id_customization}&op=down&token={$token_cart}")|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Subtract'}"> <span><i class="icon-minus"></i></span> </a> {else} <a id="cart_quantity_down_{$product.id_product}_{$product.id_product_attribute}_{$id_customization}" class="cart_quantity_down btn btn-default button-minus disabled" href="#" title="{l s='Subtract'}"> <span><i class="icon-minus"></i></span> </a> {/if} <a id="cart_quantity_up_{$product.id_product}_{$product.id_product_attribute}_{$id_customization}_{$product.id_address_delivery|intval}" class="cart_quantity_up btn btn-default button-plus" href="{$link->getPageLink('cart', true, NULL, "add=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery}&id_customization={$id_customization}&token={$token_cart}")|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Add'}"> <span><i class="icon-plus"></i></span> </a> </div> {/if} </td> <td class="cart_delete"> {if isset($cannotModify) AND $cannotModify == 1} {else} <div> <a id="{$product.id_product}_{$product.id_product_attribute}_{$id_customization}_{$product.id_address_delivery|intval}" class="cart_quantity_delete" href="{$link->getPageLink('cart', true, NULL, "delete=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_customization={$id_customization}&id_address_delivery={$product.id_address_delivery}&token={$token_cart}")|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Delete'}"> <i class="icon-cancel icon-small"></i> </a> </div> {/if} </td> </tr> {assign var='quantityDisplayed' value=$quantityDisplayed+$customization.quantity} {/foreach} {* If it exists also some uncustomized products *} {if $product.quantity-$quantityDisplayed > 0}{include file="$tpl_dir./shopping-cart-product-line.tpl" productLast=$product@last productFirst=$product@first}{/if} {/if} {/foreach} {assign var='last_was_odd' value=$product@iteration%2} {foreach $gift_products as $product} {assign var='productId' value=$product.id_product} {assign var='productAttributeId' value=$product.id_product_attribute} {assign var='quantityDisplayed' value=0} {assign var='odd' value=($product@iteration+$last_was_odd)%2} {assign var='ignoreProductLast' value=isset($customizedDatas.$productId.$productAttributeId)} {assign var='cannotModify' value=1} {* Display the gift product line *} {include file="$tpl_dir./shopping-cart-product-line.tpl" productLast=$product@last productFirst=$product@first} {/foreach} </tbody> {if sizeof($discounts)} <tbody> {foreach $discounts as $discount} <tr class="cart_discount {if $discount@last}last_item{elseif $discount@first}first_item{else}item{/if}" id="cart_discount_{$discount.id_discount}"> <td class="cart_discount_name" colspan="{if $PS_STOCK_MANAGEMENT}3{else}2{/if}">{$discount.name}</td> <td class="cart_discount_price"> <span class="price-discount"> {if !$priceDisplay}{displayPrice price=$discount.value_real*-1}{else}{displayPrice price=$discount.value_tax_exc*-1}{/if} </span> </td> {if $PS_STOCK_MANAGEMENT}<td class="cart_discount_delete">1</td>{/if} <td class="cart_discount_price"> <span class="price-discount price">{if !$priceDisplay}{displayPrice price=$discount.value_real*-1}{else}{displayPrice price=$discount.value_tax_exc*-1}{/if}</span> </td> <td class="price_discount_del text-center"> {if strlen($discount.code)} <a href="{if $opc}{$link->getPageLink('order-opc', true)}{else}{$link->getPageLink('order', true)}{/if}?deleteDiscount={$discount.id_discount}" class="price_discount_delete" title="{l s='Delete'}"> <i class="icon-cancel icon-small"></i> </a> {/if} </td> </tr> {/foreach} </tbody> {/if} </table> <div class="clearfix"> {if $voucherAllowed} <div id="cart_voucher" class="cart_voucher mar_b1"> {if isset($errors_discount) && $errors_discount} <ul class="alert alert-danger"> {foreach $errors_discount as $k=>$error} <li>{$error|escape:'html':'UTF-8'}</li> {/foreach} </ul> {/if} <form action="{if $opc}{$link->getPageLink('order-opc', true)}{else}{$link->getPageLink('order', true)}{/if}" method="post" id="voucher"> <fieldset> <p class="cart_voucher_title">{l s='Vouchers'}</p> <input type="text" class="discount_name form-control" id="discount_name" name="discount_name" value="{if isset($discount_name) && $discount_name}{$discount_name}{/if}" /> <input type="hidden" name="submitDiscount" /> <button type="submit" name="submitAddDiscount" class="btn btn-default">{l s='OK'}</button> </fieldset> </form> {if $displayVouchers} <p id="title" class="title-offers">{l s='Take advantage of our exclusive offers:'}</p> <div id="display_cart_vouchers"> {foreach $displayVouchers as $voucher} {if $voucher.code != ''}<span class="voucher_name" data-code="{$voucher.code|escape:'html':'UTF-8'}">{$voucher.code|escape:'html':'UTF-8'}</span> - {/if}{$voucher.name}<br /> {/foreach} </div> {/if} </div> {/if} <table id="cart_summary_total" class="table table-bordered"> <tbody> {if $use_taxes} {if $priceDisplay} <tr class="cart_total_price"> <td class="color_666">{if $display_tax_label}{l s='Total products (tax excl.)'}{else}{l s='Total products'}{/if}</td> <td class="price" id="total_product">{displayPrice price=$total_products}</td> </tr> {else} <tr class="cart_total_price"> <td class="color_666">{if $display_tax_label}{l s='Total products (tax incl.)'}{else}{l s='Total products'}{/if}</td> <td class="price" id="total_product">{displayPrice price=$total_products_wt}</td> </tr> {/if} {else} <tr class="cart_total_price"> <td class="color_666">{l s='Total products'}</td> <td class="price" id="total_product">{displayPrice price=$total_products}</td> </tr> {/if} <tr{if $total_wrapping == 0} style="display: none;"{/if}> <td class="color_666"> {if $use_taxes} {if $display_tax_label}{l s='Total gift wrapping (tax incl.):'}{else}{l s='Total gift-wrapping cost:'}{/if} {else} {l s='Total gift-wrapping cost:'} {/if} </td> <td class="price-discount price" id="total_wrapping"> {if $use_taxes} {if $priceDisplay} {displayPrice price=$total_wrapping_tax_exc} {else} {displayPrice price=$total_wrapping} {/if} {else} {displayPrice price=$total_wrapping_tax_exc} {/if} </td> </tr> {if $total_shipping_tax_exc <= 0 && !isset($virtualCart)} <tr class="cart_total_delivery" style="{if !isset($carrier->id) || is_null($carrier->id)}display:none;{/if}"> <td class="color_666">{l s='Shipping'}</td> <td class="price" id="total_shipping">{l s='Free Shipping!'}</td> </tr> {else} {if $use_taxes && $total_shipping_tax_exc != $total_shipping} {if $priceDisplay} <tr class="cart_total_delivery" {if $total_shipping_tax_exc <= 0} style="display:none;"{/if}> <td class="color_666">{if $display_tax_label}{l s='Total shipping (tax excl.)'}{else}{l s='Total shipping'}{/if}</td> <td class="price" id="total_shipping">{displayPrice price=$total_shipping_tax_exc}</td> </tr> {else} <tr class="cart_total_delivery"{if $total_shipping <= 0} style="display:none;"{/if}> <td class="color_666">{if $display_tax_label}{l s='Total shipping (tax incl.)'}{else}{l s='Total shipping'}{/if}</td> <td class="price" id="total_shipping" >{displayPrice price=$total_shipping}</td> </tr> {/if} {else} <tr class="cart_total_delivery"{if $total_shipping_tax_exc <= 0} style="display:none;"{/if}> <td class="color_666">{l s='Total shipping'}</td> <td class="price" id="total_shipping" >{displayPrice price=$total_shipping_tax_exc}</td> </tr> {/if} {/if} <tr class="cart_total_voucher" {if $total_discounts == 0}style="display:none"{/if}> <td class="color_666"> {if $display_tax_label} {if $use_taxes && $priceDisplay == 0} {l s='Total vouchers (tax incl.):'} {else} {l s='Total vouchers (tax excl.)'} {/if} {else} {l s='Total vouchers'} {/if} </td> <td class="price-discount price" id="total_discount"> {if $use_taxes && $priceDisplay == 0} {assign var='total_discounts_negative' value=$total_discounts * -1} {else} {assign var='total_discounts_negative' value=$total_discounts_tax_exc * -1} {/if} {displayPrice price=$total_discounts_negative} </td> </tr> {if $use_taxes && $show_taxes} <tr class="cart_total_price"> <td class="color_666">{l s='Total (tax excl.)'}</td> <td class="price" id="total_price_without_tax">{displayPrice price=$total_price_without_tax}</td> </tr> <tr class="cart_total_tax"> <td class="color_666">{l s='Total tax'}</td> <td class="price" id="total_tax">{displayPrice price=$total_tax}</td> </tr> {/if} <tr class="cart_total_price"> <td class="total_price_container color_666"> <span>{l s='Total'}</span> </td> {if $use_taxes} <td class="price" id="total_price_container"> <span id="total_price">{displayPrice price=$total_price}</span> </td> {else} <td class="price" id="total_price_container"> <span id="total_price">{displayPrice price=$total_price_without_tax}</span> </td> {/if} </tr> </tbody> </table> </div> </div> <!-- end order-detail-content --> {if $show_option_allow_separate_package} <p> <input type="checkbox" name="allow_seperated_package" id="allow_seperated_package" {if $cart->allow_seperated_package}checked="checked"{/if} autocomplete="off"/> <label for="allow_seperated_package">{l s='Send available products first'}</label> </p> {/if} {* Define the style if it doesn't exist in the PrestaShop version*} {* Will be deleted for 1.5 version and more *} {if !isset($addresses_style)} {$addresses_style.company = 'address_company'} {$addresses_style.vat_number = 'address_company'} {$addresses_style.firstname = 'address_name'} {$addresses_style.lastname = 'address_name'} {$addresses_style.address1 = 'address_address1'} {$addresses_style.address2 = 'address_address2'} {$addresses_style.city = 'address_city'} {$addresses_style.country = 'address_country'} {$addresses_style.phone = 'address_phone'} {$addresses_style.phone_mobile = 'address_phone_mobile'} {$addresses_style.alias = 'address_title'} {/if} {if ((!empty($delivery_option) AND !isset($virtualCart)) OR $delivery->id OR $invoice->id) AND !$opc} <div class="order_delivery clearfix row"> {if !isset($formattedAddresses) || (count($formattedAddresses.invoice) == 0 && count($formattedAddresses.delivery) == 0) || (count($formattedAddresses.invoice.formated) == 0 && count($formattedAddresses.delivery.formated) == 0)} {if $delivery->id} <div class="col-xs-12 col-sm-6"{if !$have_non_virtual_products} style="display: none;"{/if}> <ul id="delivery_address" class="address item box"> <li><h3 class="page-subheading">{l s='Delivery address'} <span class="address_alias">({$delivery->alias})</span></h3></li> {if $delivery->company}<li class="address_company">{$delivery->company|escape:'html':'UTF-8'}</li>{/if} <li class="address_name">{$delivery->firstname|escape:'html':'UTF-8'} {$delivery->lastname|escape:'html':'UTF-8'}</li> <li class="address_address1">{$delivery->address1|escape:'html':'UTF-8'}</li> {if $delivery->address2}<li class="address_address2">{$delivery->address2|escape:'html':'UTF-8'}</li>{/if} <li class="address_city">{$delivery->postcode|escape:'html':'UTF-8'} {$delivery->city|escape:'html':'UTF-8'}</li> <li class="address_country">{$delivery->country|escape:'html':'UTF-8'} {if $delivery_state}({$delivery_state|escape:'html':'UTF-8'}){/if}</li> </ul> </div> {/if} {if $invoice->id} <div class="col-xs-12 col-sm-6"> <ul id="invoice_address" class="address alternate_item box"> <li><h3 class="page-subheading">{l s='Invoice address'} <span class="address_alias">({$invoice->alias})</span></h3></li> {if $invoice->company}<li class="address_company">{$invoice->company|escape:'html':'UTF-8'}</li>{/if} <li class="address_name">{$invoice->firstname|escape:'html':'UTF-8'} {$invoice->lastname|escape:'html':'UTF-8'}</li> <li class="address_address1">{$invoice->address1|escape:'html':'UTF-8'}</li> {if $invoice->address2}<li class="address_address2">{$invoice->address2|escape:'html':'UTF-8'}</li>{/if} <li class="address_city">{$invoice->postcode|escape:'html':'UTF-8'} {$invoice->city|escape:'html':'UTF-8'}</li> <li class="address_country">{$invoice->country|escape:'html':'UTF-8'} {if $invoice_state}({$invoice_state|escape:'html':'UTF-8'}){/if}</li> </ul> </div> {/if} {else} {foreach from=$formattedAddresses key=k item=address} <div class="col-xs-12 col-sm-6"{if $k == 'delivery' && !$have_non_virtual_products} style="display: none;"{/if}> <ul class="address {if $address@last}last_item{elseif $address@first}first_item{/if} {if $address@index % 2}alternate_item{else}item{/if} box"> <li> <h3 class="page-subheading"> {if $k eq 'invoice'} {l s='Invoice address'} {elseif $k eq 'delivery' && $delivery->id} {l s='Delivery address'} {/if} {if isset($address.object.alias)} <span class="address_alias">({$address.object.alias})</span> {/if} </h3> </li> {foreach $address.ordered as $pattern} {assign var=addressKey value=" "|explode:$pattern} {assign var=addedli value=false} {foreach from=$addressKey item=key name=foo} {if isset($address.formated[$key]) && !empty($address.formated[$key])} {if (!$addedli)} {$addedli = true} <li><span class="{if isset($addresses_style[$key])}{$addresses_style[$key]}{/if}"> {/if} {$address.formated[$key]|escape:'html':'UTF-8'} {/if} {if ($smarty.foreach.foo.last && $addedli)} </span></li> {/if} {/foreach} {/foreach} </ul> </div> {/foreach} {/if} </div> {/if} <div id="HOOK_SHOPPING_CART">{$HOOK_SHOPPING_CART}</div> <p class="cart_navigation clearfix"> {if !$opc} <a href="{if $back}{$link->getPageLink('order', true, NULL, 'step=1&back={$back}')|escape:'html':'UTF-8'}{else}{$link->getPageLink('order', true, NULL, 'step=1')|escape:'html':'UTF-8'}{/if}" class="pull-right btn btn-default standard-checkout" title="{l s='Proceed to checkout'}"> {l s='Proceed to checkout'} </a> {/if} <a href="{if (isset($smarty.server.HTTP_REFERER) && strstr($smarty.server.HTTP_REFERER, 'order.php')) || isset($smarty.server.HTTP_REFERER) && strstr($smarty.server.HTTP_REFERER, 'order-opc') || !isset($smarty.server.HTTP_REFERER)}{$link->getPageLink('index')}{else}{$smarty.server.HTTP_REFERER|escape:'html':'UTF-8'|secureReferrer}{/if}" class="pull-left btn btn-default" title="{l s='Continue shopping'}"> {l s='Continue shopping'} </a> </p> {if !empty($HOOK_SHOPPING_CART_EXTRA)} <div class="cart_navigation_extra"> <div id="HOOK_SHOPPING_CART_EXTRA">{$HOOK_SHOPPING_CART_EXTRA}</div> </div> {/if} {strip} {addJsDef currencySign=$currencySign|html_entity_decode:2:"UTF-8"} {addJsDef currencyRate=$currencyRate|floatval} {addJsDef currencyFormat=$currencyFormat|intval} {addJsDef currencyBlank=$currencyBlank|intval} {addJsDef deliveryAddress=$cart->id_address_delivery|intval} {addJsDefL name=txtProduct}{l s='product' js=1}{/addJsDefL} {addJsDefL name=txtProducts}{l s='products' js=1}{/addJsDefL} {/strip} {/if} I'm not sure if this is also needed (shopping-cart-product-line.tpl): {* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} <tr id="product_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="cart_item{if isset($productLast) && $productLast && (!isset($ignoreProductLast) || !$ignoreProductLast)} last_item{/if}{if isset($productFirst) && $productFirst} first_item{/if}{if isset($customizedDatas.$productId.$productAttributeId) AND $quantityDisplayed == 0} alternate_item{/if} address_{$product.id_address_delivery|intval} {if $odd}odd{else}even{/if}"> <td class="cart_product" data-title="{l s='Product'}"> <div class="mobile_table_content"> <a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'small_default')|escape:'html':'UTF-8'}" alt="{$product.name|escape:'html':'UTF-8'}" {if isset($smallSize)}width="{$smallSize.width}" height="{$smallSize.height}" {/if} /></a> </div> </td> <td class="cart_description" data-title="{l s='Description'}"> <div class="mobile_table_content"> <p class="product-name s_title_block"><a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">{$product.name|escape:'html':'UTF-8'}</a></p> {if $product.reference}<div class="cart_ref color_666">{l s='SKU'} : {$product.reference|escape:'html':'UTF-8'}</div>{/if} {if isset($product.attributes) && $product.attributes}<div class="color_666"><a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">{$product.attributes|escape:'html':'UTF-8'}</a></div>{/if} </div> </td> {if $PS_STOCK_MANAGEMENT} <td class="cart_avail" data-title="{l s='Avail'}"> <div class="mobile_table_content"> <span class="{if $product.quantity_available <= 0}label label-warning{else}{/if}">{if $product.quantity_available <= 0}{if $product.allow_oosp}{$product.available_later}{else}{l s='Out of stock'}{/if}{else}{if isset($product.available_now) && $product.available_now}{$product.available_now}{else}{l s='In Stock'}{/if}{/if}</span> </div> </td> {/if} <td class="cart_unit" data-title="{l s='Unit price'}"> <div class="mobile_table_content"> <span class="price" id="product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}"> {if !empty($product.gift)} <span class="gift-icon">{l s='Gift!'}</span> {else} {if !$priceDisplay} <span class="price{if isset($product.is_discounted) && $product.is_discounted} special-price{/if}">{convertPrice price=$product.price_wt}</span> {else} <span class="price{if isset($product.is_discounted) && $product.is_discounted} special-price{/if}">{convertPrice price=$product.price}</span> {/if} {if isset($product.is_discounted) && $product.is_discounted} <span class="price-percent-reduction small"> {assign var='priceReductonPercent' value=(($product.price_without_specific_price - $product.price_wt)/$product.price_without_specific_price) * 100 * -1} {$priceReductonPercent|round|string_format:"%d"}% </span> <span class="old-price">{convertPrice price=$product.price_without_specific_price}</span> {/if} {/if} </span> </div> </td> <td class="cart_quantity text-center" data-title="{l s='Qty'}"> <div class="mobile_table_content"> {if isset($cannotModify) AND $cannotModify == 1} <span> {if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)} {$product.customizationQuantityTotal} {else} {$product.cart_quantity-$quantityDisplayed} {/if} </span> {else} {if isset($customizedDatas.$productId.$productAttributeId) AND $quantityDisplayed == 0} <span id="cart_quantity_custom_{$product.id_product}_{$product.id_product_attribute}_{$product.id_address_delivery|intval}" >{$product.customizationQuantityTotal}</span> {/if} {if !isset($customizedDatas.$productId.$productAttributeId) OR $quantityDisplayed > 0} <input type="hidden" value="{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}_hidden" /> <div class="cart_quantity_button clearfix"> {if $product.minimal_quantity < ($product.cart_quantity-$quantityDisplayed) OR $product.minimal_quantity <= 1} <a rel="nofollow" class="cart_quantity_down" id="cart_quantity_down_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" href="{$link->getPageLink('cart', true, NULL, "add=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery|intval}&op=down&token={$token_cart}")|escape:'html':'UTF-8'}" title="{l s='Subtract'}">-</a> {else} <a class="cart_quantity_down disabled" href="#" id="cart_quantity_down_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" title="{l s='You must purchase a minimum of %d of this product.' sprintf=$product.minimal_quantity}">-</a> {/if} <input size="2" type="text" autocomplete="off" class="cart_quantity_input form-control grey" value="{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" /> <a rel="nofollow" class="cart_quantity_up" id="cart_quantity_up_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" href="{$link->getPageLink('cart', true, NULL, "add=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery|intval}&token={$token_cart}")|escape:'html':'UTF-8'}" title="{l s='Add'}">+</a> </div> {/if} {/if} </div> </td> <td class="cart_total" data-title="{l s='Total'}"> <div class="mobile_table_content"> <span class="price" id="total_product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}"> {if !empty($product.gift)} <span class="gift-icon">{l s='Gift!'}</span> {else} {if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)} {if !$priceDisplay}{displayPrice price=$product.total_customization_wt}{else}{displayPrice price=$product.total_customization}{/if} {else} {if !$priceDisplay}{displayPrice price=$product.total_wt}{else}{displayPrice price=$product.total}{/if} {/if} {/if} </span> </div> </td> {if !isset($noDeleteButton) || !$noDeleteButton} <td class="cart_delete text-center" data-title="Delete"> <div class="mobile_table_content"> {if (!isset($customizedDatas.$productId.$productAttributeId) OR $quantityDisplayed > 0) && empty($product.gift)} <div> <a rel="nofollow" title="{l s='Delete'}" class="cart_quantity_delete" id="{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" href="{$link->getPageLink('cart', true, NULL, "delete=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery|intval}&token={$token_cart}")|escape:'html':'UTF-8'}"><i class="icon-cancel icon-small"></i></a> </div> {else} {/if} </div> </td> {/if} </tr> Link to comment Share on other sites More sharing options...
morepork Posted June 9, 2014 Author Share Posted June 9, 2014 Hiya, Can anyone offer advice on this please? Link to comment Share on other sites More sharing options...
PSfever.com Posted June 9, 2014 Share Posted June 9, 2014 In your product.tpl change this code <p id="reduction_percent" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if} class="pull-left"> <span id="reduction_percent_display" class="sale_percentage"> {if $product->specificPrice && $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if} </span> </p> <p id="reduction_amount" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|floatval ==0} style="display:none"{/if} class="pull-left"> <span id="reduction_amount_display" class="sale_percentage"> {if $product->specificPrice && $product->specificPrice.reduction_type == 'amount' && $product->specificPrice.reduction|intval !=0} -{convertPrice price=$productPriceWithoutReduction-$productPrice|floatval} {/if} </span> </p> to this <p id="reduction_percent" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if} class="pull-left"> <span id="reduction_percent_display" class="sale_percentage"> {if $product->specificPrice && $product->specificPrice.reduction_type == 'percentage'}{$product->specificPrice.reduction*100}%{/if} </span> </p> <p id="reduction_amount" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|floatval ==0} style="display:none"{/if} class="pull-left"> <span id="reduction_amount_display" class="sale_percentage"> {if $product->specificPrice && $product->specificPrice.reduction_type == 'amount' && $product->specificPrice.reduction|intval !=0} {convertPrice price=$productPriceWithoutReduction-$productPrice|floatval} {/if} </span> </p> About the shopping cart - I don't see it anywhere in the code, could you give us the URL of your store? Link to comment Share on other sites More sharing options...
morepork Posted June 9, 2014 Author Share Posted June 9, 2014 Thanks I tried your first suggestion, but it had no effect. By looking at the css styles I think have tracked down which two files need editing, but I'm not quite sure how to change.Currently in the product and quickview our store expresses a price that is discounted thus:$125 $155 -$30.00I would like this to read:$125 $155 $30.00 offI think the change needs to be made in product.js (it relates to reduction_amount_display) /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ //global variables var selectedCombination = []; var globalQuantity = 0; var colors = []; $(document).ready(function(){ if (typeof customizationFields !== 'undefined' && customizationFields) { var customizationFieldsBk = customizationFields; customizationFields = []; var j = 0; for (var i = 0; i < customizationFieldsBk.length; ++i) { var key = 'pictures_' + parseInt(id_product) + '_' + parseInt(customizationFieldsBk[i]['id_customization_field']); customizationFields[i] = []; customizationFields[i][0] = (parseInt(customizationFieldsBk[i]['type']) == 0) ? 'img' + i : 'textField' + j++; customizationFields[i][1] = (parseInt(customizationFieldsBk[i]['type']) == 0 && customizationFieldsBk[i][key]) ? 2 : parseInt(customizationFieldsBk[i]['required']); } } if (typeof combinationImages !== 'undefined' && combinationImages) { combinationImagesJS = []; combinationImagesJS[0] = []; var k = 0; for (var i in combinationImages) { combinationImagesJS[i] = []; for (var j in combinationImages[i]) { var id_image = parseInt(combinationImages[i][j]['id_image']); if (id_image) { combinationImagesJS[0][k++] = id_image; combinationImagesJS[i][j] = []; combinationImagesJS[i][j] = id_image; } } } if (typeof combinationImagesJS[0] !== 'undefined' && combinationImagesJS[0]) { var array_values = []; for (var key in arrayUnique(combinationImagesJS[0])) array_values.push(combinationImagesJS[0][key]); combinationImagesJS[0] = array_values; } combinationImages = combinationImagesJS; } if (typeof combinations !== 'undefined' && combinations) { combinationsJS = []; var k = 0; for (var i in combinations) { globalQuantity += combinations[i]['quantity']; combinationsJS[k] = []; combinationsJS[k]['idCombination'] = parseInt(i); combinationsJS[k]['idsAttributes'] = combinations[i]['attributes']; combinationsJS[k]['quantity'] = combinations[i]['quantity']; combinationsJS[k]['price'] = combinations[i]['price']; combinationsJS[k]['ecotax'] = combinations[i]['ecotax']; combinationsJS[k]['image'] = parseInt(combinations[i]['id_image']); combinationsJS[k]['reference'] = combinations[i]['reference']; combinationsJS[k]['unit_price'] = combinations[i]['unit_impact']; combinationsJS[k]['minimal_quantity'] = parseInt(combinations[i]['minimal_quantity']); combinationsJS[k]['available_date'] = []; combinationsJS[k]['available_date']['date'] = combinations[i]['available_date']; combinationsJS[k]['available_date']['date_formatted'] = combinations[i]['date_formatted']; combinationsJS[k]['specific_price'] = []; combinationsJS[k]['specific_price']['reduction_percent'] = (combinations[i]['specific_price'] && combinations[i]['specific_price']['reduction'] && combinations[i]['specific_price']['reduction_type'] == 'percentage') ? combinations[i]['specific_price']['reduction'] * 100 : 0; combinationsJS[k]['specific_price']['reduction_price'] = (combinations[i]['specific_price'] && combinations[i]['specific_price']['reduction'] && combinations[i]['specific_price']['reduction_type'] == 'amount') ? combinations[i]['specific_price']['reduction'] : 0; combinationsJS[k]['price'] = (combinations[i]['specific_price'] && combinations[i]['specific_price']['price'] && parseInt(combinations[i]['specific_price']['price']) != -1) ? combinations[i]['specific_price']['price'] : combinations[i]['price']; combinationsJS[k]['reduction_type'] = (combinations[i]['specific_price'] && combinations[i]['specific_price']['reduction_type']) ? combinations[i]['specific_price']['reduction_type'] : ''; combinationsJS[k]['id_product_attribute'] = (combinations[i]['specific_price'] && combinations[i]['specific_price']['id_product_attribute']) ? combinations[i]['specific_price']['id_product_attribute'] : 0; k++; } combinations = combinationsJS; } //init the serialScroll for thumbs $('#thumbs_list').serialScroll({ items:'li:visible', prev:'#view_scroll_left', next:'#view_scroll_right', axis:'x', offset:0, start:0, stop:true, onBefore:serialScrollFixLock, duration:700, step: 1, lazy: true, lock: false, force:false, cycle:false }); $('#thumbs_list').trigger('goto', 1);// SerialScroll Bug on goto 0 ? $('#thumbs_list').trigger('goto', 0); //hover 'other views' images management $('#views_block li a').hover( function(){displayImage($(this));}, function(){} ); //set jqZoom parameters if needed if (typeof(jqZoomEnabled) != 'undefined' && jqZoomEnabled) { var jqzoom_ins = $('.jqzoom').jqzoom({ zoomType: (typeof(zoom_type)!='undefined' && (zoom_type=='standard' || zoom_type=='innerzoom')) ? zoom_type : 'standard', //innerzoom/standard/reverse/drag zoomWidth: 458, //zooming div default width(default width value is 200) zoomHeight: 458, //zooming div default width(default height value is 200) xOffset: 21, //zooming div default offset(default offset value is 10) yOffset: 0, title: false }); // $(window).resize(function() { // }); } //add a link on the span 'view full size' and on the big image $(document).on('click', '#view_full_size, #image-block', function(e){ $('#views_block .shown').click(); }); //catch the click on the "more infos" button at the top of the page $(document).on('click', '#short_description_block .button', function(e){ $('#more_info_tab_more_info').click(); $.scrollTo( '#more_info_tabs', 1200 ); }); // Hide the customization submit button and display some message $(document).on('click', '#customizedDatas input', function(e){ $('#customizedDatas input').hide(); $('#ajax-loader').fadeIn(); $('#customizedDatas').append(uploading_in_progress); }); original_url = window.location + ''; first_url_check = true; var url_found = checkUrl(); initLocationChange(); //init the price in relation of the selected attributes if (typeof productHasAttributes != 'undefined' && productHasAttributes && !url_found) findCombination(true); else if (typeof productHasAttributes != 'undefined' && !productHasAttributes && !url_found) refreshProductImages(0); $(document).on('click', 'a[name=resetImages]', function(e){ e.preventDefault(); refreshProductImages(0); }); $(document).on('click', '.color_pick', function(e){ e.preventDefault(); colorPickerClick($(this)); getProductAttribute(); }); $(document).on('change', '.attribute_select', function(e){ e.preventDefault(); findCombination(); getProductAttribute(); }); $(document).on('click', '.attribute_radio', function(e){ e.preventDefault(); findCombination(); getProductAttribute(); }); $(document).on('click', 'button[name=saveCustomization]', function(e){ saveCustomization(); }); if (contentOnly == false) { if(!!$.prototype.fancybox) $('.fancybox').fancybox({ 'hideOnContentClick': true, 'openEffect' : 'elastic', 'closeEffect' : 'elastic', 'beforeLoad' : function(){ if(st_responsive && $(window).width()<=768) return false; } }); } else { $(document).on('click', '.fancybox', function(e){ e.preventDefault(); }); $(document).on('click', '#image-block', function(e){ e.preventDefault(); var productUrl= window.document.location.href + ''; var data = productUrl.replace('content_only=1', ''); window.parent.document.location.href = data; }); if (typeof ajax_allowed != 'undefined' && !ajax_allowed) $('#buy_block').attr('target', '_top'); } // The button to increment the product value $(document).on('click', '.product_quantity_up', function(e){ e.preventDefault(); fieldName = $(this).data('field-qty'); var currentVal = parseInt($('input[name='+fieldName+']').val()); if (quantityAvailable > 0) { quantityAvailableT = quantityAvailable; } else { quantityAvailableT = 100000000; } if (!isNaN(currentVal) && currentVal < quantityAvailableT) { $('input[name='+fieldName+']').val(currentVal + 1).trigger('keyup'); } else { $('input[name='+fieldName+']').val(quantityAvailableT); } }); // The button to decrement the product value $(document).on('click', '.product_quantity_down', function(e){ e.preventDefault(); fieldName = $(this).data('field-qty'); var currentVal = parseInt($('input[name='+fieldName+']').val()); if (!isNaN(currentVal) && currentVal > 1) { $('input[name='+fieldName+']').val(currentVal - 1).trigger('keyup'); } else { $('input[name='+fieldName+']').val(1); } }); if (typeof minimalQuantity != 'undefined' && minimalQuantity) { checkMinimalQuantity(); $(document).on('keyup', 'input[name=qty]', function(e){ checkMinimalQuantity(minimalQuantity); }); } if (typeof ad !== 'undefined' && ad && typeof adtoken !== 'undefined' && adtoken) { $(document).on('click', 'input[name=publish_button]', function(e){ e.preventDefault(); submitPublishProduct(ad, 0, adtoken); }); $(document).on('click', 'input[name=lnk_view]', function(e){ e.preventDefault(); submitPublishProduct(ad, 1, adtoken); }); } }); $(window).resize(function() { $('#thumbs_list').trigger('goto', 1); $('#thumbs_list').trigger('goto', 0); serialScrollFixLock('', '', '', '', 0); }); function arrayUnique(a) { return a.reduce(function(p, c){ if (p.indexOf(c) < 0) p.push(c); return p; }, []); }; //check if a function exists function function_exists(function_name) { if (typeof function_name == 'string') return (typeof window[function_name] == 'function'); return (function_name instanceof Function); } //execute oosHook js code function oosHookJsCode() { for (var i = 0; i < oosHookJsCodeFunctions.length; i++) { if (function_exists(oosHookJsCodeFunctions[i])) setTimeout(oosHookJsCodeFunctions[i] + '()', 0); } } //add a combination of attributes in the global JS sytem function addCombination(idCombination, arrayOfIdAttributes, quantity, price, ecotax, id_image, reference, unit_price, minimal_quantity, available_date, combination_specific_price) { globalQuantity += quantity; var combination = []; combination['idCombination'] = idCombination; combination['quantity'] = quantity; combination['idsAttributes'] = arrayOfIdAttributes; combination['price'] = price; combination['ecotax'] = ecotax; combination['image'] = id_image; combination['reference'] = reference; combination['unit_price'] = unit_price; combination['minimal_quantity'] = minimal_quantity; combination['available_date'] = []; combination['available_date'] = available_date; combination['specific_price'] = []; combination['specific_price'] = combination_specific_price; combinations.push(combination); } // search the combinations' case of attributes and update displaying of availability, prices, ecotax, and image function findCombination(firstTime) { $('#minimal_quantity_wanted_p').fadeOut(); if (typeof $('#minimal_quantity_label').text() === 'undefined' || $('#minimal_quantity_label').html() > 1) $('#quantity_wanted').val(1); //create a temporary 'choice' array containing the choices of the customer var choice = []; $('#attributes select, #attributes input[type=hidden], #attributes input[type=radio]:checked').each(function(){ choice.push(parseInt($(this).val())); }); if (typeof combinations == 'undefined' || !combinations) combinations = []; //testing every combination to find the conbination's attributes' case of the user for (var combination = 0; combination < combinations.length; ++combination) { //verify if this combinaison is the same that the user's choice var combinationMatchForm = true; $.each(combinations[combination]['idsAttributes'], function(key, value) { if (!in_array(parseInt(value), choice)) combinationMatchForm = false; }); if (combinationMatchForm) { if (combinations[combination]['minimal_quantity'] > 1) { $('#minimal_quantity_label').html(combinations[combination]['minimal_quantity']); $('#minimal_quantity_wanted_p').fadeIn(); $('#quantity_wanted').val(combinations[combination]['minimal_quantity']); $('#quantity_wanted').bind('keyup', function() {checkMinimalQuantity(combinations[combination]['minimal_quantity']);}); } //combination of the user has been found in our specifications of combinations (created in back office) selectedCombination['unavailable'] = false; selectedCombination['reference'] = combinations[combination]['reference']; $('#idCombination').val(combinations[combination]['idCombination']); //get the data of product with these attributes quantityAvailable = combinations[combination]['quantity']; selectedCombination['price'] = combinations[combination]['price']; selectedCombination['unit_price'] = combinations[combination]['unit_price']; selectedCombination['specific_price'] = combinations[combination]['specific_price']; if (combinations[combination]['ecotax']) selectedCombination['ecotax'] = combinations[combination]['ecotax']; else selectedCombination['ecotax'] = default_eco_tax; //show the large image in relation to the selected combination if (combinations[combination]['image'] && combinations[combination]['image'] != -1) displayImage($('#thumb_' + combinations[combination]['image']).parent()); //show discounts values according to the selected combination if (combinations[combination]['idCombination'] && combinations[combination]['idCombination'] > 0) displayDiscounts(combinations[combination]['idCombination']); //get available_date for combination product selectedCombination['available_date'] = combinations[combination]['available_date']; //update the display updateDisplay(); if(typeof(firstTime) != 'undefined' && firstTime) refreshProductImages(0); else refreshProductImages(combinations[combination]['idCombination']); //leave the function because combination has been found return; } } //this combination doesn't exist (not created in back office) selectedCombination['unavailable'] = true; if (typeof(selectedCombination['available_date']) != 'undefined') delete selectedCombination['available_date']; updateDisplay(); } //update display of the availability of the product AND the prices of the product function updateDisplay() { var productPriceDisplay = productPrice; var productPriceWithoutReductionDisplay = productPriceWithoutReduction; if (!selectedCombination['unavailable'] && quantityAvailable > 0 && productAvailableForOrder == 1) { //show the choice of quantities $('#quantity_wanted_p:hidden').show('slow'); //show the "add to cart" button ONLY if it was hidden $('#add_to_cart:hidden').fadeIn(600); //hide the hook out of stock $('#oosHook').hide(); $('#availability_date').fadeOut(); //availability value management if (availableNowValue != '') { //update the availability statut of the product $('#availability_value').removeClass('warning_inline'); $('#availability_value').text(availableNowValue); if(stock_management == 1) $('#availability_statut:hidden').show(); } else $('#availability_statut:visible').hide(); //'last quantities' message management if (!allowBuyWhenOutOfStock) { if (quantityAvailable <= maxQuantityToAllowDisplayOfLastQuantityMessage) $('#last_quantities').show('slow'); else $('#last_quantities').hide('slow'); } if (quantitiesDisplayAllowed) { $('#pQuantityAvailable:hidden').show('slow'); $('#quantityAvailable').text(quantityAvailable); if (quantityAvailable < 2) // we have 1 or less product in stock and need to show "item" instead of "items" { $('#quantityAvailableTxt').show(); $('#quantityAvailableTxtMultiple').hide(); } else { $('#quantityAvailableTxt').hide(); $('#quantityAvailableTxtMultiple').show(); } } } else { //show the hook out of stock if (productAvailableForOrder == 1) { $('#oosHook').show(); if ($('#oosHook').length > 0 && function_exists('oosHookJsCode')) oosHookJsCode(); } //hide 'last quantities' message if it was previously visible $('#last_quantities:visible').hide('slow'); //hide the quantity of pieces if it was previously visible $('#pQuantityAvailable:visible').hide('slow'); //hide the choice of quantities if (!allowBuyWhenOutOfStock) $('#quantity_wanted_p:visible').hide('slow'); //display that the product is unavailable with theses attributes if (!selectedCombination['unavailable']) $('#availability_value').text(doesntExistNoMore + (globalQuantity > 0 ? ' ' + doesntExistNoMoreBut : '')).addClass('warning_inline'); else { $('#availability_value').text(doesntExist).addClass('warning_inline'); $('#oosHook').hide(); } if(stock_management == 1 && !allowBuyWhenOutOfStock) $('#availability_statut:hidden').show(); if (typeof(selectedCombination['available_date']) != 'undefined' && selectedCombination['available_date']['date'].length != 0) { var available_date = selectedCombination['available_date']['date']; var tab_date = available_date.split('-'); var time_available = new Date(tab_date[0], tab_date[1], tab_date[2]); time_available.setMonth(time_available.getMonth()-1); var now = new Date(); if (now.getTime() < time_available.getTime() && $('#availability_date_value').text() != selectedCombination['available_date']['date_formatted']) { $('#availability_date').fadeOut('normal', function(){ $('#availability_date_value').text(selectedCombination['available_date']['date_formatted']); $(this).fadeIn(); }); } else if(now.getTime() < time_available.getTime()) $('#availability_date').fadeIn(); } else $('#availability_date').fadeOut(); //show the 'add to cart' button ONLY IF it's possible to buy when out of stock AND if it was previously invisible if (allowBuyWhenOutOfStock && !selectedCombination['unavailable'] && productAvailableForOrder == 1) { $('#add_to_cart:hidden').fadeIn(600); if (availableLaterValue != '') { $('#availability_value').text(availableLaterValue); if(stock_management == 1) $('#availability_statut:hidden').show('slow'); } else $('#availability_statut:visible').hide('slow'); } else { $('#add_to_cart:visible').fadeOut(600); if(stock_management == 1) $('#availability_statut:hidden').show('slow'); } if (productAvailableForOrder == 0) $('#availability_statut:visible').hide(); } if (selectedCombination['reference'] || productReference) { if (selectedCombination['reference']) $('#product_reference span').text(selectedCombination['reference']); else if (productReference) $('#product_reference span').text(productReference); $('#product_reference:hidden').show('slow'); } else $('#product_reference:visible').hide('slow'); //update display of the the prices in relation to tax, discount, ecotax, and currency criteria if (!selectedCombination['unavailable'] && productShowPrice == 1) { // retrieve price without group_reduction in order to compute the group reduction after // the specific price discount (done in the JS in order to keep backward compatibility) var tax = (taxRate / 100) + 1; combID = $('#idCombination').val(); comb2 = combinationsFromController[combID]; if (comb2.price != 0) { var taxExclPrice = productPriceTaxExcluded + comb2.price; productPriceWithoutReductionDisplay = productPriceWithoutReductionDisplay + (comb2.price * tax); } else var taxExclPrice = productPriceTaxExcluded; if (!displayPrice && !noTaxForThisProduct) productPriceDisplay = ps_round(taxExclPrice * tax, 2); // Need to be global => no var else productPriceDisplay = ps_round(taxExclPrice, 2); // Need to be global => no var var reduction = 0; if (selectedCombination['specific_price'].reduction_price || selectedCombination['specific_price'].reduction_percent) { reduction_price = (specific_currency ? selectedCombination['specific_price'].reduction_price : selectedCombination['specific_price'].reduction_price * currencyRate); reduction = productPriceDisplay * (parseFloat(selectedCombination['specific_price'].reduction_percent) / 100) + reduction_price; if (reduction_price && (displayPrice || noTaxForThisProduct)) reduction = ps_round(reduction / tax, 6); } else if (product_specific_price && product_specific_price.reduction && !selectedCombination.specific_price) { if (product_specific_price.reduction_type == 'amount') reduction_price = (specific_currency ? product_specific_price.reduction : product_specific_price.reduction * currencyRate); else reduction_price = 0; if (product_specific_price.reduction_type == 'percentage') reduction_percent = productPriceDisplay * parseFloat(product_specific_price.reduction); reduction = reduction_price + reduction_percent; if (reduction_price && (displayPrice || noTaxForThisProduct)) reduction = ps_round(reduction / tax, 6); } if (product_specific_price['reduction_type'] != '' || selectedCombination.specific_price.reduction_percent > 0 || selectedCombination.specific_price.reduction_price > 0) $('#discount_reduced_price,#old_price').show(); else $('#discount_reduced_price,#old_price').hide(); if ((product_specific_price['reduction_type'] == 'percentage' && selectedCombination.specific_price.reduction_percent > 0) || selectedCombination['specific_price'].reduction_type == 'percentage') $('#reduction_percent').show(); else $('#reduction_percent').hide(); if (product_specific_price['price'] || (selectedCombination.specific_price && selectedCombination.specific_price['price'])) $('#not_impacted_by_discount').show(); else $('#not_impacted_by_discount').hide(); productPriceDisplay -= reduction; productPriceDisplay = ps_round(productPriceDisplay * (1 - group_reduction), 2); var ecotaxAmount = !displayPrice ? ps_round(selectedCombination['ecotax'] * (1 + ecotaxTax_rate / 100), 2) : selectedCombination['ecotax']; if (ecotaxAmount != default_eco_tax) productPriceDisplay += ecotaxAmount - default_eco_tax; else productPriceDisplay += ecotaxAmount; if (ecotaxAmount != default_eco_tax) productPriceWithoutReductionDisplay += ecotaxAmount - default_eco_tax; else productPriceWithoutReductionDisplay += ecotaxAmount; var our_price = ''; if (productPriceDisplay > 0) { our_price = formatCurrency(productPriceDisplay, currencyFormat, currencySign, currencyBlank); } else { our_price = formatCurrency(0, currencyFormat, currencySign, currencyBlank); } $('#our_price_display').text(our_price); $('#old_price_display').text(formatCurrency(productPriceWithoutReductionDisplay, currencyFormat, currencySign, currencyBlank)); if (productPriceWithoutReductionDisplay > productPriceDisplay) $('#old_price,#old_price_display,#old_price_display_taxes').show(); else $('#old_price,#old_price_display,#old_price_display_taxes').hide(); // Special feature: "Display product price tax excluded on product page" var productPricePretaxed = ''; if (!noTaxForThisProduct) productPricePretaxed = productPriceDisplay / tax; else productPricePretaxed = productPriceDisplay; $('#pretaxe_price_display').text(formatCurrency(productPricePretaxed, currencyFormat, currencySign, currencyBlank)); // Unit price productUnitPriceRatio = parseFloat(productUnitPriceRatio); if (productUnitPriceRatio > 0 ) { newUnitPrice = (productPriceDisplay / parseFloat(productUnitPriceRatio)) + parseFloat(selectedCombination['unit_price']); $('#unit_price_display').text(formatCurrency(newUnitPrice, currencyFormat, currencySign, currencyBlank)); } // Ecotax ecotaxAmount = !displayPrice ? ps_round(selectedCombination['ecotax'] * (1 + ecotaxTax_rate / 100), 2) : selectedCombination['ecotax']; $('#ecotax_price_display').text(formatCurrency(ecotaxAmount, currencyFormat, currencySign, currencyBlank)); if (selectedCombination.specific_price) { if (selectedCombination.specific_price.reduction_percent > 0) { var st_reduction_percent = parseFloat(selectedCombination['specific_price'].reduction_percent).toFixed(2); $('#reduction_amount').hide(); $('#reduction_percent_display').html('-' + st_reduction_percent + '%'); $('#reduction_percent').show(); $('#image-block .sale_percentage_sticker').html(st_reduction_percent+'%<br />'+reduction_off).show(); } else if (selectedCombination.specific_price.reduction_price > 0) { var st_reduction_price = formatCurrency(reduction_price, currencyFormat, currencySign, currencyBlank); $('#reduction_amount_display').html('-' + st_reduction_price); $('#reduction_percent').hide(); $('#reduction_amount').show(); $('#image-block .sale_percentage_sticker').html(reduction_save+'<br />'+st_reduction_price).show(); } else { $('#reduction_percent').hide(); $('#reduction_amount').hide(); $('#image-block .sale_percentage_sticker').hide(); } } updateDiscountTable(productPriceDisplay); } } //update display of the large image function displayImage(domAAroundImgThumb, no_animation) { if (typeof(no_animation) == 'undefined') no_animation = false; if (domAAroundImgThumb.prop('href')) { var new_src = domAAroundImgThumb.attr('href').replace('thickbox', 'large'); var new_title = domAAroundImgThumb.attr('title'); var new_href = domAAroundImgThumb.attr('href'); if ($('#bigpic').prop('src') != new_src) { $('#bigpic').attr({ 'src' : new_src, 'alt' : new_title, 'title' : new_title }).load(function(){ if (typeof(jqZoomEnabled) != 'undefined' && jqZoomEnabled) $(this).attr('rel', new_href); }); } $('#views_block li a').removeClass('shown'); $(domAAroundImgThumb).addClass('shown'); } } //update display of the discounts table function displayDiscounts(combination) { $('#quantityDiscount tbody tr').each(function(){ if (($(this).attr('id') != 'quantityDiscount_0') && ($(this).attr('id') != 'quantityDiscount_' + combination) && ($(this).attr('id') != 'noQuantityDiscount')) $(this).fadeOut('slow'); }); if ($('#quantityDiscount_' + combination+',.quantityDiscount_' + combination).length != 0 || $('#quantityDiscount_0,.quantityDiscount_0').length != 0) { $('#quantityDiscount').parent().show(); $('#quantityDiscount_' + combination+',.quantityDiscount_' + combination).show(); $('#noQuantityDiscount').hide(); } else { $('#quantityDiscount').parent().hide(); $('#noQuantityDiscount').show(); } } function updateDiscountTable(newPrice) { $('#quantityDiscount tbody tr').each(function(){ var type = $(this).data("discount-type"); var discount = $(this).data("discount"); var quantity = $(this).data("discount-quantity"); if (type == 'percentage') { var discountedPrice = newPrice * (1 - discount/100); var discountUpTo = newPrice * (discount/100) * quantity; } else if (type == 'amount') { var discountedPrice = newPrice - discount; var discountUpTo = discount * quantity; } if (displayDiscountPrice != 0) $(this).children('td').eq(1).text( formatCurrency(discountedPrice, currencyFormat, currencySign, currencyBlank) ); $(this).children('td').eq(2).text(upToTxt + ' ' + formatCurrency(discountUpTo, currencyFormat, currencySign, currencyBlank)); }); } // Serialscroll exclude option bug ? function serialScrollFixLock(event, targeted, scrolled, items, position) { serialScrollNbImages = $('#thumbs_list li:visible').length; serialScrollNbImagesDisplayed = $('#thumbs_list').width()/$('#thumbs_list_frame li').eq(0).width(); var leftArrow = position == 0 ? true : false; var rightArrow = position + serialScrollNbImagesDisplayed >= serialScrollNbImages ? true : false; $('#view_scroll_left').css('cursor', leftArrow ? 'default' : 'pointer').css('display', leftArrow ? 'none' : 'block').fadeTo(0, leftArrow ? 0 : 1); $('#view_scroll_right').css('cursor', rightArrow ? 'default' : 'pointer').fadeTo(0, rightArrow ? 0 : 1).css('display', rightArrow ? 'none' : 'block'); return true; } // Change the current product images regarding the combination selected function refreshProductImages(id_product_attribute) { $('#thumbs_list_frame').scrollTo('li:eq(0)', 700, {axis:'x'}); id_product_attribute = parseInt(id_product_attribute); if (id_product_attribute > 0 && typeof(combinationImages) != 'undefined' && typeof(combinationImages[id_product_attribute]) != 'undefined') { $('#thumbs_list li').hide(); $('#thumbs_list').trigger('goto', 0); for (var i = 0; i < combinationImages[id_product_attribute].length; i++) if (typeof(jqZoomEnabled) != 'undefined' && jqZoomEnabled) $('#thumbnail_' + parseInt(combinationImages[id_product_attribute][i])).show().children('a.shown').trigger('click'); else $('#thumbnail_' + parseInt(combinationImages[id_product_attribute][i])).show(); } else $('#thumbs_list li').show(); if (parseInt($('#thumbs_list_frame >li:visible').length) != parseInt($('#thumbs_list_frame >li').length)) $('#wrapResetImages').stop(true, true).show(); else $('#wrapResetImages').stop(true, true).hide(); var thumb_width = $('#thumbs_list_frame >li').outerWidth() + parseInt($('#thumbs_list_frame >li').css('marginRight')); $('#thumbs_list_frame').width((parseInt((thumb_width) * $('#thumbs_list_frame >li').length)) + 'px'); $('#thumbs_list').trigger('goto', 0); serialScrollFixLock('', '', '', '', 0);// SerialScroll Bug on goto 0 ? } function saveCustomization() { $('#quantityBackup').val($('#quantity_wanted').val()); customAction = $('#customizationForm').attr('action'); $('body select[id^="group_"]').each(function() { customAction = customAction.replace(new RegExp(this.id + '=\\d+'), this.id +'=' + this.value); }); $('#customizationForm').attr('action', customAction); $('#customizationForm').submit(); } function submitPublishProduct(url, redirect, token) { var id_product = $('#admin-action-product-id').val(); $.ajaxSetup({async: false}); $.post(url + '/index.php', { action:'publishProduct', id_product: id_product, status: 1, redirect: redirect, ajax: 1, tab: 'AdminProducts', token: token }, function(data) { if (data.indexOf('error') === -1) document.location.href = data; } ); return true; } function checkMinimalQuantity(minimal_quantity) { if ($('#quantity_wanted').val() < minimal_quantity) { $('#quantity_wanted').css('border', '1px solid red'); $('#minimal_quantity_wanted_p').css('color', 'red'); } else { $('#quantity_wanted').css('border', '1px solid #BDC2C9'); $('#minimal_quantity_wanted_p').css('color', '#374853'); } } function colorPickerClick(elt) { id_attribute = $(elt).attr('id').replace('color_', ''); $(elt).parent().parent().children().removeClass('selected'); $(elt).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1, function(){ $(this).parent().addClass('selected'); }); }); }); $(elt).parent().parent().parent().children('.color_pick_hidden').val(id_attribute); findCombination(false); } function getProductAttribute() { // get product attribute id product_attribute_id = $('#idCombination').val(); product_id = $('#product_page_product_id').val(); // get every attributes values request = ''; //create a temporary 'tab_attributes' array containing the choices of the customer var tab_attributes = []; $('#attributes select, #attributes input[type=hidden], #attributes input[type=radio]:checked').each(function(){ tab_attributes.push($(this).val()); }); // build new request for (var i in attributesCombinations) for (var a in tab_attributes) if (attributesCombinations[i]['id_attribute'] === tab_attributes[a]) request += '/'+attributesCombinations[i]['group'] + attribute_anchor_separator + attributesCombinations[i]['attribute']; request = request.replace(request.substring(0, 1), '#/'); url = window.location + ''; // redirection if (url.indexOf('#') != -1) url = url.substring(0, url.indexOf('#')); // set ipa to the customization form $('#customizationForm').attr('action', $('#customizationForm').attr('action') + request); window.location = url + request; } function initLocationChange(time) { if(!time) time = 500; setInterval(checkUrl, time); } function checkUrl() { if (original_url != window.location || first_url_check) { first_url_check = false; url = window.location + ''; // if we need to load a specific combination if (url.indexOf('#/') != -1) { // get the params to fill from a "normal" url params = url.substring(url.indexOf('#') + 1, url.length); tabParams = params.split('/'); tabValues = []; if (tabParams[0] == '') tabParams.shift(); for (var i in tabParams) tabValues.push(tabParams[i].split(attribute_anchor_separator)); product_id = $('#product_page_product_id').val(); // fill html with values $('.color_pick').removeClass('selected'); $('.color_pick').parent().parent().children().removeClass('selected'); count = 0; for (var z in tabValues) for (var a in attributesCombinations) if (attributesCombinations[a]['group'] === decodeURIComponent(tabValues[z][0]) && attributesCombinations[a]['attribute'] === tabValues[z][1]) { count++; // add class 'selected' to the selected color $('#color_' + attributesCombinations[a]['id_attribute']).addClass('selected'); $('#color_' + attributesCombinations[a]['id_attribute']).parent().addClass('selected'); $('input:radio[value=' + attributesCombinations[a]['id_attribute'] + ']').attr('checked', true); $('input[type=hidden][name=group_' + attributesCombinations[a]['id_attribute_group'] + ']').val(attributesCombinations[a]['id_attribute']); $('select[name=group_' + attributesCombinations[a]['id_attribute_group'] + ']').val(attributesCombinations[a]['id_attribute']); } // find combination if (count >= 0) { findCombination(false); original_url = url; return true; } // no combination found = removing attributes from url else window.location = url.substring(0, url.indexOf('#')); } } return false; } In the Cart Summary, currently the discount is expressed as:$125-19%$155I would like this to read:$12519% off$155Once again, by looking at what styles are applied to the front office displayed discounts (price-percent-reduction.small), I think that cart-summary.js is where the change needs to happen: /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ $(document).ready(function(){ $('.cart_quantity_up').off('click').on('click', function(e){ e.preventDefault(); upQuantity($(this).attr('id').replace('cart_quantity_up_', '')); }); $('.cart_quantity_down').off('click').on('click', function(e){ e.preventDefault(); downQuantity($(this).attr('id').replace('cart_quantity_down_', '')); }); $('.cart_quantity_delete' ).off('click').on('click', function(e){ e.preventDefault(); deleteProductFromSummary($(this).attr('id')); }); $('.cart_address_delivery').on('change', function(e){ changeAddressDelivery($(this)); }); $(document).on('click', '.voucher_name', function(e){ $('#discount_name').val($(this).data('code')); }); $('.cart_quantity_input').typeWatch({ highlight: true, wait: 600, captureLength: 0, callback: function(val){ updateQty(val, true, this.el); } }); cleanSelectAddressDelivery(); refreshDeliveryOptions(); $('.delivery_option_radio').on('change', function(){ refreshDeliveryOptions(); }); $('#allow_seperated_package').on('click', function(){ $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'controller=cart&ajax=true&allowSeperatedPackage=true&value=' + ($(this).prop('checked') ? '1' : '0') + '&token='+static_token + '&allow_refresh=1', success: function(jsonData) { if (typeof(getCarrierListAndUpdate) !== 'undefined') getCarrierListAndUpdate(); } }); }); $('#gift').checkboxChange(function(){ $('#gift_div').show('slow'); }, function(){ $('#gift_div').hide('slow'); }); $('#enable-multishipping').checkboxChange( function(){ $('.standard-checkout').hide(0); $('.multishipping-checkout').show(0); }, function(){ $('.standard-checkout').show(0); $('.multishipping-checkout').hide(0); } ); }); function cleanSelectAddressDelivery() { if (window.ajaxCart !== undefined) { //Removing "Ship to an other address" from the address delivery select option if there is not enought address $.each($('.cart_address_delivery'), function(it, item) { var options = $(item).find('option'); var address_count = 0; var ids = $(item).attr('id').split('_'); var id_product = ids[3]; var id_product_attribute = ids[4]; var id_address_delivery = ids[5]; $.each(options, function(i) { if ($(options[i]).val() > 0 && ($('#product_' + id_product + '_' + id_product_attribute + '_0_' + $(options[i]).val()).length == 0 // Check the address is not already used for a similare products || id_address_delivery == $(options[i]).val() ) ) address_count++; }); // Need at least two address to allow skipping products to multiple address if (address_count < 2) $($(item).find('option[value=-2]')).remove(); else if($($(item).find('option[value=-2]')).length == 0) $(item).append($('<option value="-2">' + ShipToAnOtherAddress + '</option>')); }); } } function changeAddressDelivery(obj) { var ids = obj.attr('id').split('_'); var id_product = ids[3]; var id_product_attribute = ids[4]; var old_id_address_delivery = ids[5]; var new_id_address_delivery = obj.val(); if (new_id_address_delivery == old_id_address_delivery) return; if (new_id_address_delivery > 0) // Change the delivery address { $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType: 'json', data: 'controller=cart&ajax=true&changeAddressDelivery=1&summary=1&id_product=' + id_product + '&id_product_attribute='+id_product_attribute + '&old_id_address_delivery='+old_id_address_delivery + '&new_id_address_delivery='+new_id_address_delivery + '&token='+static_token + '&allow_refresh=1', success: function(jsonData) { if (typeof(jsonData.hasErrors) != 'undefined' && jsonData.hasErrors) { if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + jsonData.error + '</p>' }], { padding: 0 }); else alert(jsonData.error); // Reset the old address $('#select_address_delivery_' + id_product + '_' + id_product_attribute + '_' + old_id_address_delivery).val(old_id_address_delivery); } else { // The product exist if ($('#product_' + id_product + '_' + id_product_attribute + '_0_' + new_id_address_delivery).length) { updateCartSummary(jsonData.summary); if (window.ajaxCart != undefined) ajaxCart.updateCart(jsonData); updateCustomizedDatas(jsonData.customizedDatas); updateHookShoppingCart(jsonData.HOOK_SHOPPING_CART); updateHookShoppingCartExtra(jsonData.HOOK_SHOPPING_CART_EXTRA); if (typeof(getCarrierListAndUpdate) !== 'undefined') getCarrierListAndUpdate(); // @todo reverse the remove order // This effect remove the current line, but it's better to remove the other one, and refresshing this one $('#product_' + id_product + '_' + id_product_attribute + '_0_' + old_id_address_delivery).remove(); // @todo improve customization upgrading $('.product_' + id_product + '_' + id_product_attribute + '_0_' + old_id_address_delivery).remove(); } if (window.ajaxCart != undefined) ajaxCart.updateCart(jsonData); updateAddressId(id_product, id_product_attribute, old_id_address_delivery, new_id_address_delivery); cleanSelectAddressDelivery(); } } }); } else if (new_id_address_delivery == -1) // Adding a new address window.location = $($('.address_add a')[0]).attr('href'); else if (new_id_address_delivery == -2) // Add a new line for this product { // This test is will not usefull in the future if (old_id_address_delivery == 0) { if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + txtSelectAnAddressFirst + '</p>' }], { padding: 0 }); else alert(txtSelectAnAddressFirst); return false; } // Get new address to deliver var id_address_delivery = 0; var options = $('#select_address_delivery_' + id_product + '_' + id_product_attribute + '_' + old_id_address_delivery + ' option'); $.each(options, function(i) { // Check the address is not already used for a similare products if ($(options[i]).val() > 0 && $(options[i]).val() !== old_id_address_delivery && $('#product_' + id_product + '_' + id_product_attribute + '_0_' + $(options[i]).val()).length == 0) { id_address_delivery = $(options[i]).val(); return false; } }); $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType: 'json', context: obj, data: 'controller=cart' + '&ajax=true&duplicate=true&summary=true' + '&id_product='+id_product + '&id_product_attribute='+id_product_attribute + '&id_address_delivery='+old_id_address_delivery + '&new_id_address_delivery='+id_address_delivery + '&token='+static_token + '&allow_refresh=1', success: function(jsonData) { if (jsonData.error && !!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + jsonData.error + '</p>' }], { padding: 0 }); else alert(jsonData.error); var line = $('#product_' + id_product + '_' + id_product_attribute + '_0_' + old_id_address_delivery); var new_line = line.clone(); updateAddressId(id_product, id_product_attribute, old_id_address_delivery, id_address_delivery, new_line); line.after(new_line); new_line.find('input[name=quantity_' + id_product + '_' + id_product_attribute + '_0_' + old_id_address_delivery + '_hidden]') .val(1); new_line.find('.cart_quantity_input') .val(1); $('#select_address_delivery_' + id_product + '_' + id_product_attribute + '_' + old_id_address_delivery).val(old_id_address_delivery); $('#select_address_delivery_' + id_product + '_' + id_product_attribute + '_' + id_address_delivery).val(id_address_delivery); cleanSelectAddressDelivery(); updateCartSummary(jsonData.summary); if (window.ajaxCart !== undefined) ajaxCart.updateCart(jsonData); } }); } return true; } function updateAddressId(id_product, id_product_attribute, old_id_address_delivery, id_address_delivery, line) { if (typeof(line) == 'undefined' || line.length == 0) line = $('#cart_summary tr[id^=product_' + id_product + '_' + id_product_attribute + '_0_], #cart_summary tr[id^=product_' + id_product + '_' + id_product_attribute + '_nocustom_]'); $('.product_customization_for_' + id_product + '_' + id_product_attribute + '_' + old_id_address_delivery).each(function(){ $(this).attr('id', $(this).attr('id').replace(/_\d+$/, '_' + id_address_delivery)).removeClass('product_customization_for_' + id_product + '_' + id_product_attribute + '_' + old_id_address_delivery + ' address_' + old_id_address_delivery).addClass('product_customization_for_' + id_product + '_' + id_product_attribute + '_' + id_address_delivery + ' address_' + id_address_delivery); $(this).find('input[name^=quantity_]').each(function(){ if (typeof($(this).attr('name')) != 'undefined') $(this).attr('name', $(this).attr('name').replace(/_\d+(_hidden|)$/, '_' + id_address_delivery)); }); $(this).find('a').each(function(){ if (typeof($(this).attr('href')) != 'undefined') $(this).attr('href', $(this).attr('href').replace(/id_address_delivery=\d+/, 'id_address_delivery=' + id_address_delivery)); }); }); line.attr('id', line.attr('id').replace(/_\d+$/, '_' + id_address_delivery)).removeClass('address_' + old_id_address_delivery).addClass('address_' + id_address_delivery).find('span[id^=cart_quantity_custom_], span[id^=total_product_price_], input[name^=quantity_], .cart_quantity_down, .cart_quantity_up, .cart_quantity_delete').each(function(){ if (typeof($(this).attr('name')) != 'undefined') $(this).attr('name', $(this).attr('name').replace(/_\d+(_hidden|)$/, '_' + id_address_delivery)); if (typeof($(this).attr('id')) != 'undefined') $(this).attr('id', $(this).attr('id').replace(/_\d+$/, '_' + id_address_delivery)); if (typeof($(this).attr('href')) != 'undefined') $(this).attr('href', $(this).attr('href').replace(/id_address_delivery=\d+/, 'id_address_delivery=' + id_address_delivery)); }); line.find('#select_address_delivery_' + id_product + '_' + id_product_attribute + '_' + old_id_address_delivery).attr('id', 'select_address_delivery_' + id_product + '_' + id_product_attribute + '_' + id_address_delivery); if (window.ajaxCart !== undefined) { $('#cart_block_list dd, #cart_block_list dt').each(function(){ if (typeof($(this).attr('id')) != 'undefined') $(this).attr('id', $(this).attr('id').replace(/_\d+$/, '_' + id_address_delivery)); }); } } function updateQty(val, cart, el) { var prefix = ""; if (typeof(cart) == 'undefined' || cart) prefix = '#order-detail-content '; else prefix = '#fancybox-content '; var id = $(el).attr('name'); var exp = new RegExp("^[0-9]+$"); if (exp.test(val) == true) { var hidden = $(prefix + 'input[name=' + id + '_hidden]').val(); var input = $(prefix + 'input[name=' + id + ']').val(); var QtyToUp = parseInt(input) - parseInt(hidden); if (parseInt(QtyToUp) > 0) upQuantity(id.replace('quantity_', ''), QtyToUp); else if(parseInt(QtyToUp) < 0) downQuantity(id.replace('quantity_', ''), QtyToUp); } else $(prefix + 'input[name=' + id + ']').val($(prefix + 'input[name=' + id + '_hidden]').val()); if (typeof(getCarrierListAndUpdate) !== 'undefined') getCarrierListAndUpdate(); } function deleteProductFromSummary(id) { var customizationId = 0; var productId = 0; var productAttributeId = 0; var id_address_delivery = 0; var ids = 0; ids = id.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) !== 'undefined') productAttributeId = parseInt(ids[1]); if (typeof(ids[2]) !== 'undefined' && ids[2] !== 'nocustom') customizationId = parseInt(ids[2]); if (typeof(ids[3]) !== 'undefined') id_address_delivery = parseInt(ids[3]); $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType: 'json', data: 'controller=cart' + '&ajax=true&delete=true&summary=true' + '&id_product='+productId + '&ipa='+productAttributeId + '&id_address_delivery='+id_address_delivery + ((customizationId !== 0) ? '&id_customization=' + customizationId : '') + '&token=' + static_token + '&allow_refresh=1', success: function(jsonData) { if (jsonData.hasError) { var errors = ''; for(var error in jsonData.errors) //IE6 bug fix if (error !== 'indexOf') errors += jsonData.errors[error] + "\n"; } else { if (jsonData.refresh) location.reload(); if (parseInt(jsonData.summary.products.length) == 0) { if (typeof(orderProcess) == 'undefined' || orderProcess !== 'order-opc') document.location.href = document.location.href; // redirection else { $('#center_column').children().each(function() { if ($(this).attr('id') !== 'emptyCartWarning' && $(this).attr('class') !== 'breadcrumb' && $(this).attr('id') !== 'cart_title') { $(this).fadeOut('slow', function () { $(this).remove(); }); } }); $('#summary_products_label').remove(); $('#emptyCartWarning').fadeIn('slow'); } } else { $('#product_' + id).fadeOut('slow', function() { $(this).remove(); cleanSelectAddressDelivery(); if (!customizationId) refreshOddRow(); }); var exist = false; for (i=0;i<jsonData.summary.products.length;i++) { if (jsonData.summary.products[i].id_product == productId && jsonData.summary.products[i].id_product_attribute == productAttributeId && jsonData.summary.products[i].id_address_delivery == id_address_delivery && (parseInt(jsonData.summary.products[i].customization_quantity) > 0)) exist = true; } // if all customization removed => delete product line if (!exist && customizationId) $('#product_' + productId + '_' + productAttributeId + '_0_' + id_address_delivery).fadeOut('slow', function() { $(this).remove(); var line = $('#product_' + productId + '_' + productAttributeId + '_nocustom_' + id_address_delivery); if (line.length > 0) { line.find('input[name^=quantity_], .cart_quantity_down, .cart_quantity_up, .cart_quantity_delete').each(function(){ if (typeof($(this).attr('name')) != 'undefined') $(this).attr('name', $(this).attr('name').replace(/nocustom/, '0')); if (typeof($(this).attr('id')) != 'undefined') $(this).attr('id', $(this).attr('id').replace(/nocustom/, '0')); }); line.find('span[id^=total_product_price_]').each(function(){ $(this).attr('id', $(this).attr('id').replace(/_nocustom/, '')); }); line.attr('id', line.attr('id').replace(/nocustom/, '0')); } refreshOddRow(); }); } updateCartSummary(jsonData.summary); if (window.ajaxCart != undefined) ajaxCart.updateCart(jsonData); updateCustomizedDatas(jsonData.customizedDatas); updateHookShoppingCart(jsonData.HOOK_SHOPPING_CART); updateHookShoppingCartExtra(jsonData.HOOK_SHOPPING_CART_EXTRA); if (typeof(getCarrierListAndUpdate) !== 'undefined' && jsonData.summary.products.length > 0) getCarrierListAndUpdate(); if (typeof(updatePaymentMethodsDisplay) !== 'undefined') updatePaymentMethodsDisplay(); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus !== 'abort') { var error = "TECHNICAL ERROR: unable to save update quantity \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + error + '</p>' }], { padding: 0 }); else alert(error); } } }); } function refreshOddRow() { var odd_class = 'odd'; var even_class = 'even'; $.each($('.cart_item'), function(i, it) { if (i == 0) // First item { if ($(this).hasClass('even')) { odd_class = 'even'; even_class = 'odd'; } $(this).addClass('first_item'); } if(i % 2) $(this).removeClass(odd_class).addClass(even_class); else $(this).removeClass(even_class).addClass(odd_class); }); $('.cart_item:last-child, .customization:last-child').addClass('last_item'); } function upQuantity(id, qty) { if (typeof(qty) == 'undefined' || !qty) qty = 1; var customizationId = 0; var productId = 0; var productAttributeId = 0; var id_address_delivery = 0; var ids = 0; ids = id.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) !== 'undefined') productAttributeId = parseInt(ids[1]); if (typeof(ids[2]) !== 'undefined' && ids[2] !== 'nocustom') customizationId = parseInt(ids[2]); if (typeof(ids[3]) !== 'undefined') id_address_delivery = parseInt(ids[3]); $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType: 'json', data: 'controller=cart' + '&ajax=true' + '&add=true' + '&getproductprice=true' + '&summary=true' + '&id_product=' + productId + '&ipa=' + productAttributeId + '&id_address_delivery=' + id_address_delivery + ((customizationId !== 0) ? '&id_customization=' + customizationId : '') + '&qty=' + qty + '&token=' + static_token + '&allow_refresh=1', success: function(jsonData) { if (jsonData.hasError) { var errors = ''; for(var error in jsonData.errors) //IE6 bug fix if(error !== 'indexOf') errors += $('<div />').html(jsonData.errors[error]).text() + "\n"; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + errors + '</p>' }], { padding: 0 }); else alert(errors); $('input[name=quantity_'+ id +']').val($('input[name=quantity_'+ id +'_hidden]').val()); } else { if (jsonData.refresh) location.reload(); updateCartSummary(jsonData.summary); if (window.ajaxCart != undefined) ajaxCart.updateCart(jsonData); if (customizationId !== 0) updateCustomizedDatas(jsonData.customizedDatas); updateHookShoppingCart(jsonData.HOOK_SHOPPING_CART); updateHookShoppingCartExtra(jsonData.HOOK_SHOPPING_CART_EXTRA); if (typeof(getCarrierListAndUpdate) !== 'undefined') getCarrierListAndUpdate(); if (typeof(updatePaymentMethodsDisplay) !== 'undefined') updatePaymentMethodsDisplay(); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus !== 'abort') { error = "TECHNICAL ERROR: unable to save update quantity \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + error + '</p>' }], { padding: 0 }); else alert(error); } } }); } function downQuantity(id, qty) { var val = $('input[name=quantity_' + id + ']').val(); var newVal = val; if(typeof(qty) == 'undefined' || !qty) { qty = 1; newVal = val - 1; } else if (qty < 0) qty = -qty; var customizationId = 0; var productId = 0; var productAttributeId = 0; var id_address_delivery = 0; var ids = 0; ids = id.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) !== 'undefined') productAttributeId = parseInt(ids[1]); if (typeof(ids[2]) !== 'undefined' && ids[2] !== 'nocustom') customizationId = parseInt(ids[2]); if (typeof(ids[3]) !== 'undefined') id_address_delivery = parseInt(ids[3]); if (newVal > 0 || $('#product_' + id + '_gift').length) { $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType: 'json', data: 'controller=cart' + '&ajax=true' + '&add=true' + '&getproductprice=true' + '&summary=true' + '&id_product='+productId + '&ipa='+productAttributeId + '&id_address_delivery='+id_address_delivery + '&op=down' + ((customizationId !== 0) ? '&id_customization='+customizationId : '') + '&qty='+qty + '&token='+static_token + '&allow_refresh=1', success: function(jsonData) { if (jsonData.hasError) { var errors = ''; for(var error in jsonData.errors) //IE6 bug fix if(error !== 'indexOf') errors += $('<div />').html(jsonData.errors[error]).text() + "\n"; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + errors + '</p>' }], { padding: 0 }); else alert(errors); $('input[name=quantity_' + id + ']').val($('input[name=quantity_' + id + '_hidden]').val()); } else { if (jsonData.refresh) location.reload(); updateCartSummary(jsonData.summary); if (window.ajaxCart !== undefined) ajaxCart.updateCart(jsonData); if (customizationId !== 0) updateCustomizedDatas(jsonData.customizedDatas); updateHookShoppingCart(jsonData.HOOK_SHOPPING_CART); updateHookShoppingCartExtra(jsonData.HOOK_SHOPPING_CART_EXTRA); if (newVal == 0) $('#product_' + id).hide(); if (typeof(getCarrierListAndUpdate) !== 'undefined') getCarrierListAndUpdate(); if (typeof(updatePaymentMethodsDisplay) !== 'undefined') updatePaymentMethodsDisplay(); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus !== 'abort') alert("TECHNICAL ERROR: unable to save update quantity \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus); } }); } else { deleteProductFromSummary(id); } } function updateCartSummary(json) { var i; var nbrProducts = 0; var product_list = new Array(); if (typeof json == 'undefined') return; $('div.alert-danger').fadeOut(); for (i=0;i<json.products.length;i++) product_list[json.products[i].id_product + '_' + json.products[i].id_product_attribute + '_' + json.products[i].id_address_delivery] = json.products[i]; if (!$('.multishipping-cart:visible').length) { for (i=0;i<json.gift_products.length;i++) if (typeof(product_list[json.gift_products[i].id_product + '_' + json.gift_products[i].id_product_attribute + '_' + json.gift_products[i].id_address_delivery]) !== 'undefined') product_list[json.gift_products[i].id_product + '_' + json.gift_products[i].id_product_attribute + '_' + json.gift_products[i].id_address_delivery].quantity -= json.gift_products[i].cart_quantity; } else for (i=0;i<json.gift_products.length;i++) if (typeof(product_list[json.gift_products[i].id_product + '_' + json.gift_products[i].id_product_attribute + '_' + json.gift_products[i].id_address_delivery]) == 'undefined') product_list[json.gift_products[i].id_product + '_' + json.gift_products[i].id_product_attribute + '_' + json.gift_products[i].id_address_delivery] = json.gift_products[i]; for (i in product_list) { // if reduction, we need to show it in the cart by showing the initial price above the current one var reduction = product_list[i].reduction_applies; var initial_price_text = ''; initial_price = ''; if (typeof(product_list[i].price_without_quantity_discount) !== 'undefined') initial_price = formatCurrency(product_list[i].price_without_quantity_discount, currencyFormat, currencySign, currencyBlank); priceReductionPercent = ps_round((ps_round(product_list[i].price_without_quantity_discount) - ps_round(product_list[i].price_wt))/ps_round(product_list[i].price_without_quantity_discount) * -100); var current_price = ''; if (priceDisplayMethod !== 0) current_price = formatCurrency(product_list[i].price, currencyFormat, currencySign, currencyBlank); else current_price = formatCurrency(product_list[i].price_wt, currencyFormat, currencySign, currencyBlank); if (reduction && typeof(initial_price) !== 'undefined') if (initial_price !== '' && product_list[i].price_without_quantity_discount > product_list[i].price) initial_price_text = '<span class="price-percent-reduction small">'+priceReductionPercent+'%</span><span class="old-price">' + initial_price + '</span>'; var key_for_blockcart = product_list[i].id_product + '_' + product_list[i].id_product_attribute + '_' + product_list[i].id_address_delivery; var key_for_blockcart_nocustom = product_list[i].id_product + '_' + product_list[i].id_product_attribute + '_' + ((product_list[i].id_customization && product_list[i].quantity_without_customization != product_list[i].quantity)? 'nocustom' : '0') + '_' + product_list[i].id_address_delivery; if (priceDisplayMethod !== 0) { $('#product_price_' + key_for_blockcart).html('<span class="price">' + current_price + '</span>' + initial_price_text); if (typeof(product_list[i].customizationQuantityTotal) !== 'undefined' && product_list[i].customizationQuantityTotal > 0) $('#total_product_price_' + key_for_blockcart).html(formatCurrency(product_list[i].total_customization, currencyFormat, currencySign, currencyBlank)); else $('#total_product_price_' + key_for_blockcart).html(formatCurrency(product_list[i].total, currencyFormat, currencySign, currencyBlank)); if (product_list[i].quantity_without_customization != product_list[i].quantity) $('#total_product_price_' + key_for_blockcart_nocustom).html(formatCurrency(product_list[i].total, currencyFormat, currencySign, currencyBlank)); } else { $('#product_price_' + key_for_blockcart).html('<span class="price">' + current_price + '</span>' + initial_price_text); if (typeof(product_list[i].customizationQuantityTotal) !== 'undefined' && product_list[i].customizationQuantityTotal > 0) $('#total_product_price_' + key_for_blockcart).html(formatCurrency(product_list[i].total_customization_wt, currencyFormat, currencySign, currencyBlank)); else $('#total_product_price_' + key_for_blockcart).html(formatCurrency(product_list[i].total_wt, currencyFormat, currencySign, currencyBlank)); if (product_list[i].quantity_without_customization != product_list[i].quantity) $('#total_product_price_' + key_for_blockcart_nocustom).html(formatCurrency(product_list[i].total_wt, currencyFormat, currencySign, currencyBlank)); } $('input[name=quantity_' + key_for_blockcart_nocustom + ']').val(product_list[i].id_customization? product_list[i].quantity_without_customization : product_list[i].cart_quantity); $('input[name=quantity_' + key_for_blockcart_nocustom + '_hidden]').val(product_list[i].id_customization? product_list[i].quantity_without_customization : product_list[i].cart_quantity); if (typeof(product_list[i].customizationQuantityTotal) !== 'undefined' && product_list[i].customizationQuantityTotal > 0) $('#cart_quantity_custom_' + key_for_blockcart).html(product_list[i].customizationQuantityTotal); nbrProducts += parseInt(product_list[i].quantity); } // Update discounts if (json.discounts.length == 0) { $('.cart_discount').each(function(){$(this).remove();}); $('.cart_total_voucher').remove(); } else { if ($('.cart_discount').length == 0) location.reload(); if (priceDisplayMethod !== 0) $('#total_discount').html('-' + formatCurrency(json.total_discounts_tax_exc, currencyFormat, currencySign, currencyBlank)); else $('#total_discount').html('-' + formatCurrency(json.total_discounts, currencyFormat, currencySign, currencyBlank)); $('.cart_discount').each(function(){ var idElmt = $(this).attr('id').replace('cart_discount_',''); var toDelete = true; for (i=0;i<json.discounts.length;i++) if (json.discounts[i].id_discount == idElmt) { if (json.discounts[i].value_real !== '!') { if (priceDisplayMethod !== 0) $('#cart_discount_' + idElmt + ' td.cart_discount_price span.price-discount').html(formatCurrency(json.discounts[i].value_tax_exc * -1, currencyFormat, currencySign, currencyBlank)); else $('#cart_discount_' + idElmt + ' td.cart_discount_price span.price-discount').html(formatCurrency(json.discounts[i].value_real * -1, currencyFormat, currencySign, currencyBlank)); } toDelete = false; } if (toDelete) $('#cart_discount_' + idElmt + ', #cart_total_voucher').fadeTo('fast', 0, function(){ $(this).remove(); }); }); } // Block cart $('#cart_block_shipping_cost').show(); $('#cart_block_shipping_cost').next().show(); if (json.total_shipping > 0) { if (priceDisplayMethod !== 0) { $('#cart_block_shipping_cost').html(formatCurrency(json.total_shipping_tax_exc, currencyFormat, currencySign, currencyBlank)); $('#cart_block_wrapping_cost').html(formatCurrency(json.total_wrapping_tax_exc, currencyFormat, currencySign, currencyBlank)); $('#cart_block_total').html(formatCurrency(json.total_price_without_tax, currencyFormat, currencySign, currencyBlank)); } else { $('#cart_block_shipping_cost').html(formatCurrency(json.total_shipping, currencyFormat, currencySign, currencyBlank)); $('#cart_block_wrapping_cost').html(formatCurrency(json.total_wrapping, currencyFormat, currencySign, currencyBlank)); $('#cart_block_total').html(formatCurrency(json.total_price, currencyFormat, currencySign, currencyBlank)); } } else { if (json.carrier.id == null) { $('#cart_block_shipping_cost').hide(); $('#cart_block_shipping_cost').next().hide(); } } $('#cart_block_tax_cost').html(formatCurrency(json.total_tax, currencyFormat, currencySign, currencyBlank)); $('.ajax_cart_quantity').html(nbrProducts); // Cart summary $('#summary_products_quantity').html(nbrProducts + ' ' + (nbrProducts > 1 ? txtProducts : txtProduct)); if (priceDisplayMethod !== 0) $('#total_product').html(formatCurrency(json.total_products, currencyFormat, currencySign, currencyBlank)); else $('#total_product').html(formatCurrency(json.total_products_wt, currencyFormat, currencySign, currencyBlank)); $('#total_price').html(formatCurrency(json.total_price, currencyFormat, currencySign, currencyBlank)); $('#total_price_without_tax').html(formatCurrency(json.total_price_without_tax, currencyFormat, currencySign, currencyBlank)); $('#total_tax').html(formatCurrency(json.total_tax, currencyFormat, currencySign, currencyBlank)); $('.cart_total_delivery').show(); if (json.total_shipping > 0) { if (priceDisplayMethod !== 0) $('#total_shipping').html(formatCurrency(json.total_shipping_tax_exc, currencyFormat, currencySign, currencyBlank)); else $('#total_shipping').html(formatCurrency(json.total_shipping, currencyFormat, currencySign, currencyBlank)); } else { if (json.carrier.id != null) $('#total_shipping').html(freeShippingTranslation); else $('.cart_total_delivery').hide(); } if (json.free_ship > 0 && !json.is_virtual_cart) { $('.cart_free_shipping').fadeIn(); $('#free_shipping').html(formatCurrency(json.free_ship, currencyFormat, currencySign, currencyBlank)); } else $('.cart_free_shipping').hide(); if (json.total_wrapping > 0) { $('#total_wrapping').html(formatCurrency(json.total_wrapping, currencyFormat, currencySign, currencyBlank)); $('#total_wrapping').parent().show(); } else { $('#total_wrapping').html(formatCurrency(json.total_wrapping, currencyFormat, currencySign, currencyBlank)); $('#total_wrapping').parent().hide(); } } function updateCustomizedDatas(json) { for(var i in json) for(var j in json[i]) for(var k in json[i][j]) for(var l in json[i][j][k]) { var quantity = json[i][j][k][l]['quantity']; $('input[name=quantity_' + i + '_' + j + '_' + l + '_' + k + '_hidden]').val(quantity); $('input[name=quantity_' + i + '_' + j + '_' + l + '_' + k + ']').val(quantity); } } function updateHookShoppingCart(html) { $('#HOOK_SHOPPING_CART').html(html); } function updateHookShoppingCartExtra(html) { $('#HOOK_SHOPPING_CART_EXTRA').html(html); } function refreshDeliveryOptions() { $.each($('.delivery_option_radio'), function() { if ($(this).prop('checked')) { if ($(this).parent().find('.delivery_option_carrier.not-displayable').length == 0) $(this).parent().find('.delivery_option_carrier').show(); var carrier_id_list = $(this).val().split(','); carrier_id_list.pop(); var it = this; $(carrier_id_list).each(function() { $(it).closest('.delivery_options').find('input[value="' + this.toString() + '"]').change(); }); } else $(this).parent().find('.delivery_option_carrier').hide(); }); } function updateExtraCarrier(id_delivery_option, id_address) { var url = ""; if(typeof(orderOpcUrl) !== 'undefined') url = orderOpcUrl; else url = orderUrl; $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: url + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'ajax=true' + '&method=updateExtraCarrier' + '&id_address='+id_address + '&id_delivery_option='+id_delivery_option + '&token='+static_token + '&allow_refresh=1', success: function(jsonData) { $('#HOOK_EXTRACARRIER_' + id_address).html(jsonData['content']); } }); } I hope this helps to clarify... Link to comment Share on other sites More sharing options...
morepork Posted June 10, 2014 Author Share Posted June 10, 2014 Thanks for all the advice. The developer of the Transformer theme provided the find and replace instructions I needed (specific to the theme). Link to comment Share on other sites More sharing options...
vekia Posted June 10, 2014 Share Posted June 10, 2014 great :-) thank you for confirmation i marked topic title as [solved] with regards, Milos Link to comment Share on other sites More sharing options...
Recommended Posts