ruisonika Posted May 11, 2020 Share Posted May 11, 2020 Hello guys, In file blockcart.tpl instead of this <span class="ajax_cart_quantity mini-cart-count{if $cart_qties == 0} unvisible{/if}">{$cart_qties}</span> how can i get the number of product rows. Example i add to cart 5 products of reference A, 3 products of reference B and 1 product of reference C, the normal thing is to show there are 9 products in cart, but i wanna show 3 references in cart. How can i do this? Prestashop 1.6 Link to comment Share on other sites More sharing options...
EvaF Posted May 11, 2020 Share Posted May 11, 2020 (edited) add smarty variable $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows'=> count($rows)); and use it: <span class="ajax_cart_quantity mini-cart-count{if $cart_rows == 0} unvisible{/if}">{$cart_rows}</span> Edited May 11, 2020 by EvaF (see edit history) 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 11, 2020 Author Share Posted May 11, 2020 2 hours ago, EvaF said: add smarty variable $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows'=> count($rows)); and use it: <span class="ajax_cart_quantity mini-cart-count{if $cart_rows == 0} unvisible{/if}">{$cart_rows}</span> sorry but where do i paste your code? what is the file? Link to comment Share on other sites More sharing options...
EvaF Posted May 11, 2020 Share Posted May 11, 2020 ah sorry 1)brutal way: into public function init() FrontController 2)better: override public function init() Frontcontroller this way class FrontController extends FrontControllerCore { public function init() { parent::init(); $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows'=> count($rows)); } } 3) the best: catch one of hooks that is processed allways for FrontController f.e "displayHeader", "displayTop","displayMaintenance".. and place the piece of code into 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 11, 2020 Author Share Posted May 11, 2020 3 hours ago, EvaF said: ah sorry 1)brutal way: into public function init() FrontController 2)better: override public function init() Frontcontroller this way class FrontController extends FrontControllerCore { public function init() { parent::init(); $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows'=> count($rows)); } } 3) the best: catch one of hooks that is processed allways for FrontController f.e "displayHeader", "displayTop","displayMaintenance".. and place the piece of code into cool it works, with one catch, example when i refresh the page all is well but when add a new product to the cart it lost the information. any ideia? by the way thanks for all the help. Link to comment Share on other sites More sharing options...
EvaF Posted May 12, 2020 Share Posted May 12, 2020 one of them "actionCartSave", "actionCartSummary" 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 12, 2020 Author Share Posted May 12, 2020 2 hours ago, EvaF said: one of them "actionCartSave", "actionCartSummary" sorry i don't get it, where do i paste "one of them actionCartSave, actionCartSummary"? Thanks Link to comment Share on other sites More sharing options...
EvaF Posted May 12, 2020 Share Posted May 12, 2020 there are hooks catch one of hooks "actionCartSave", "actionCartSummary" 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 13, 2020 Author Share Posted May 13, 2020 On 5/12/2020 at 9:48 AM, EvaF said: there are hooks catch one of hooks "actionCartSave", "actionCartSummary" Sorry EvaF i'm trying but i don't know how... I put the following code but doesn't work, any help? Thanks <?php class FrontController extends FrontControllerCore { public function init() { parent::init(); $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $numberofrows = $this->context->smarty->assign('cart_rows',count($rows)); Hook::exec('actionCartSave'); return $numberofrows; } } Link to comment Share on other sites More sharing options...
EvaF Posted May 13, 2020 Share Posted May 13, 2020 ach so, you use override ( i thought that you caught hooks) in this case you have to override also cart class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } { and FrontController class FrontController extends FrontControllerCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows'=> count($rows)); } public function init() { parent::init(); $this->setCartRows(); } } 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 13, 2020 Author Share Posted May 13, 2020 1 hour ago, EvaF said: ach so, you use override ( i thought that you caught hooks) in this case you have to override also cart class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } { and FrontController class FrontController extends FrontControllerCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows'=> count($rows)); } public function init() { parent::init(); $this->setCartRows(); } } does not work, when i add a product to cart gives me this message. Link to comment Share on other sites More sharing options...
EvaF Posted May 13, 2020 Share Posted May 13, 2020 i wrote the piece of code directly - without testing - I will test and let you know 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 13, 2020 Author Share Posted May 13, 2020 1 hour ago, EvaF said: i wrote the piece of code directly - without testing - I will test and let you know Thanks Link to comment Share on other sites More sharing options...
EvaF Posted May 13, 2020 Share Posted May 13, 2020 here is fixed overriding of cart class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->id); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->id); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } } 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 14, 2020 Author Share Posted May 14, 2020 13 hours ago, EvaF said: here is fixed overriding of cart class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->id); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->id); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } } Hello EvaF it shows the same error as before, i will try hard way to paste this code in class/Cart.php and i will inform the result. Thanks for your help. Link to comment Share on other sites More sharing options...
EvaF Posted May 14, 2020 Share Posted May 14, 2020 sorry bug - fixed Copy-paste is a good servant but a bad master. class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->id); // or distinct products //$rows = Db::getInstance()->executeS(' // SELECT DISTINCT id_product // FROM `'._DB_PREFIX_.'cart_product` // WHERE `id_cart` = '.(int)$this->id); $rows = ($rows) ? $rows : array(); Context::getContext()->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } } 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 14, 2020 Author Share Posted May 14, 2020 @EvaF this doesn't work, maybe i am doing something wrong, i will show my steps. The website is https://nnn.pt/pt/ version 1.6.1.17 override > classes > Cart.php <?php class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT DISTINCT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->id); $rows = ($rows) ? $rows : array(); Context::getContext()->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } } override > controllers > front > FrontController.php <?php class FrontController extends FrontControllerCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT DISTINCT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows', count($rows)); } public function init() { parent::init(); $this->setCartRows(); } } themes > pf_golmart > modules > blockcart > blocart.tpl (piece of the code that matters) <div class="mini-cart cart-inner"> <a href="{$link->getPageLink($order_process, true)|escape:'html':'UTF-8'}" title="{l s='View my shopping cart' mod='blockcart'}" rel="nofollow"> <span class="icon-shopping-cart shopcart_icon"></span> {*<span class="cart-title">{l s='shopping cart' mod='blockcart'}</span>*} <span class="ajax_cart_quantity mini-cart-count{if $cart_qties == 0} unvisible{/if}" style="font-size:2em;color:#000;font-weight:600;">{$cart_qties}</span> <!-- inspect this line to see if the cart_rows is show like we want --> <div id="toSeeRows" class="unvisible"><span class="ajax_cart_quantity mini-cart-count{if $cart_rows == 0} unvisible{/if}">{$cart_rows}</span></div> <span class="ajax_cart_product_txt{if $cart_qties != 1} unvisible{/if}" style="font-size:1.5em;color:#000;">{l s='-' mod='blockcart'}</span> <span class="ajax_cart_product_txt_s{if $cart_qties < 2} unvisible{/if}" style="font-size:1.5em;color:#000;">{l s='-' mod='blockcart'}</span> <span class="ajax_cart_total{if $cart_qties == 0} unvisible{/if}" style="font-size:1.5em;color:#000;"> {if $cart_qties > 0} {if $priceDisplay == 1} {assign var='blockcart_cart_flag' value='Cart::BOTH_WITHOUT_SHIPPING'|constant} {convertPrice price=$cart->getOrderTotal(false, $blockcart_cart_flag)} {else} {assign var='blockcart_cart_flag' value='Cart::BOTH_WITHOUT_SHIPPING'|constant} {convertPrice price=$cart->getOrderTotal(true, $blockcart_cart_flag)} {/if} {/if} </span> <span class="ajax_cart_no_product{if $cart_qties > 0} unvisible{/if}"> <span class="mini-cart-count">{l s='0' mod='blockcart'} {l s='item' mod='blockcart'}</span> - <span>{convertPrice price=0}</span> </span> {if $ajax_allowed && isset($blockcart_top) && !$blockcart_top} <span class="block_cart_expand{if !isset($colapseExpandStatus) || (isset($colapseExpandStatus) && $colapseExpandStatus eq 'expanded')} unvisible{/if}"> </span> <span class="block_cart_collapse{if isset($colapseExpandStatus) && $colapseExpandStatus eq 'collapsed'} unvisible{/if}"> </span> {/if} </a> </div> Link to comment Share on other sites More sharing options...
EvaF Posted May 15, 2020 Share Posted May 15, 2020 I see correct number at your pages - for Frontcontroller: When there is "addtocart" pressed, then the ajax called and changed content is generated on the based of ajax response. I don't have P1.6 installed, therefore take the my next "advise" with reserve: 1) in your blockcart-json.tpl find the row "nbTotalProducts": {$nb_total_products|intval}, and append "nbTotalProducts": {$nb_total_products|intval}, "nbTotalProductsRows": {if isset($cart_rows)}{$cart_rows|intval}{else}-1{/if}, 2) in your ajax-cart.js find the row if (parseInt(jsonData.nbTotalProducts) > 0) and append rows after this if if (parseInt(jsonData.nbTotalProducts) > 0){ ... } else { ... } if (typeof jsonData.nbTotalProductsRows !== 'undefined') { // if (parseInt(jsonData.nbTotalProductsRows) > 0){ // uncomment later, when you got there valid data $('#toSeeRows .ajax_cart_quantity').text(jsonData.nbTotalProductsRows); // } } 1 Link to comment Share on other sites More sharing options...
ruisonika Posted May 15, 2020 Author Share Posted May 15, 2020 10 hours ago, EvaF said: I see correct number at your pages - for Frontcontroller: When there is "addtocart" pressed, then the ajax called and changed content is generated on the based of ajax response. I don't have P1.6 installed, therefore take the my next "advise" with reserve: 1) in your blockcart-json.tpl find the row "nbTotalProducts": {$nb_total_products|intval}, and append "nbTotalProducts": {$nb_total_products|intval}, "nbTotalProductsRows": {if isset($cart_rows)}{$cart_rows|intval}{else}-1{/if}, 2) in your ajax-cart.js find the row if (parseInt(jsonData.nbTotalProducts) > 0) and append rows after this if if (parseInt(jsonData.nbTotalProducts) > 0){ ... } else { ... } if (typeof jsonData.nbTotalProductsRows !== 'undefined') { // if (parseInt(jsonData.nbTotalProductsRows) > 0){ // uncomment later, when you got there valid data $('#toSeeRows .ajax_cart_quantity').text(jsonData.nbTotalProductsRows); // } } Thanks for all the help, it works fine Many many thanks. Problem Solved! Link to comment Share on other sites More sharing options...
Ezequielb Posted May 17, 2020 Share Posted May 17, 2020 Hello all, @ruisonika can you help us by posting the whole code you used (the one working) and which path/file to modify? Best regards! Link to comment Share on other sites More sharing options...
ruisonika Posted May 19, 2020 Author Share Posted May 19, 2020 Hello @Ezequielb and sorry the delay. So my steps were: /override/controllers/front/FrontController.php <?php class FrontController extends FrontControllerCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT DISTINCT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->context->cookie->id_cart); $rows = ($rows) ? $rows : array(); $this->context->smarty->assign('cart_rows', count($rows)); } public function init() { parent::init(); $this->setCartRows(); } } /override/classes/Cart.php <?php class Cart extends CartCore { private function setCartRows() { $rows = Db::getInstance()->executeS(' SELECT DISTINCT id_product FROM `'._DB_PREFIX_.'cart_product` WHERE `id_cart` = '.(int)$this->id); $rows = ($rows) ? $rows : array(); Context::getContext()->smarty->assign('cart_rows',count($rows)); } public function add($autoDate = true, $nullValues = false) { $return = parent::add($autoDate, $nullValues); $this->setCartRows(); return $return; } public function update($nullValues = false) { $return = parent::update($nullValues); $this->setCartRows(); return $return; } } I have a theme in my prestashop, so i have to edit the files of that theme...my theme is pf_golmart /themes/pf_golmart/modules/blockcart/blockcart.tpl {* * 2007-2015 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com> * @copyright 2007-2015 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA *} <!-- MODULE Block cart --> {if isset($blockcart_top) && $blockcart_top} <div id="pts-mini-cart" class=" clearfix{if $PS_CATALOG_MODE} header_user_catalog{/if}"> {/if} <div id="cart" class="shopping_cart"> <div class="heading"> <div class="mini-cart cart-inner"> <a href="{$link->getPageLink($order_process, true)|escape:'html':'UTF-8'}" title="{l s='View my shopping cart' mod='blockcart'}" rel="nofollow"> <span class="icon-shopping-cart shopcart_icon"></span> {*<span class="cart-title">{l s='shopping cart' mod='blockcart'}</span>*} <!--span class="ajax_cart_quantity mini-cart-count{if $cart_qties == 0} unvisible{/if}" style="font-size:1.3em;color:#000;font-weight:600;display:none;">{$cart_qties}</span--> <div id="toSeeRows" class="" style="display: inherit;"><span class="ajax_cart_quantity mini-cart-count{if $cart_rows == 0} unvisible{/if}" style="font-size:1.3em;color:#000;font-weight:600;">{$cart_rows}</span></div> <span class="ajax_cart_product_txt{if $cart_qties != 1} unvisible{/if}" style="font-size:1.3em;color:#000;">{l s='-' mod='blockcart'}</span> <span class="ajax_cart_product_txt_s{if $cart_qties < 2} unvisible{/if}" style="font-size:1.3em;color:#000;">{l s='-' mod='blockcart'}</span> <span class="ajax_cart_total{if $cart_qties == 0} unvisible{/if}" style="font-size:1.3em;color:#000;"> {if $cart_qties > 0} {if $priceDisplay == 1} {assign var='blockcart_cart_flag' value='Cart::BOTH_WITHOUT_SHIPPING'|constant} {convertPrice price=$cart->getOrderTotal(false, $blockcart_cart_flag)} {else} {assign var='blockcart_cart_flag' value='Cart::BOTH_WITHOUT_SHIPPING'|constant} {convertPrice price=$cart->getOrderTotal(true, $blockcart_cart_flag)} {/if} {/if} </span> <span class="ajax_cart_no_product{if $cart_qties > 0} unvisible{/if}"> <span class="mini-cart-count" style="font-size:1.3em;color:#000;font-weight:600;">{l s='0' mod='blockcart'} {l s='' mod='blockcart'}</span> - <span style="font-size:1.3em;color:#000;">{convertPrice price=0}</span> </span> {if $ajax_allowed && isset($blockcart_top) && !$blockcart_top} <span class="block_cart_expand{if !isset($colapseExpandStatus) || (isset($colapseExpandStatus) && $colapseExpandStatus eq 'expanded')} unvisible{/if}"> </span> <span class="block_cart_collapse{if isset($colapseExpandStatus) && $colapseExpandStatus eq 'collapsed'} unvisible{/if}"> </span> {/if} </a> </div> </div> {if !$PS_CATALOG_MODE} <div class="cart_block block exclusive content "> <div class="block_content"> <!-- block list of products --> <div class="cart_block_list{if isset($blockcart_top) && !$blockcart_top}{if isset($colapseExpandStatus) && $colapseExpandStatus eq 'expanded' || !$ajax_allowed || !isset($colapseExpandStatus)} expanded{else} collapsed unvisible{/if}{/if}"> {if $products} <div class="mini-cart-info"> <dl class="products"> {foreach from=$products item='product' name='myLoop'} {assign var='productId' value=$product.id_product} {assign var='productAttributeId' value=$product.id_product_attribute} <dt data-id="cart_block_product_{$product.id_product|intval}_{if $product.id_product_attribute}{$product.id_product_attribute|intval}{else}0{/if}_{if $product.id_address_delivery}{$product.id_address_delivery|intval}{else}0{/if}" class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}"> <a class="cart-images" href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category)|escape:'html':'UTF-8'}" title="{$product.name|escape:'html':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'cart_default')}" alt="{$product.name|escape:'html':'UTF-8'}" /></a> <div class="cart-info"> <div class="product-name"> <span class="quantity-formated"><span class="quantity">{$product.cart_quantity}</span> x </span><a class="cart_block_product_name" href="{$link->getProductLink($product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}" title="{$product.name|escape:'html':'UTF-8'}">{$product.name|truncate:13:'...'|escape:'html':'UTF-8'}</a> </div> {if isset($product.attributes_small)} <div class="product-atributes"> <a href="{$link->getProductLink($product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}" title="{l s='Product detail' mod='blockcart'}">{$product.attributes_small}</a> </div> {/if} <span class="price"> {if !isset($product.is_gift) || !$product.is_gift} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$product.total`"}{else}{displayWtPrice p="`$product.total_wt`"}{/if} <div class="hookDisplayProductPriceBlock-price"> {hook h="displayProductPriceBlock" product=$product type="price" from="blockcart"} </div> {else} {l s='Free!' mod='blockcart'} {/if} </span> </div> <span class="remove_link"> {if !isset($customizedDatas.$productId.$productAttributeId) && (!isset($product.is_gift) || !$product.is_gift)} <a class="ajax_cart_block_remove_link" 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={$static_token}")|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='remove this product from my cart' mod='blockcart'}"> </a> {/if} </span> </dt> {if isset($product.attributes_small)} <dd data-id="cart_block_combination_of_{$product.id_product|intval}{if $product.id_product_attribute}_{$product.id_product_attribute|intval}{/if}_{$product.id_address_delivery|intval}" class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}"> {/if} <!-- Customizable datas --> {if isset($customizedDatas.$productId.$productAttributeId[$product.id_address_delivery])} {if !isset($product.attributes_small)} <dd data-id="cart_block_combination_of_{$product.id_product|intval}_{if $product.id_product_attribute}{$product.id_product_attribute|intval}{else}0{/if}_{if $product.id_address_delivery}{$product.id_address_delivery|intval}{else}0{/if}" class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}"> {/if} <ul class="list-unstyled cart_block_customizations" data-id="customization_{$productId}_{$productAttributeId}"> {foreach from=$customizedDatas.$productId.$productAttributeId[$product.id_address_delivery] key='id_customization' item='customization' name='customizations'} <li name="customization"> <div data-id="deleteCustomizableProduct_{$id_customization|intval}_{$product.id_product|intval}_{$product.id_product_attribute|intval}_{$product.id_address_delivery|intval}" class="deleteCustomizableProduct"> <a class="ajax_cart_block_remove_link" href="{$link->getPageLink('cart', true, NULL, "delete=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_customization={$id_customization|intval}&token={$static_token}")|escape:'html':'UTF-8'}" rel="nofollow"> </a> </div> {if isset($customization.datas.$CUSTOMIZE_TEXTFIELD.0)} {$customization.datas.$CUSTOMIZE_TEXTFIELD.0.value|replace:"<br />":" "|truncate:28:'...'|escape:'html':'UTF-8'} {else} {l s='Customization #%d:' sprintf=$id_customization|intval mod='blockcart'} {/if} </li> {/foreach} </ul> {if !isset($product.attributes_small)}</dd>{/if} {/if} {if isset($product.attributes_small)}</dd>{/if} {/foreach} </dl> </div> {/if} <p class="cart_block_no_products{if $products} unvisible{/if}"> {l s='No products' mod='blockcart'} </p> {if $discounts|@count > 0} <table class="vouchers mini-cart-vouchers{if $discounts|@count == 0} unvisible{/if}"> {foreach from=$discounts item=discount} {if $discount.value_real > 0} <tr class="bloc_cart_voucher" data-id="bloc_cart_voucher_{$discount.id_discount|intval}"> <td class="quantity">1x</td> <td class="name" title="{$discount.description}"> {$discount.name|truncate:18:'...'|escape:'html':'UTF-8'} </td> <td class="price"> -{if $priceDisplay == 1}{convertPrice price=$discount.value_tax_exc}{else}{convertPrice price=$discount.value_real}{/if} </td> <td class="delete"> {if strlen($discount.code)} <a class="delete_voucher" href="{$link->getPageLink("$order_process", true)}?deleteDiscount={$discount.id_discount|intval}" title="{l s='Delete' mod='blockcart'}" rel="nofollow"> <i class="icon-remove-sign"></i> </a> {/if} </td> </tr> {/if} {/foreach} </table> {/if} {assign var='free_ship' value=count($cart->getDeliveryAddressesWithoutCarriers(true, $errors))} <div class="cart-prices mini-cart-total"> <div class="cart-prices-line first-line"> <span class="price cart_block_shipping_cost ajax_cart_shipping_cost{if !($page_name == 'order-opc') && $shipping_cost_float == 0 && (!$cart_qties || $cart->isVirtualCart() || !isset($cart->id_address_delivery) || !$cart->id_address_delivery || $free_ship)} unvisible{/if}"> {if $shipping_cost_float == 0} {if !($page_name == 'order-opc') && (!isset($cart->id_address_delivery) || !$cart->id_address_delivery)}{l s='To be determined' mod='blockcart'}{else}{l s='Free shipping!' mod='blockcart'}{/if} {else} {$shipping_cost} {/if} </span> <span{if !($page_name == 'order-opc') && $shipping_cost_float == 0 && (!$cart_qties || $cart->isVirtualCart() || !isset($cart->id_address_delivery) || !$cart->id_address_delivery || $free_ship)} class="unvisible"{/if}> {l s='Shipping' mod='blockcart'} </span> </div> {if $show_wrapping} <div class="cart-prices-line"> {assign var='cart_flag' value='Cart::ONLY_WRAPPING'|constant} <span class="price cart_block_wrapping_cost"> {if $priceDisplay == 1} {convertPrice price=$cart->getOrderTotal(false, $cart_flag)}{else}{convertPrice price=$cart->getOrderTotal(true, $cart_flag)} {/if} </span> <span> {l s='Wrapping' mod='blockcart'} </span> </div> {/if} {if $show_tax && isset($tax_cost)} <div class="cart-prices-line"> <span class="price cart_block_tax_cost ajax_cart_tax_cost">{$tax_cost}</span> <span>{l s='Tax' mod='blockcart'}</span> </div> {/if} <div class="cart-prices-line last-line"> <span class="price cart_block_total ajax_block_cart_total">{$total}</span> <span>{l s='Total' mod='blockcart'}</span> </div> {if $use_taxes && $display_tax_label && $show_tax} <p> {if $priceDisplay == 0} {l s='Prices are tax included' mod='blockcart'} {elseif $priceDisplay == 1} {l s='Prices are tax excluded' mod='blockcart'} {/if} </p> {/if} </div> <p class="cart-buttons clearfix"> <a id="button_order_cart" class="btn btn-default button button-small pull-right" href="{$link->getPageLink("$order_process", true)|escape:"html":"UTF-8"}" title="{l s='Check out' mod='blockcart'}" rel="nofollow"> <span> {l s='Check out' mod='blockcart'}<i class="icon-chevron-right right"></i> </span> </a> </p> </div> </div> </div><!-- .cart_block --> {/if} </div> {if isset($blockcart_top) && $blockcart_top} </div> {/if} {counter name=active_overlay assign=active_overlay} {if !$PS_CATALOG_MODE && $active_overlay == 1} <div id="layer_cart"> <div class="clearfix"> <div class="layer_cart_product col-xs-12 col-md-6"> <span class="cross" title="{l s='Close window' mod='blockcart'}"></span> <span class="title"> <i class="icon-check"></i>{l s='Product successfully added to your shopping cart' mod='blockcart'} </span> <div class="product-image-container layer_cart_img"> </div> <div class="layer_cart_product_info"> <span id="layer_cart_product_title" class="product-name"></span> <span id="layer_cart_product_attributes"></span> <div> <strong class="dark">{l s='Quantity' mod='blockcart'}</strong> <span id="layer_cart_product_quantity"></span> </div> <div> <strong class="dark">{l s='Total' mod='blockcart'}</strong> <span id="layer_cart_product_price"></span> </div> </div> </div> <div class="layer_cart_cart col-xs-12 col-md-6"> <span class="title"> <!-- Plural Case [both cases are needed because page may be updated in Javascript] --> <span class="ajax_cart_product_txt_s {if $cart_qties < 2} unvisible{/if}"> {l s='There are [1]%d[/1] items in your cart.' mod='blockcart' sprintf=[$cart_qties] tags=['<span class="ajax_cart_quantity">']} </span> <!-- Singular Case [both cases are needed because page may be updated in Javascript] --> <span class="ajax_cart_product_txt {if $cart_qties > 1} unvisible{/if}"> {l s='There is 1 item in your cart.' mod='blockcart'} </span> </span> <div class="layer_cart_row"> <strong class="dark"> {l s='Total products' mod='blockcart'} {if $use_taxes && $display_tax_label && $show_tax} {if $priceDisplay == 1} {l s='(tax excl.)' mod='blockcart'} {else} {l s='(tax incl.)' mod='blockcart'} {/if} {/if} </strong> <span class="ajax_block_products_total"> {if $cart_qties > 0} {convertPrice price=$cart->getOrderTotal(false, Cart::ONLY_PRODUCTS)} {/if} </span> </div> {if $show_wrapping} <div class="layer_cart_row"> <strong class="dark"> {l s='Wrapping' mod='blockcart'} {if $use_taxes && $display_tax_label && $show_tax} {if $priceDisplay == 1} {l s='(tax excl.)' mod='blockcart'} {else} {l s='(tax incl.)' mod='blockcart'} {/if} {/if} </strong> <span class="price cart_block_wrapping_cost"> {if $priceDisplay == 1} {convertPrice price=$cart->getOrderTotal(false, Cart::ONLY_WRAPPING)} {else} {convertPrice price=$cart->getOrderTotal(true, Cart::ONLY_WRAPPING)} {/if} </span> </div> {/if} <div class="layer_cart_row"> <strong class="dark{if $shipping_cost_float == 0 && (!$cart_qties || $cart->isVirtualCart() || !isset($cart->id_address_delivery) || !$cart->id_address_delivery)} unvisible{/if}"> {l s='Total shipping' mod='blockcart'} {if $use_taxes && $display_tax_label && $show_tax}{if $priceDisplay == 1}{l s='(tax excl.)' mod='blockcart'}{else}{l s='(tax incl.)' mod='blockcart'}{/if}{/if} </strong> <span class="ajax_cart_shipping_cost{if $shipping_cost_float == 0 && (!$cart_qties || $cart->isVirtualCart() || !isset($cart->id_address_delivery) || !$cart->id_address_delivery)} unvisible{/if}"> {if $shipping_cost_float == 0} {if (!isset($cart->id_address_delivery) || !$cart->id_address_delivery)}{l s='To be determined' mod='blockcart'}{else}{l s='Free shipping!' mod='blockcart'}{/if} {else} {$shipping_cost} {/if} </span> </div> {if $show_tax && isset($tax_cost)} <div class="layer_cart_row"> <strong class="dark">{l s='Tax' mod='blockcart'}</strong> <span class="price cart_block_tax_cost ajax_cart_tax_cost">{$tax_cost}</span> </div> {/if} <div class="layer_cart_row"> <strong class="dark"> {l s='Total' mod='blockcart'} {if $use_taxes && $display_tax_label && $show_tax} {if $priceDisplay == 1} {l s='(tax excl.)' mod='blockcart'} {else} {l s='(tax incl.)' mod='blockcart'} {/if} {/if} </strong> <span class="ajax_block_cart_total"> {if $cart_qties > 0} {if $priceDisplay == 1} {convertPrice price=$cart->getOrderTotal(false)} {else} {convertPrice price=$cart->getOrderTotal(true)} {/if} {/if} </span> </div> <div class="button-container"> <span class="continue btn btn-default button exclusive-medium" title="{l s='Continue shopping' mod='blockcart'}"> <span> <i class="icon-chevron-left left"></i>{l s='Continue shopping' mod='blockcart'} </span> </span> <a class="btn btn-default button button-medium pull-right" href="{$link->getPageLink("$order_process", true)|escape:"html":"UTF-8"}" title="{l s='Proceed to checkout' mod='blockcart'}" rel="nofollow"> <span> {l s='Proceed to checkout' mod='blockcart'}<i class="icon-chevron-right right"></i> </span> </a> </div> </div> </div> <div class="crossseling"></div> </div> <!-- #layer_cart --> <div class="layer_cart_overlay"></div> {/if} {strip} {addJsDef CUSTOMIZE_TEXTFIELD=$CUSTOMIZE_TEXTFIELD} {addJsDef img_dir=$img_dir|escape:'quotes':'UTF-8'} {addJsDef generated_date=$smarty.now|intval} {addJsDef ajax_allowed=$ajax_allowed|boolval} {addJsDef hasDeliveryAddress=(isset($cart->id_address_delivery) && $cart->id_address_delivery)} {addJsDefL name=customizationIdMessage}{l s='Customization #' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=removingLinkText}{l s='remove this product from my cart' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=freeShippingTranslation}{l s='Free shipping!' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=freeProductTranslation}{l s='Free!' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=delete_txt}{l s='Delete' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=toBeDetermined}{l s='To be determined' mod='blockcart' js=1}{/addJsDefL} {/strip} <!-- /MODULE Block cart --> /themes/pf_golmart/modules/blockcart/blockcart-json.tpl {* * 2007-2015 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 <contact@prestashop.com> * @copyright 2007-2015 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {ldelim} "products": [ {if $products} {foreach from=$products item=product name='products'} {assign var='productId' value=$product.id_product} {assign var='productAttributeId' value=$product.id_product_attribute} {ldelim} "id": {$product.id_product|intval}, "link": {$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|json_encode}, "quantity": {$product.cart_quantity|intval}, "image": {$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')|json_encode}, "image_cart": {$link->getImageLink($product.link_rewrite, $product.id_image, 'cart_default')|json_encode}, "priceByLine": {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice|json_encode p=$product.total}{else}{displayWtPrice|json_encode p=$product.total_wt}{/if}, "name": {$product.name|trim|html_entity_decode:2:'UTF-8'|json_encode}, "price": {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice|json_encode p=$product.total}{else}{displayWtPrice|json_encode p=$product.total_wt}{/if}, "price_float": {$product.total|floatval|json_encode}, "idCombination": {if isset($product.attributes_small)}{$productAttributeId|intval}{else}0{/if}, "idAddressDelivery": {if isset($product.id_address_delivery)}{$product.id_address_delivery|intval}{else}0{/if}, "is_gift": {if isset($product.is_gift) && $product.is_gift}true{else}false{/if}, {if isset($product.attributes_small)} "hasAttributes": true, "attributes": {$product.attributes_small|json_encode}, {else} "hasAttributes": false, {/if} "hasCustomizedDatas": {if isset($customizedDatas.$productId.$productAttributeId)}true{else}false{/if}, "customizedDatas": [ {if isset($customizedDatas.$productId.$productAttributeId[$product.id_address_delivery])} {foreach from=$customizedDatas.$productId.$productAttributeId[$product.id_address_delivery] key='id_customization' item='customization' name='customizedDatas'}{ldelim} {* This empty line was made in purpose (product addition debug), please leave it here *} "customizationId": {$id_customization|intval}, "quantity": {$customization.quantity|intval}, "datas": [ {foreach from=$customization.datas key='type' item='datas' name='customization'} {ldelim} "type": {$type|json_encode}, "datas": [ {foreach from=$datas key='index' item='data' name='datas'} {ldelim} "index": {$index|intval}, "value": {Tools::nl2br($data.value)|json_encode}, "truncatedValue": {Tools::nl2br($data.value|truncate:28:'...')|json_encode} {rdelim}{if !$smarty.foreach.datas.last},{/if} {/foreach}] {rdelim}{if !$smarty.foreach.customization.last},{/if} {/foreach} ] {rdelim}{if !$smarty.foreach.customizedDatas.last},{/if} {/foreach} {/if} ] {rdelim}{if !$smarty.foreach.products.last},{/if} {/foreach}{/if} ], "discounts": [ {if $discounts}{foreach from=$discounts item=discount name='discounts'} {ldelim} "id": {$discount.id_discount|intval}, "name": {$discount.name|trim|truncate:18:'...'|json_encode}, "description": {$discount.description|json_encode}, "nameDescription": {$discount.name|cat:' : '|cat:$discount.description|trim|truncate:18:'...'|json_encode}, "code": {$discount.code|json_encode}, "link": {$link->getPageLink("$order_process", true, NULL, "deleteDiscount={$discount.id_discount}")|json_encode}, "price": {if $priceDisplay == 1}{convertPrice|json_encode price=$discount.value_tax_exc}{else}{convertPrice|json_encode price=$discount.value_real}{/if}, "price_float": {if $priceDisplay == 1}{$discount.value_tax_exc|json_encode}{else}{$discount.value_real|json_encode}{/if} {rdelim} {if !$smarty.foreach.discounts.last},{/if} {/foreach}{/if} ], "shippingCost": {$shipping_cost|json_encode}, "shippingCostFloat": {$shipping_cost_float|json_encode}, {if isset($tax_cost)} "taxCost": {$tax_cost|json_encode}, {/if} "wrappingCost": {$wrapping_cost|json_encode}, "nbTotalProducts": {$nb_total_products|intval}, "nbTotalProducts": {$nb_total_products|intval}, "nbTotalProductsRows": {if isset($cart_rows)}{$cart_rows|intval}{else}-1{/if}, "total": {$total|json_encode}, "productTotal": {$product_total|json_encode}, "freeShipping": {displayWtPrice|json_encode p=$free_shipping}, "freeShippingFloat": {$free_shipping|json_encode}, "free_ship": {(!$shipping_cost_float && !count($cart->getDeliveryAddressesWithoutCarriers(true, $errors_back)))|json_encode}, "isVirtualCart": {$cart->isVirtualCart()|json_encode}, {if isset($errors) && $errors} "hasError" : true, "errors" : [ {foreach from=$errors key=k item=error name='errors'} {$error|json_encode} {if !$smarty.foreach.errors.last},{/if} {/foreach} ] {else} "hasError" : false {/if} {rdelim} /themes/pf_golmart/js/modules/blockcart/ajax-cart.js /* * 2007-2015 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 <contact@prestashop.com> * @copyright 2007-2015 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(){ ajaxCart.overrideButtonsInThePage(); $(document).on('click', '.block_cart_collapse', function(e){ e.preventDefault(); ajaxCart.collapse(); }); $(document).on('click', '.block_cart_expand', function(e){ e.preventDefault(); ajaxCart.expand(); }); var current_timestamp = parseInt(new Date().getTime() / 1000); if (typeof $('.ajax_cart_quantity').html() == 'undefined' || (typeof generated_date != 'undefined' && generated_date != null && (parseInt(generated_date) + 30) < current_timestamp)) ajaxCart.refresh(); /* roll over cart */ var cart_block = new HoverWatcher('#header .cart_block'); var shopping_cart = new HoverWatcher('#header .shopping_cart'); var is_touch_enabled = false; if ('ontouchstart' in document.documentElement) is_touch_enabled = true; $(document).on('click', '#header .shopping_cart > a:first', function(e){ e.preventDefault(); e.stopPropagation(); // Simulate hover when browser says device is touch based if (is_touch_enabled) { if ($(this).next('.cart_block:visible').length && !cart_block.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); else if (ajaxCart.nb_total_products > 0 || parseInt($('.ajax_cart_quantity').html()) > 0) $("#header .cart_block").stop(true, true).slideDown(450); return; } else window.location.href = $(this).attr('href'); }); $("#header .shopping_cart a:first").hover( function(){ if (ajaxCart.nb_total_products > 0 || parseInt($('.ajax_cart_quantity').html()) > 0) $("#header .cart_block").stop(true, true).slideDown(450); }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver() && !cart_block.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); $("#header .cart_block").hover( function(){ }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); $(document).on('click', '.delete_voucher', function(e){ e.preventDefault(); $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, async: true, cache: false, url:$(this).attr('href') + '?rand=' + new Date().getTime() }); $(this).parent().parent().remove(); ajaxCart.refresh(); if ($('body').attr('id') == 'order' || $('body').attr('id') == 'order-opc') { if (typeof(updateAddressSelection) != 'undefined') updateAddressSelection(); else location.reload(); } }); $(document).on('click', '#cart_navigation input', function(e){ $(this).prop('disabled', 'disabled').addClass('disabled'); $(this).closest("form").get(0).submit(); }); $(document).on('click', '#layer_cart .cross, #layer_cart .continue, .layer_cart_overlay', function(e){ e.preventDefault(); $('.layer_cart_overlay').hide(); $('#layer_cart').fadeOut('fast'); }); $('#columns #layer_cart, #columns .layer_cart_overlay').detach().prependTo('#columns'); }); //JS Object : update the cart by ajax actions var ajaxCart = { nb_total_products: 0, //override every button in the page in relation to the cart overrideButtonsInThePage : function(){ //for every 'add' buttons... $(document).off('click', '.ajax_add_to_cart_button').on('click', '.ajax_add_to_cart_button', function(e){ e.preventDefault(); var idProduct = parseInt($(this).data('id-product')); var idProductAttribute = parseInt($(this).data('id-product-attribute')); //var minimalQuantity = parseInt($(this).data('minimal_quantity')); var idInput = '#quantity_wanted_' + idProduct; var minimalQuantity = $(idInput).val(); console.log(minimalQuantity); if (!minimalQuantity) minimalQuantity = 1; if ($(this).prop('disabled') != 'disabled') ajaxCart.add(idProduct, idProductAttribute, false, this, minimalQuantity); }); //for product page 'add' button... if ($('.cart_block').length) { $(document).off('click', '#add_to_cart button').on('click', '#add_to_cart button', function(e){ e.preventDefault(); ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null); }); } //for 'delete' buttons in the cart block... $(document).off('click', '.cart_block_list .ajax_cart_block_remove_link').on('click', '.cart_block_list .ajax_cart_block_remove_link', function(e){ e.preventDefault(); // Customized product management var customizationId = 0; var productId = 0; var productAttributeId = 0; var customizableProductDiv = $($(this).parent().parent()).find("div[data-id^=deleteCustomizableProduct_]"); var idAddressDelivery = false; if (customizableProductDiv && $(customizableProductDiv).length) { var ids = customizableProductDiv.data('id').split('_'); if (typeof(ids[1]) != 'undefined') { customizationId = parseInt(ids[1]); productId = parseInt(ids[2]); if (typeof(ids[3]) != 'undefined') productAttributeId = parseInt(ids[3]); if (typeof(ids[4]) != 'undefined') idAddressDelivery = parseInt(ids[4]); } } // Common product management if (!customizationId) { //retrieve idProduct and idCombination from the displayed product in the block cart var firstCut = $(this).parent().parent().data('id').replace('cart_block_product_', ''); firstCut = firstCut.replace('deleteCustomizableProduct_', ''); ids = firstCut.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) != 'undefined') productAttributeId = parseInt(ids[1]); if (typeof(ids[2]) != 'undefined') idAddressDelivery = parseInt(ids[2]); } // Removing product from the cart ajaxCart.remove(productId, productAttributeId, customizationId, idAddressDelivery); }); }, // try to expand the cart expand : function(){ if ($('.cart_block_list').hasClass('collapsed')) { $('.cart_block_list.collapsed').slideDown({ duration: 450, complete: function(){ $(this).parent().show(); // parent is hidden in global.js::accordion() $(this).addClass('expanded').removeClass('collapsed'); } }); // save the expand statut in the user cookie $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'ajax_blockcart_display=expand', complete: function(){ $('.block_cart_expand').fadeOut('fast', function(){ $('.block_cart_collapse').fadeIn('fast'); }); } }); } }, // try to collapse the cart collapse : function(){ if ($('.cart_block_list').hasClass('expanded')) { $('.cart_block_list.expanded').slideUp('slow', function(){ $(this).addClass('collapsed').removeClass('expanded'); }); // save the expand statut in the user cookie $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'ajax_blockcart_display=collapse' + '&rand=' + new Date().getTime(), complete: function(){ $('.block_cart_collapse').fadeOut('fast', function(){ $('.block_cart_expand').fadeIn('fast'); }); } }); } }, // Fix display when using back and previous browsers buttons refresh : function(){ $.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&token=' + static_token, success: function(jsonData) { ajaxCart.updateCart(jsonData); } }); }, // Update the cart information updateCartInformation : function (jsonData, addedFromProductPage){ ajaxCart.updateCart(jsonData); //reactive the button when adding has finished if (addedFromProductPage) { $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); if (!jsonData.hasError || jsonData.hasError == false) $('#add_to_cart button').addClass('added'); else $('#add_to_cart button').removeClass('added'); } else $('.ajax_add_to_cart_button').removeProp('disabled'); }, // close fancybox updateFancyBox : function (){}, // add a product in the cart via ajax add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist){ if (addedFromProductPage && !checkCustomizations()) { if (contentOnly) { var productUrl = window.document.location.href + ''; var data = productUrl.replace('content_only=1', ''); window.parent.document.location.href = data; return; } if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + fieldRequired + '</p>' } ], { padding: 0 }); else alert(fieldRequired); return; } //disabled the button when adding to not double add if user double click if (addedFromProductPage) { $('#add_to_cart button').prop('disabled', 'disabled').addClass('disabled'); $('.filled').removeClass('filled'); } else $(callerElement).prop('disabled', 'disabled'); if ($('.cart_block_list').hasClass('collapsed')) this.expand(); //send the ajax request to the server $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '' + '&id_customization=' + ((typeof customizationId !== 'undefined') ? customizationId : 0)), success: function(jsonData,textStatus,jqXHR) { // add appliance to whishlist module if (whishlist && !jsonData.errors) WishlistAddProductCart(whishlist[0], idProduct, idCombination, whishlist[1]); if (!jsonData.hasError) { if (contentOnly) window.parent.ajaxCart.updateCartInformation(jsonData, addedFromProductPage); else ajaxCart.updateCartInformation(jsonData, addedFromProductPage); if (jsonData.crossSelling) $('.crossseling').html(jsonData.crossSelling); if (idCombination) $(jsonData.products).each(function(){ if (this.id != undefined && this.id == parseInt(idProduct) && this.idCombination == parseInt(idCombination)) if (contentOnly) window.parent.ajaxCart.updateLayer(this); else ajaxCart.updateLayer(this); }); else $(jsonData.products).each(function(){ if (this.id != undefined && this.id == parseInt(idProduct)) if (contentOnly) window.parent.ajaxCart.updateLayer(this); else ajaxCart.updateLayer(this); }); if (contentOnly) parent.$.fancybox.close(); } else { if (contentOnly) window.parent.ajaxCart.updateCart(jsonData); else ajaxCart.updateCart(jsonData); if (addedFromProductPage) $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); else $(callerElement).removeProp('disabled'); } emptyCustomizations(); }, error: function(XMLHttpRequest, textStatus, errorThrown) { var error = "Impossible to add the product to the cart.<br/>textStatus: '" + textStatus + "'<br/>errorThrown: '" + errorThrown + "'<br/>responseText:<br/>" + XMLHttpRequest.responseText; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + error + '</p>' }], { padding: 0 }); else alert(error); //reactive the button when adding has finished if (addedFromProductPage) $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); else $(callerElement).removeProp('disabled'); } }); }, //remove a product from the cart via ajax remove : function(idProduct, idCombination, customizationId, idAddressDelivery){ //send the ajax request to the server $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&delete=1&id_product=' + idProduct + '&ipa=' + ((idCombination != null && parseInt(idCombination)) ? idCombination : '') + ((customizationId && customizationId != null) ? '&id_customization=' + customizationId : '') + '&id_address_delivery=' + idAddressDelivery + '&token=' + static_token + '&ajax=true', success: function(jsonData) { ajaxCart.updateCart(jsonData); if ($('body').attr('id') == 'order' || $('body').attr('id') == 'order-opc') deleteProductFromSummary(idProduct+'_'+idCombination+'_'+customizationId+'_'+idAddressDelivery); }, error: function() { var error = 'ERROR: unable to delete the product'; if (!!$.prototype.fancybox) { $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: error } ], { padding: 0 }); } else alert(error); } }); }, //hide the products displayed in the page but no more in the json data hideOldProducts : function(jsonData){ //delete an eventually removed product of the displayed cart (only if cart is not empty!) if ($('.cart_block_list:first dl.products').length > 0) { var removedProductId = null; var removedProductData = null; var removedProductDomId = null; //look for a product to delete... $('.cart_block_list:first dl.products dt').each(function(){ //retrieve idProduct and idCombination from the displayed product in the block cart var domIdProduct = $(this).data('id'); var firstCut = domIdProduct.replace('cart_block_product_', ''); var ids = firstCut.split('_'); //try to know if the current product is still in the new list var stayInTheCart = false; for (aProduct in jsonData.products) { //we've called the variable aProduct because IE6 bug if this variable is called product //if product has attributes if (jsonData.products[aProduct]['id'] == ids[0] && (!ids[1] || jsonData.products[aProduct]['idCombination'] == ids[1])) { stayInTheCart = true; // update the product customization display (when the product is still in the cart) ajaxCart.hideOldProductCustomizations(jsonData.products[aProduct], domIdProduct); } } //remove product if it's no more in the cart if (!stayInTheCart) { removedProductId = $(this).data('id'); if (removedProductId != null) { var firstCut = removedProductId.replace('cart_block_product_', ''); var ids = firstCut.split('_'); $('dt[data-id="' + removedProductId + '"]').addClass('strike').fadeTo('slow', 0, function(){ $(this).slideUp('slow', function(){ $(this).remove(); // If the cart is now empty, show the 'no product in the cart' message and close detail if($('.cart_block:first dl.products dt').length == 0) { $('.ajax_cart_quantity').html('0'); $("#header .cart_block").stop(true, true).slideUp(200); $('.cart_block_no_products:hidden').slideDown(450); $('.cart_block dl.products').remove(); } }); }); $('dd[data-id="cart_block_combination_of_' + ids[0] + (ids[1] ? '_'+ids[1] : '') + (ids[2] ? '_'+ids[2] : '') + '"]').fadeTo('fast', 0, function(){ $(this).slideUp('fast', function(){ $(this).remove(); }); }); } } }); } }, hideOldProductCustomizations : function (product, domIdProduct){ var customizationList = $('ul[data-id="customization_' + product['id'] + '_' + product['idCombination'] + '"]'); if(customizationList.length > 0) { $(customizationList).find("li").each(function(){ $(this).find("div").each(function(){ var customizationDiv = $(this).data('id'); var tmp = customizationDiv.replace('deleteCustomizableProduct_', ''); var ids = tmp.split('_'); if ((parseInt(product.idCombination) == parseInt(ids[2])) && !ajaxCart.doesCustomizationStillExist(product, ids[0])) $('div[data-id="' + customizationDiv + '"]').parent().addClass('strike').fadeTo('slow', 0, function(){ $(this).slideUp('slow'); $(this).remove(); }); }); }); } var removeLinks = $('.deleteCustomizableProduct[data-id="' + domIdProduct + '"]').find('.ajax_cart_block_remove_link'); if (!product.hasCustomizedDatas && !removeLinks.length) $('div[data-id="' + domIdProduct + '"]' + ' span.remove_link').html('<a class="ajax_cart_block_remove_link" rel="nofollow" href="' + baseUri + '?controller=cart&delete=1&id_product=' + product['id'] + '&ipa=' + product['idCombination'] + '&token=' + static_token + '"> </a>'); if (product.is_gift) $('div[data-id="' + domIdProduct + '"]' + ' span.remove_link').html(''); }, doesCustomizationStillExist : function (product, customizationId){ var exists = false; $(product.customizedDatas).each(function(){ if (this.customizationId == customizationId) { exists = true; // This return does not mean that we found nothing but simply break the loop return false; } }); return (exists); }, //refresh display of vouchers (needed for vouchers in % of the total) refreshVouchers : function (jsonData){ if (typeof(jsonData.discounts) == 'undefined' || jsonData.discounts.length == 0) $('.vouchers').hide(); else { $('.vouchers tbody').html(''); for (i=0;i<jsonData.discounts.length;i++) { if (parseFloat(jsonData.discounts[i].price_float) > 0) { var delete_link = ''; if (jsonData.discounts[i].code.length) delete_link = '<a class="delete_voucher" href="'+jsonData.discounts[i].link+'" title="'+delete_txt+'"><i class="icon-remove-sign"></i></a>'; $('.vouchers tbody').append($( '<tr class="bloc_cart_voucher" data-id="bloc_cart_voucher_'+jsonData.discounts[i].id+'">' +' <td class="quantity">1x</td>' +' <td class="name" title="'+jsonData.discounts[i].description+'">'+jsonData.discounts[i].name+'</td>' +' <td class="price">-'+jsonData.discounts[i].price+'</td>' +' <td class="delete">' + delete_link + '</td>' +'</tr>' )); } } $('.vouchers').show(); } }, // Update product quantity updateProductQuantity : function (product, quantity){ $('dt[data-id=cart_block_product_' + product.id + '_' + (product.idCombination ? product.idCombination : '0')+ '_' + (product.idAddressDelivery ? product.idAddressDelivery : '0') + '] .quantity').fadeTo('fast', 0, function(){ $(this).text(quantity); $(this).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1); }); }); }); }); }); }, //display the products witch are in json data but not already displayed displayNewProducts : function(jsonData){ //add every new products or update displaying of every updated products $(jsonData.products).each(function(){ //fix ie6 bug (one more item 'undefined' in IE6) if (this.id != undefined) { //create a container for listing the products and hide the 'no product in the cart' message (only if the cart was empty) if ($('.cart_block:first dl.products').length == 0) { $('.cart_block_no_products').before('<dl class="products"></dl>'); $('.cart_block_no_products').hide(); } //if product is not in the displayed cart, add a new product's line var domIdProduct = this.id + '_' + (this.idCombination ? this.idCombination : '0') + '_' + (this.idAddressDelivery ? this.idAddressDelivery : '0'); var domIdProductAttribute = this.id + '_' + (this.idCombination ? this.idCombination : '0'); if ($('dt[data-id="cart_block_product_' + domIdProduct + '"]').length == 0) { var productId = parseInt(this.id); var productAttributeId = (this.hasAttributes ? parseInt(this.attributes) : 0); var content = '<dt class="unvisible" data-id="cart_block_product_' + domIdProduct + '">'; var name = $.trim($('<span />').html(this.name).text()); name = (name.length > 12 ? name.substring(0, 10) + '...' : name); content += '<a class="cart-images" href="' + this.link + '" title="' + name + '"><img src="' + this.image_cart + '" alt="' + this.name +'"></a>'; content += '<div class="cart-info"><div class="product-name">' + '<span class="quantity-formated"><span class="quantity">' + this.quantity + '</span> x </span><a href="' + this.link + '" title="' + this.name + '" class="cart_block_product_name">' + name + '</a></div>'; if (this.hasAttributes) content += '<div class="product-atributes"><a href="' + this.link + '" title="' + this.name + '">' + this.attributes + '</a></div>'; if (typeof(freeProductTranslation) != 'undefined') content += '<span class="price">' + (parseFloat(this.price_float) > 0 ? this.priceByLine : freeProductTranslation) + '</span></div>'; if (typeof(this.is_gift) == 'undefined' || this.is_gift == 0) content += '<span class="remove_link"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&token=' + static_token + (this.hasAttributes ? '&ipa=' + parseInt(this.idCombination) : '') + '"> </a></span>'; else content += '<span class="remove_link"></span>'; content += '</dt>'; if (this.hasAttributes) content += '<dd data-id="cart_block_combination_of_' + domIdProduct + '" class="unvisible">'; if (this.hasCustomizedDatas) content += ajaxCart.displayNewCustomizedDatas(this); if (this.hasAttributes) content += '</dd>'; $('.cart_block dl.products').append(content); } //else update the product's line else { var jsonProduct = this; if($.trim($('dt[data-id="cart_block_product_' + domIdProduct + '"] .quantity').html()) != jsonProduct.quantity || $.trim($('dt[data-id="cart_block_product_' + domIdProduct + '"] .price').html()) != jsonProduct.priceByLine) { // Usual product if (!this.is_gift) $('dt[data-id="cart_block_product_' + domIdProduct + '"] .price').text(jsonProduct.priceByLine); else $('dt[data-id="cart_block_product_' + domIdProduct + '"] .price').html(freeProductTranslation); ajaxCart.updateProductQuantity(jsonProduct, jsonProduct.quantity); // Customized product if (jsonProduct.hasCustomizedDatas) { customizationFormatedDatas = ajaxCart.displayNewCustomizedDatas(jsonProduct); if (!$('ul[data-id="customization_' + domIdProductAttribute + '"]').length) { if (jsonProduct.hasAttributes) $('dd[data-id="cart_block_combination_of_' + domIdProduct + '"]').append(customizationFormatedDatas); else $('.cart_block dl.products').append(customizationFormatedDatas); } else { $('ul[data-id="customization_' + domIdProductAttribute + '"]').html(''); $('ul[data-id="customization_' + domIdProductAttribute + '"]').append(customizationFormatedDatas); } } } } $('.cart_block dl.products .unvisible').slideDown(450).removeClass('unvisible'); var removeLinks = $('dt[data-id="cart_block_product_' + domIdProduct + '"]').find('a.ajax_cart_block_remove_link'); if (this.hasCustomizedDatas && removeLinks.length) $(removeLinks).each(function(){ $(this).remove(); }); } }); }, displayNewCustomizedDatas : function(product){ var content = ''; var productId = parseInt(product.id); var productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination); var hasAlreadyCustomizations = $('ul[data-id="customization_' + productId + '_' + productAttributeId + '"]').length; if (!hasAlreadyCustomizations) { if (!product.hasAttributes) content += '<dd data-id="cart_block_combination_of_' + productId + '" class="unvisible">'; if ($('ul[data-id="customization_' + productId + '_' + productAttributeId + '"]').val() == undefined) content += '<ul class="cart_block_customizations" data-id="customization_' + productId + '_' + productAttributeId + '">'; } $(product.customizedDatas).each(function(){ var done = 0; customizationId = parseInt(this.customizationId); productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination); content += '<li name="customization"><div class="deleteCustomizableProduct" data-id="deleteCustomizableProduct_' + customizationId + '_' + productId + '_' + (productAttributeId ? productAttributeId : '0') + '"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&ipa=' + productAttributeId + '&id_customization=' + customizationId + '&token=' + static_token + '"></a></div>'; // Give to the customized product the first textfield value as name $(this.datas).each(function(){ if (this['type'] == CUSTOMIZE_TEXTFIELD) { $(this.datas).each(function(){ if (this['index'] == 0) { content += ' ' + this.truncatedValue.replace(/<br \/>/g, ' '); done = 1; return false; } }) } }); // If the customized product did not have any textfield, it will have the customizationId as name if (!done) content += customizationIdMessage + customizationId; if (!hasAlreadyCustomizations) content += '</li>'; // Field cleaning if (customizationId) { $('#uploadable_files li div.customizationUploadBrowse img').remove(); $('#text_fields input').attr('value', ''); } }); if (!hasAlreadyCustomizations) { content += '</ul>'; if (!product.hasAttributes) content += '</dd>'; } return (content); }, updateLayer : function(product){ $('#layer_cart_product_title').text(product.name); $('#layer_cart_product_attributes').text(''); if (product.hasAttributes && product.hasAttributes == true) $('#layer_cart_product_attributes').html(product.attributes); $('#layer_cart_product_price').text(product.price); $('#layer_cart_product_quantity').text(product.quantity); $('.layer_cart_img').html('<img class="layer_cart_img img-responsive" src="' + product.image + '" alt="' + product.name + '" title="' + product.name + '" />'); var n = parseInt($(window).scrollTop()) + 'px'; $('.layer_cart_overlay').css('width','100%'); $('.layer_cart_overlay').css('height','100%'); $('.layer_cart_overlay').show(); $('#layer_cart').css({'top': n}).fadeIn('fast'); crossselling_serialScroll(); }, //genarally update the display of the cart updateCart : function(jsonData){ //user errors display if (jsonData.hasError) { var errors = ''; for (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); } else { ajaxCart.updateCartEverywhere(jsonData); ajaxCart.hideOldProducts(jsonData); ajaxCart.displayNewProducts(jsonData); ajaxCart.refreshVouchers(jsonData); //update 'first' and 'last' item classes $('.cart_block .products dt').removeClass('first_item').removeClass('last_item').removeClass('item'); $('.cart_block .products dt:first').addClass('first_item'); $('.cart_block .products dt:not(:first,:last)').addClass('item'); $('.cart_block .products dt:last').addClass('last_item'); } }, //update general cart informations everywhere in the page updateCartEverywhere : function(jsonData){ $('.ajax_cart_total').text($.trim(jsonData.productTotal)); if (typeof hasDeliveryAddress == 'undefined') hasDeliveryAddress = false; if (parseFloat(jsonData.shippingCostFloat) > 0) $('.ajax_cart_shipping_cost').text(jsonData.shippingCost).parent().find('.unvisible').show(); else if ((hasDeliveryAddress || typeof(orderProcess) !== 'undefined' && orderProcess == 'order-opc') && typeof(freeShippingTranslation) != 'undefined') $('.ajax_cart_shipping_cost').html(freeShippingTranslation); else if ((typeof toBeDetermined !== 'undefined') && !hasDeliveryAddress) $('.ajax_cart_shipping_cost').html(toBeDetermined); if (!jsonData.shippingCostFloat && !jsonData.free_ship) $('.ajax_cart_shipping_cost').parent().find('.unvisible').hide(); else if (hasDeliveryAddress && !jsonData.isVirtualCart) $('.ajax_cart_shipping_cost').parent().find('.unvisible').show(); $('.ajax_cart_tax_cost').text(jsonData.taxCost); $('.cart_block_wrapping_cost').text(jsonData.wrappingCost); $('.ajax_block_cart_total').text(jsonData.total); $('.ajax_block_products_total').text(jsonData.productTotal); $('.ajax_total_price_wt').text(jsonData.total_price_wt); if (parseFloat(jsonData.freeShippingFloat) > 0) { $('.ajax_cart_free_shipping').html(jsonData.freeShipping); $('.freeshipping').fadeIn(0); } else if (parseFloat(jsonData.freeShippingFloat) == 0) $('.freeshipping').fadeOut(0); this.nb_total_products = jsonData.nbTotalProducts; if (parseInt(jsonData.nbTotalProducts) > 0) { $('.ajax_cart_no_product').hide(); $('.ajax_cart_quantity').text(jsonData.nbTotalProducts); $('.ajax_cart_quantity').fadeIn('slow'); $('.ajax_cart_total').fadeIn('slow'); if (parseInt(jsonData.nbTotalProducts) > 1) { $('.ajax_cart_product_txt').each( function (){ $(this).hide(); }); $('.ajax_cart_product_txt_s').each( function (){ $(this).show(); }); } else { $('.ajax_cart_product_txt').each( function (){ $(this).show(); }); $('.ajax_cart_product_txt_s').each( function (){ $(this).hide(); }); } if (typeof jsonData.nbTotalProductsRows !== 'undefined') { if (parseInt(jsonData.nbTotalProductsRows) > 0){ // uncomment later, when you got there valid data $('#toSeeRows .ajax_cart_quantity').text(jsonData.nbTotalProductsRows); } } } else { $('.ajax_cart_quantity, .ajax_cart_product_txt_s, .ajax_cart_product_txt, .ajax_cart_total').each(function(){ $(this).hide(); }); $('.ajax_cart_no_product').show('slow'); } } }; function HoverWatcher(selector) { this.hovering = false; var self = this; this.isHoveringOver = function(){ return self.hovering; } $(selector).hover(function(){ self.hovering = true; }, function(){ self.hovering = false; }) } function crossselling_serialScroll() { if (!!$.prototype.bxSlider) $('#blockcart_caroucel').bxSlider({ minSlides: 2, maxSlides: 4, slideWidth: 178, slideMargin: 20, moveSlides: 1, infiniteLoop: false, hideControlOnEnd: true, pager: false }); } And it's all, all credits to @EvaF 1 Link to comment Share on other sites More sharing options...
Ezequielb Posted May 19, 2020 Share Posted May 19, 2020 Great, thanks for your support... I will try this solution... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now