Jump to content

Leaderboard

  1. D. Tengler

    D. Tengler

    Members


    • Points

      42

    • Content Count

      564


  2. ventura

    ventura

    Global Moderators


    • Points

      40

    • Content Count

      4,480


  3. PrestaServicePro

    • Points

      29

    • Content Count

      155


  4. JBW

    JBW

    Members


    • Points

      27

    • Content Count

      1,564



Popular Content

Showing content with the highest reputation since 05/01/2020 in all areas

  1. 2 points
    C'est un soucis de CSS, l'image d'arrière plan est répéter horizontalement et verticalement. Donc votre taille d'image n'est pas en rapport avec la dimension de l'espace d'affichage. En gros si vous mettez un image rectangulaire dans un carré, le carré sne sera pas rempli et donc on verra la répétition de l'image. Ajustez tout cela dans la configuration du module ou par le design de votre template ou par le format de l'image utilisé.
  2. 2 points
    @Florent COTTAVOZ oszalejmy, dlaczego nie po polsku?
  3. 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.
  4. 2 points
    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.
  5. 2 points
    Nous non plus, nous n'avons rien modifié sur ton site... Cordialement
  6. 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
  7. 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.
  8. 2 points
    -> OK, je viens de trouver, ça fait parti des options bien planqué dans la configuration du module "formulaire de contact". Pas très logique de répartir les options sur la page SAV, sur la page Contact et sur la conf du module...
  9. 1 point
    This week facebook have talked a lot about shops on FB and Instagram, they have direct integrations with shopify and woo commerce. Is anthing going to be developed for prestashop? https://about.fb.com/news/2020/05/introducing-facebook-shops/
  10. 1 point
    Bonjour, est ce que vous utilisez cloudflare ? , si oui essayez de vider le cache du cdn
  11. 1 point
    Probiere zunächst mal den cache manuell zu löschen (über FTP Zugang): dazu den Ordner /var/cache umbenennen z.B. in var/cachexxx. Beim nächsten Aufruf wird das Cache-Verzeichnis dann neu generiert. Grüsse Whiley
  12. 1 point
    Looks very nice, colorful and love the menu!
  13. 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.
  14. 1 point
    Hallo Klinki, PS 1.7.5.2 beherscht nicht den Sprach/Funktionsumfang von PHP 7.3 also zurückstellen auf 7.2 Grüsse Whiley
  15. 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
  16. 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
  17. 1 point
    During maintenance, if you made some changes, maybe them creates some conflicts. Because, maintenance mode can not make such as a problem. If you installed some module disable it and try again to navigate the shop.
  18. 1 point
    Jajajaja ... gracias por la corrección @joseantgv Demasiados temas en mi cabeza
  19. 1 point
    nice module! Something I was looking for a long time
  20. 1 point
  21. 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...
  22. 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
  23. 1 point
    No, ti dovrebbe rilevare lo stesso numero di URL.
  24. 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>
  25. 1 point
    /themes/your_theme/templates/catalog/product-add-to-cart.tpl Here you can modify {block name=product_quantity}
  26. 1 point
    buenisimo, gracias! lo esperamos 😀
  27. 1 point
  28. 1 point
  29. 1 point
  30. 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(); } }
  31. 1 point
    Vérifier dans SEO&URL, Vérifier le template du thème
  32. 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
  33. 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
  34. 1 point
    @Alex Castillo It seems you've figured it out, let me know if you need more help.
  35. 1 point
  36. 1 point
    arnaque, tu n'es pas la seule : http://67.205.141.98/reports/1HGxLfhnMzPEzWD7YeBwtWUGj3E2Q2YJKE?page=2
  37. 1 point
    C'est bien si vous y croyez
  38. 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.
  39. 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.
  40. 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...
  41. 1 point
    Entonces en Internacional -> Países -> España -> Modificar, desmarca la opción "¿Necesita un número de identificación fiscal?"
  42. 1 point
    A mi lo único que me ha funcionado es esto. Descargar el idioma ingles "united kingdom" Se hace en Internacional - Localization - Import pack Luego en Internacional - Localization - Configuration ponemos el idioma por defecto ingles Luego ir a advanced settings - Team y poner a todos los usuarios el idioma ingles Ahora ya podemos borrar todos los idiomas españoles Luego lo volvemos a instalar el idioma español y donde antes hemos puesto ingles elegimos español. ... configuration ... team
  43. 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
  44. 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:
  45. 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.
  46. 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.
  47. 1 point
    Hallo Foris, in einem anderen Forum habe ich bereits eine kleine Anleitung über das Anlagen einer Shopkopie geschrieben. Da hier ab und zu auch diese Frage auftaucht, dachte ich, ich schreibe diese Anleitung auch hier hinein. Also los: Ein wichtiges Werkzeug, dass man meist sofort benötigt, wenn man mit Prestashop arbeitet ist ein Testshop. Die einfachste Möglichkeit ist, einen Prestashop direkt in die Testumgebung zu installieren. Doch was ist, wenn man bereits einen Live-Shop hat und an den Einstellungen diese Shops arbeiten möchte. Auch in diesem Fall ist es möglich einen Testshop mit den Daten und Konfigurationen des Liveshop aufzusetzen. Man kann auch einen Shop von einer Domain oder Arbeitsumgebung in eine andere Arbeitsumgebung kopieren. Folgende Schritte sind notwendig um einen Shop mit seinen Einstellungen in einen anderen Bereich zu kopieren. 1. Zunächst erstellt man eine Kopie des kompletten Shopverzeichnis. 2. Als nächstes exportiert man die Datenbank des Shop. Bei großen Datenbanken geht das mit dem Tool Dumper sehr gut. 3. Die Kopie des Shopverzeichnis wird dort abgelegt, wo man sie haben möchte. Also z.B. im Verzeichnis der Testdomain oder bei xampp in einem Unterverzeichnis des Ordners htdocs. Legt man eine Kopie des Shops mit Hilfe eines ftp-Client in einem Verzeichnis ab, lohnt sich ein Blick auf die Zugriffsberechtigungen. Der FileZilla Client und im Programm BitKinex kann man diese Berechtigungen finden, wenn man mit der rechten Maustaste auf den Ordner klickt und den Menüpunkt "Dateiberechtigungen" bzw. "Properties" auswählt. 4. Die Datenbank wird in eine neue sql Datenbank importiert. Eine neue Datenbank wird auf dem Server angelegt und die Daten importiert. In der Regel ist das der lokale Server, es gibt aber auch eigene Datenbankserver. Die Adresse wird später in die Datei settings.inc.php eingetragen. Alls nächstes passen wir jetzt die Datenbankeinstellungen an: 1. In der Tabelle PRÄFIX-configuration (PRÄFIX steht für den Anfang der Tabellennamen - Meistens ist das PS_) der importierten Datenbank findet man unter dem Attribut "namen" den Eintrag -PS_SHOP_DOMAIN - und -PS_SHOP_DOMAIN_SSL- hier trägt man unter "value" die Domain oder Subdomain ein, in der der kopierte Shop laufen soll. Eine Orientierung ist, das dort die Domain des kopierten Shops steht. Man darf hier nur die Domain oder Subdomain eintragen und nicht etwa das Unterverzeichnis. Also beispielsweise test.meinedomain.de für einen Testshop auf einer Subdomain im Internet oder localhost für einen Shop der Lokal z.B. mit xampp laufen soll. Zusatz Version 1.5: Die Version 1.5 ist für Multishopfunktionen ausgelegt. Das bedeutet hier, dass bei dieser Version in der Tabelle PRÄFIX-shop_url die Attribute "domain" und "domain_ssl" angepasst werden müssen. Hier trägt man z.B. auch localhost ein, wenn der Shop Lokal laufen soll. Im Unterschied zur 1.4.x Prestashop Version wird ein Unterverzeichnis, in dem der Shop laufen soll ebenfalls in diese Tabelle unter dem Attribut physical_uri eingetragen. Also wird dort z.B. /meinverzeichnis/ eingetragen wenn der Shop im im Unterverzeichnis „meinverzeichnis“ der Domain „localhost“ oder irgeneiner anderen Domain laufen soll. Als nächstes wird der Shop an seine neue Umgebung angepasst: 1. Wir öffnen die Datei settings.inc.php im Verzeichnis config der Shopkopie 2. (nur Prestashopversionen bis 1.4.x) In die Zeile define('__PS_BASE_URI__', tragen wir ein, wenn der Shop in einem Unterverzeichnis der Domain laufen soll, die wir in die Datenbank eingetragen haben. Also z.B.: define('__PS_BASE_URI__', '/meinverzeichnis/'); wenn der Shop im Unterverzeichnis „meinverzeichnis“ der Domain „localhost“ oder irgeneiner anderen Domain laufen soll. 3. In die define('_DB_NAME_', schreiben wir den Namen der Datenbank in dem jetzt die Daten abgelegt sind. Also z.B. define('_DB_NAME_', 'testprestashop'); wenn die neue Datenbank „testprestashop“ heißt. 4. In die Zeile define('_DB_USER_', schreiben wir den Benutzernamen des Datenbankzuganges. Also z.B. define('_DB_USER_', 'root'); wenn der Datenbankzugang den Benutzernamen „roots“ hat. 5. In die Zeile define('_DB_PASSWD_', kommt schließlich das Passwort für den Datenbankzugang. Z.B. define('_DB_PASSWD_', 'pass'); wenn der Datenbankzugang das Passwort „pass“ hat. 6. In Zeile define('_DB_SERVER_' steht die Adresse des Datenbankservers. Wenn der Server als localhost läuft steht dort keine eigene Adresse. Wenn der Datenbankserver ein externer Server ist, muß dort die entsprechende Adresse eingetragen werden. In der Regel, z.B. bei einer Kopie des Liveshop unter xampp ist es define('_DB_SERVER_', 'localhost'); und die Datenbank ist, wie oben beschrieben, auf dem sql Server importiert. Der nächste Schritt besteht darin die caches des Shop zu löschen da dort Reste der alten Arbeitsumgebung vorhanden sein können: 1. (nur Prestashopversionen bis 1.4.x) Das Verzeichnis cache im Rootverzeichnis des Shop wird geleert. 2. (nur Prestashopversionen bis 1.4.x) Die Verzeichnisse compile und cache im Unterverzeichnis tools/smarty werden geleert. Sollte der Shop noch unter Smarty 2 laufen muß man die Verzeichnisse compile und cache im Unterverzeichnis tools/smarty_v2 leeren. Auf jeden Fall lohnt sich ein Blick in diese Unterverzeichnisse. 3. Der Themencache im Verzeichnis themes/meintheme/cache muß ebenfalls geleert werden. Zusatz Version 1.5: In dieser Version finden sich alle relevanten Caches außer dem Themencache in Unterverzeichnissen des Verzeichnis cache im Rootverzeichnis des Shop. Je nachdem welchen Cache man verwendet muß man also die Unterverzeichnisse durchgehen und entsprechend leeren. Hierbei reicht es wenn man z.B. für den Smarty-Cache im Verzeichnis cache/smarty/ die Verzeichnisse /compile und /cache löscht. prestashop legt beide Verzeichnisse automatisch neu an. Da der Cache im Verzeichnis /compile in der 1.5.x Version hirachisch in einem Verzeichnisbaum angelegt ist, ist das Löschen auch die schnellste Möglichkeit. So, jetzt sind wir fast fertig. Als letztes löschen wir noch die Datei htaccess im root-Verzeichnis des Shop um die Linkverweise und Overwrides neu zu erstellen. Wahlweise könnt ihr die htaccess im Backoffice neu generieren, wenn der Zugriff schon möglich ist. Nun können wir uns in den Backoffice des Shops einloggen. (nur Prestashopversionen 1.4.x) Damit der Shop auch in der Testumgebung mit einer htaccess Datei läuft können wir im BO unter tools -> Generatoren eine neue htaccess erstellen lassen. Zusatz Version 1.5: Eine htaccess wird dann neu erstellt, wenn man "Benutzerfreundliche URL" im Bereich Voreinstellungen > SEO & URLs aktiviert. Der umgesetzte Shop ist nun fertig zum Einsatz. Wir können jetzt auch das Frontoffice aufrufen. Ich hoffe die Beschreibung ist soweit vollständig. Wenn es noch Anregungen oder Verbesserungsvorschläge gibt, schreibt diese bitte in die Thread. Viele Grüße
  48. 1 point
    check Preferences - Products - Max size of short description
  49. 1 point
    Desde el foro, no podemos ayudarte mucho a nivel legal (y menos todavía si no es un modulo comprado en la tienda oficial de Prestashop). Yo soy un usuario normal y corriente, ni trabajo para Prestashop, ni para la empresa que mencionas. Si se consigue que la empresa contacte contigo para llegar a una solución, supongo que no sera mala opción. Suerte con el proceso, y cualquier avance sea negativo o positivo, comentalo. Saludos,
  50. 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
×
×
  • Create New...

Important Information

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