Jump to content

Leaderboard

  1. D. Tengler

    D. Tengler

    Members


    • Points

      42

    • Content Count

      557


  2. ventura

    ventura

    Global Moderators


    • Points

      31

    • Content Count

      4,476


  3. JBW

    JBW

    Members


    • Points

      27

    • Content Count

      1,555


  4. PrestaServicePro

    • Points

      24

    • Content Count

      129



Popular Content

Showing content with the highest reputation since 04/28/2020 in Posts

  1. 2 points
    Hola @Canet Durante mis más de 15 años dedicados a la programación, he pasado por hostings caros, malos, lentos... alguno de mejor servicio pero los precios se elevaban. Hasta que hace 3 años di con Nicalia El soporte es excelente, trato directo y personalizado. Los servidores son una auténtica maravilla. Tienen planes elastic que son económicos y para meter un Prestashop van de maravilla. Aquí el enlace.
  2. 2 points
    Nous non plus, nous n'avons rien modifié sur ton site... Cordialement
  3. 2 points
    1ClickUpgrade non funziona per passare da 1.6 a 1.7, per utilizzarlo e' necessario prima aggiornare all'ultima versione del ramo 1.6, mi pare sia 1.6.1.24, poi si puo' passare da 1.6 a 1.7, il risultato pero' e' un sito non funzionante, che necessita di parecchi aggiustamenti. Per poter aggiornare con successo occorre usare un modulo come questo: https://addons.prestashop.com/en/data-migration-backup/8934-migrationpro-prestashop-upgrade-and-migrate-tool.html il modulo permette il trasferimento dei dati (prodotti, clienti, ordini, ecc) da una versione all'altra, poi si dovranno fare aggiustamenti sulle pagine CMS e sopratutto verificare la compatibilita' dei moduli, o meglio la disponibilita' di aggiornamenti per 1.7 dei moduli che si utilizzano, questo perche' i moduli della 1.6 non vengono importati e non e' detto che esistano per la versione 1.7
  4. 2 points
    Yes @El Patron this has gone long enough. I am locking this topic as I think it is not fair to talk about someone that can not replay and defend/explain. Moderators did try to contact him but with no luck, so do not what is happening to him. @vekia If you do get notification do let me know to unlock topic. For people that bought modules but did not get them, try to dispute payment if possible. For people that got modules but got issues, try to post in forums exact issue. There could be users that may me had similar issue or there are someone that could help with that specific issue. And there is a good practice to contact developers before buying a module/theme.
  5. 1 point
    Bonjour, est ce que vous utilisez cloudflare ? , si oui essayez de vider le cache du cdn
  6. 1 point
    Witaj, 1) Musisz podpiąć dodane strony do wybranych miejsc w Wygląd -> Link widget 2) Usunąłeś produkty modułem Oczyszczanie PrestaShop? W bazie danych usunąłeś ten produkt w tabeli ps_product czy też w ps_shop_product?
  7. 1 point
    Ciao, come intendi? Il codice l'ho scritto io, rende l'idea di come vada risolto il problema. La soluzione migliore e' un override della classe PaymentOption, oppure modifica direttamente la classe. Dovresti avere a disposione il totale dell'ordine all'interno della classe PaymentOption. Il codice inseriscilo sopra alla funzione che manda la mail.
  8. 1 point
    This module has been reported to the PrestaShop security: it has not been updated for a long time and contains some security issues. For this reason, the zip file has been removed and this disclaimer has been added. The topic will stay available for archival purpose. its been a while since i didnt share a module, well try this one and hopefully you like it. at first i want to put this module as a comercial one, since my submision takes a lot of time to be approved, and after sometimes the prestateam declined this module, then i decided to go as a free modules. And hope that if people like this module then they maybe will donate some to support me.... now you can manipulate your server file and/or folder right from you shop back office. comes with alot of features to made your life easier when you try to manage your shop. edit theme, tweak and/or hack something, even making a new module. with this module you can create new file/folder, upload file, view/edit file, rename/copy/move/delete/backup file or folder and you can change permission of files/folders. some cool features on this module * using onscreen popup to made easier when you manipulate the file. * syntax highlight, line numbering and wordwrap when you go on edit mode. * recrusive copy/move/delete file/folder. * icon for 30 filetypes (.php, .css, .js, .tpl, .html, .htm, .jpg, .jpeg, .gif, .png, .pdf, .swf, .fla, .zip, .rar, .doc, .docx, .xls, .csv, .mdb, .ppt, .sql, .exe, .xml, .avi, .mpg, .mov, .divx, .wav, .mp3) * and many more.... still at early version so any bug and sugestion please share & discuss in here WARNING: this module is a thankyouware so say thank you is a must and send some donation is a hope
  9. 1 point
    Follow my added path, there we will disable it via code side. Enter folder list of PrestaShop > themes > current_theme_folder > templates > catalog > _partials > product-prices.tpl Open this file and find the line: 95 ({l s='No tax' d='Shop.Theme.Catalog'}). {if !$configuration.taxes_enabled} {l s='No tax' d='Shop.Theme.Catalog'} {elseif $configuration.display_taxes_label} {$product.labels.tax_long} {/if} We need to change condition type like that: {if $configuration.display_taxes_label} {$product.labels.tax_long} {/if} Let me know about the resul
  10. 1 point
    Jajajaja ... gracias por la corrección @joseantgv Demasiados temas en mi cabeza
  11. 1 point
    nice module! Something I was looking for a long time
  12. 1 point
  13. 1 point
    Après Woocomerce, c'est cool pour les petites boutiques, si vous avez des centaines voir des milliers de produits, alors Prestahsop est bien meilleur que Wooommerce. Tous dépend de ce que vous souhaitez vendre. Après, dire au débutant de fuir Prestahsop, je trouve sa un brin ridicule. De grosse boite tourne sur Pretashop : Conforama, Peugeot, centre pompidou, Tartine & Chocolat...
  14. 1 point
    If you have uninstall the module, you lost data history about previous orders ! Contact your hosting provider to get a backup of table ps_pscheckout_order_matrice and will have to merge previous data with new data added in this table since you have reinstall it... This errors are not related to this module but to PrestaShop.
  15. 1 point
    I suppose it has to do with the folder name generated by github. It needs to be pdrecaptcha. For simplicity, I have created ready zip file to upload and install: https://github.com/hamsn/pdrecaptcha/blob/with_customer_reg/pdrecaptcha.zip Download the file above and try it. Best regards.
  16. 1 point
    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 license@prestashop.com 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}">&nbsp;</span> <span class="block_cart_collapse{if isset($colapseExpandStatus) && $colapseExpandStatus eq 'collapsed'} unvisible{/if}">&nbsp;</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>&nbsp;x&nbsp;</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'}">&nbsp;</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">&nbsp;</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'}&nbsp;{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 license@prestashop.com 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 license@prestashop.com 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&amp;delete=1&amp;id_product=' + product['id'] + '&amp;ipa=' + product['idCombination'] + '&amp;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>&nbsp;x&nbsp;</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&amp;delete=1&amp;id_product=' + productId + '&amp;token=' + static_token + (this.hasAttributes ? '&amp;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&amp;delete=1&amp;id_product=' + productId + '&amp;ipa=' + productAttributeId + '&amp;id_customization=' + customizationId + '&amp;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
  17. 1 point
    No, ti dovrebbe rilevare lo stesso numero di URL.
  18. 1 point
    Deja por el momento la 7.2.31 que es la mas compatible por el momento, según la versión de Prestashop también que utilices... Y en segundo lugar, desactiva también la opción de " CGI Support" no es necesaria y ralentiza el servidor.. Respecto al error, si tienes el modo mantenimiento activo no podemos ayudar 😂
  19. 1 point
    replace all to: {** * 2007-2019 PrestaShop and Contributors * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License 3.0 (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: * https://opensource.org/licenses/AFL-3.0 * 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 license@prestashop.com 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 https://www.prestashop.com for more information. * * @author PrestaShop SA <contact@prestashop.com> * @copyright 2007-2019 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) * International Registered Trademark & Property of PrestaShop SA *} <div id="js-product-list-header"> {if $listing.pagination.items_shown_from == 1} <!--<div class="block-category card card-block"> <h1 class="h1">{$category.name}</h1> <div class="block-category-inner"> {if $category.description} <div id="category-description" class="text-muted">{$category.description nofilter}</div> {/if} {if $category.image.large.url} <div class="category-cover"> <img src="{$category.image.large.url}" alt="{if !empty($category.image.legend)}{$category.image.legend}{else}{$category.name}{/if}"> </div> {/if} </div> </div>--> {/if} </div>
  20. 1 point
    /themes/your_theme/templates/catalog/product-add-to-cart.tpl Here you can modify {block name=product_quantity}
  21. 1 point
    Ademas de lo que te dice @Luisejo, normalmente estas plantillas dentro de los ficheros que has bajado deben haber 3 o 4 ficheros independientes o carpetas, cada carpeta tiene un diseño personalizado. También es posible que tenga que hacerse cambios importando algun fichero .xml, que debe incluir la documentación Depende de la plantilla, o usar configuraciones diferentes usando carpetas/ficheros o cambiando el diseño usando ficheros xml que se importan desde el modulo "editor de tema" de la plantilla
  22. 1 point
  23. 1 point
    Za prvi online susret pripremili smo kao i uvek zanimljiv i koristan sadržaj. Ukazaćemo na najveći i najčešći problem koji se javlja u prestashop prodavnici, a kojeg nismo ni svesni sve dok ne pokušamo da migriramo prodavnicu na noviju platformu. Pokazaćemo vam kako kako da pravilno dijagnostikujete i izolujete problem u bazi podataka, zatim koji su simptomi, i način kako da rešite/utklonite "loš kod" u bazi podataka. Naravno i ovaj put ćemo predstaviti fenomenalne mogućnosti softvera STORE MANAGER, u rešavanju baš ovakvih problema. For the first online meeting, we have prepared, as always, interesting and useful content. We will point out the biggest and most common problem that occurs in the Prestashop store, which we are not even aware of until we try to migrate the store to a newer platform. We will show you how to properly diagnose and isolate a problem in a database, then what the symptoms are, and how to fix / eliminate "bad code" in a database. Of course, this time as well, we will present the phenomenal possibilities of the STORE MANAGER software, in solving such problems.
  24. 1 point
    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; } }
  25. 1 point
    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(); } }
  26. 1 point
    Vérifier dans SEO&URL, Vérifier le template du thème
  27. 1 point
    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
  28. 1 point
    Pobralem caly folder na kompa i wystarczylo sprawdzic ppm->wlasciwosci i pokazalo ilosc folderow i zdjec zdjec to nawet mialem 120k a folderow okolo 70k. Udalo sie czesc skasowac znalezionym w internecie skryptem ale to nie dalo za duzo bo zostalo 45k okolo zdjec i tyle samo folderow. Ktore mi zuzywaja pliki INODES na hostingu
  29. 1 point
    Hi, Of course you are calling the function displayError with no argument . Tools::displayError(' Error text '); //you should this Tools::displayError(); // instead of this with no argument . And also I see you are calling : $context->employee in the front office, what for ? if (!$id_cart && !isset($context->employee)) { //die(Tools::displayError()); }
  30. 1 point
    bonjour via FTP, vérifiez que le fichier AdminLoginController existe bien dans le dossier controllers/admin. Dans la négative, téléchargez sur le site de Prestashop la même version et dézippez-la sur le pc, récupérez le fichier et envoyez-le dans le dossier
  31. 1 point
    arnaque, tu n'es pas la seule : http://67.205.141.98/reports/1HGxLfhnMzPEzWD7YeBwtWUGj3E2Q2YJKE?page=2
  32. 1 point
    C'est bien si vous y croyez
  33. 1 point
    Recordemos editar el título del tema cada vez que se solucione. Esto facilita la lectura para otros compañeros del foro. Este lo edito yo. Gracias.
  34. 1 point
    You cannot change the position of categories by just changing the position fields. The software maintains a kind of tree of all your categories that is managed by the nleft and nright fields. This makes it quite complicated.
  35. 1 point
    Z tego co pamiętam to te pole w tabeli ps_feature_value_lang ma ograniczenie. Można tam to zmienić i przetestować. UWAGA! MUSOWO zalecam przed zmianami wykonać kopię sklepu/bazy.
  36. 1 point
    It depends if you look on this as a programist or web desibner it may be ONE page checkout but for potential customer (which is key look in this case) it's definetly not one page cause you see first only address, rest is hidden and you need to go through another steps to complete an order...
  37. 1 point
    Hi David Thank you for your story - we have bought the MigrationPro that takes apparently everything. Nice to know that you feel better performance and thanks for mentioning the currency types, which seems not to be an issue. I presume I will get the the newest PHP and PS for the ride. I am sad that there are less free modules available - but I guess that is normal for a new engine. Development takes time. So I guess I will need to find out what PS 1.6 modules are needed and how I can get similar modules in 1.7+ Thanks again for your time.
  38. 1 point
    Hi, Presta doesn't have such functionality by default, but you can use module below for the purpose. https://www.prestashop.com/forums/topic/996951-module-payment-with-fee-additional-fee-for-payment-methods-create-custom-payment-methods/
  39. 1 point
    Entonces en Internacional -> Países -> España -> Modificar, desmarca la opción "¿Necesita un número de identificación fiscal?"
  40. 1 point
    Had same problem - hope this will help u too SEO and URL a change store adress www.xxxxxx.xx to xxxxxx.xx or xxxxxx.xx to www.xxxxxx.xx
  41. 1 point
    Merci doekia Implémenté sur un Prestashop v1.4.8.2 par surcharge de classe (override) /override/classes/Customer.php <?php class Customer extends CustomerCore { protected $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isCustomerName', 'firstname' => 'isCustomerName', 'email' => 'isEmail', 'passwd' => 'isPasswd', 'id_gender' => 'isUnsignedId', 'birthday' => 'isBirthDate', 'newsletter' => 'isBool', 'optin' => 'isBool', 'active' => 'isBool', 'note' => 'isCleanHtml', 'is_guest' => 'isBool'); } ?> /override/classes/Validate.php <?php class Validate extends ValidateCore { public static function isCustomerName($name) { if (preg_match('/www|http/ui',$name)) { return false; } return preg_match('/^[^0-9!\[\]<>,;?=+()@#"°{}_$%:\/\\\*\^]*$/u', $name); } } ?>
  42. 1 point
    You can use the following hooks: <?php public function install() { if ( parent::install() && $this->registerHook('displayAdminOrder') && $this->registerHook('displayAdminOrderLeft') && $this->registerHook('displayAdminOrderRight') && $this->registerHook('dsplayAdminOrderTabOrder') && $this->registerHook('displayAdminOrderContentShip') && $this->registerHook('displayAdminOrderContentOrder') ) { return true; } $this->uninstall(); return false; } /** * displayAdminOrderContentShip */ public function hookDisplayAdminOrderContentShip($param) { return '<b>hookDisplayAdminOrderContentShip</b>'; } /** * @hook displayAdminOrderLeft */ public function hookDisplayAdminOrderLeft($param) { return '<b>hookDisplayAdminOrderLeft</b>'; } /** * displayAdminOrderRight */ public function hookDisplayAdminOrderRight($param) { return '<b>hookDisplayAdminOrderRight</b>'; } /** * @hook displayAdminOrder */ public function hookDisplayAdminOrder($param) { return '<b>hookDisplayAdminOrder</b>'; } /** * displayAdminOrderContentOrder */ public function hookDisplayAdminOrderContentOrder($param) { return '<b>hookDisplayAdminOrderContentOrder</b>'; } /** * displayAdminOrderTabOrder */ public function hookDisplayAdminOrderTabOrder($param) { return '<b>hookDisplayAdminOrderTabOrder</b>'; } $orderId = $param['id_order']; $cart = $param['cart']; Check the attached picture:
  43. 1 point
    I disagree. If I buy a game on Steam and it does not launch on my computer, I am not going to blame Steam. However I can ask Steam for a refund. Moreover there are a lot of people who use the Paypal module and it works for them. So if it does not work for you, it might a be a bug but it might also be a paypal configuration issue, a server configuration issue, a network issue ... So focus on finding what is wrong and when you have found the issue maybe you can blame someone. Or maybe you'll find it was "bad luck" and once you're fixed, you're good to go.
  44. 1 point
    Grazie per la risposta, solo che la stessa immagine si trova in "descrizione" di tutti gli articoli importati e controllando il codice sorgente fa riferimento a posizioni esterne al mio sito es: <img src="https://s19.postimg.org/uauz41y3n/vicipaypal.jpg". Spero di essere stato chiaro, chiedo scusa ma sono un pò in confusione.
  45. 1 point
    check Preferences - Products - Max size of short description
  46. 1 point
    Here's a simple override that adds "Phone" and "Mobile" columns to the Customers > Addresses tab in the Back Office so you can filter by phone or mobile. Create override/controllers/admin/AdminAddressesController.php with the following: <?phpclass AdminAddressesController extends AdminAddressesControllerCore{ public function __construct() { parent::__construct(); $this->fields_list['phone'] = array('title' => $this->l('Phone'), 'filter_key' => 'a!phone'); $this->fields_list['phone_mobile'] = array('title' => $this->l('Mobile'), 'filter_key' => 'a!phone_mobile'); [spam-filter] Remember to go to the Advanced Parameters > Performance tab and click the "Clear cache" button after creating the file.
  47. 1 point
    Merhaba arkadaşlar, Bir sorum olacak. Ya da nasıl yapıldığını öğrenmek istediğim bir şey. PrestaShop sitem üzerinden bir bayilik girişi oluşturmak istiyorum. Şöyle: Benim bayilerim var. Yani benden toplu ürün satın alıp fiziksel mağazalarında satışa çıkaran firmalar var. Bunların siteme gelip "Bayi Girişi" gibi bir butonla giriş yapmalarını istiyorum. Ancak bu kişilere son kullanıcıya göründüğünden farklı şekilde indirimli fiyat görünmesini istiyorum. Örneğin bir kategorinin tümünde birden bu kullanıcın ait olduğu gruba belli bir yüzde ile indirim tanımlamak istiyorum. Aklımdaki bir böyle bir bayilik işleyişi. Nasıl yapabilirim ?
  48. 1 point
    Witam, Udostępniam jeszcze jedną wersję modułu paragon czy faktura, może komuś się przyda. Moduł dla wersji presty 1.6, umożliwia klientowi wybór dokumentu zapłaty. cechy modułu: umożliwia ustawienie domyślnego typu dokumentu wyświetla w PA w zamówieniach informacje o wybranym przez klienta typie dokumentu - domyślnie w pozycji 'displayAdminOrder'. Istnieje możliwość wyświetlania tej informacji w innym miejscu. W tym celu do pliku /FOLDER_ADMINA/themes/default/template/controllers/orders/helpers/view/view.tpl należy dodać kod {hook h="displayAdminOrderExtra" id_order=$order->id} wyświetla w historii zamówień klienta informacje o wybranym typie dokumentu (tylko dla nowych zamówień) umożliwia wysłanie w/w informacji mailem do klienta i administratora sklepu. Należy dodać tag {receipt_invoice} (i jakiś opis) w miejscu gdzie ma być umieszczona ta informacja, do szablonów email: order_conf.html, order_conf.txt, new_order.html, new_order.txt. klient domyślnie dokonuje wyboru dokumentu w podsumowaniu koszyka. Moduł również daje możliwość wyboru dokumentu w innym miejscu, np. na stronie wyboru płatności. W tym celu należy dodać do szablonu order-payment.tpl kod {hook h="displayReceiptInvoiceExtra"} Uwaga: Dla PS w wersji mniejszej niż 1.6.1.0 moduł nadpisuje plik \override\classes\Mail.php. Jeżeli taki plik istnieje, dobrze jest wykonać przed instalacją modułu jego kopię. sprawdzane na wersji PS 1.6.0.9, 1.6.0.13 i 1.6.1.4 Pozdrawiam twparagonfaktura.zip
  49. 1 point
×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More