Jump to content

How to show shipping and handling charges in separate field in cart


ArsalanAnsari

Recommended Posts

Hi,

How can i separate shipping cost and handling charges in two separate field in cart instead of shipping+handling.

 

In BO Shipping>Preferences i set...

159 = handling charges

2000 = free shipping start at

 

and for carrier i set...

Add handling cost = No

0 to 1 kg = 0

1 to 2 kg = 19.20

2 to 3 kg = 38.20

 

and so on....

 

What i need that if product has 1 kg of weight then cart summary will look like this...

Subtotal = 350

Handling = 159

Shipping = 19.20

Total       =  528.20

 

Is there any way to get that?

frankly I am not clear where I am supposed to write some code to make Prestashop work like I want.

Any idea would be highly appreciated

 

Thank you very much.

 

 

 

 

Link to comment
Share on other sites

Hi Arsalan,

 

Basically, you could add the (fixed) handling cost to modules//blockcart/blockcart.php (Make backup!!) 

(in function: public function assignContentVars($params), add the value of row PS_SHIPPING_HANDLING from the configuration table to a variable $shippinghandling or so), probably something like:

    'shippinghandling' => (int) Configuration::get('PS_SHIPPING_HANDLING'),

 

 

 

Then in the file themes/<your theme folder>/modules/blockcart/blockcart.tpl  (Make backup!!)

add some appropriate html code to show the new variable value {$shippinghandling} (with description/name of value etc )

then for the already shown shipping costs, do some calculation first, where you subtract the value of $shippinghandling from the old shipping costs, before displaying it, using some smarty calculation

so change :

{$shipping_cost}
in something like:
{math
assign="shipping_nohandling"
equation="x - y"
x=$shipping_cost  
y=$shippinghandling
}
{convertPrice price=$shipping_nohandling}
 
 
Haven' tested it, but expect something like this. May need some small adjustments to finetune.
By just changing the displayed values only, you don't have to mess with the final calculation etc, as it still includes the handling price, as before. 
 
Probably you need to change the shipping price in the ajaxcart.js as well, as the cartblock is updated without re-rendering the full screen (refresh), but only the values of the cart with ajax. But let's first see if this above given part works.
 
 
Let me know,
pascal.
Edited by PascalVG
Changed math equation, not order value but shipping value... (see edit history)
Link to comment
Share on other sites

Oops, too fast. We shouldn't change the order total, only shipping total:   (I also edited the above post to reflect the changes)

 

so do this close to where the values of

{$shipping_cost}

is displayed, and use something like:

 

 

 

so change :

{$shipping_cost}
in something like:
{math
assign="shipping_nohandling"
equation="x - y"
x=$shipping_cost  
y=$shippinghandling
}
{convertPrice price=$shipping_nohandling}
 

Hope that does it....

pascal

Link to comment
Share on other sites

thank you so much for the reply but didn't get where to put that code in blockcart.tpl.

 

 

{*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2014 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}

{*************************************************************************************************************************************}
{* IMPORTANT : If you change some data here, you have to report these changes in the ./blockcart-json.js (to let ajaxCart available) *}
{*************************************************************************************************************************************}
{if $ajax_allowed}
<script type="text/javascript">
var CUSTOMIZE_TEXTFIELD = {$CUSTOMIZE_TEXTFIELD};
var img_dir = '{$img_dir|addslashes}';
</script>
{/if}
<script type="text/javascript">
var customizationIdMessage = '{l s='Customization #' mod='blockcart' js=1}';
var removingLinkText = '{l s='remove this product from my cart' mod='blockcart' js=1}';
{if !$logged or $carrier==0}
var freeShippingTranslation = '{l s='Log in to calculate shipping' mod='blockcart' js=1}';
{else}
var freeShippingTranslation = '{l s='Free shipping!' mod='blockcart' js=1}';
{/if}
var freeProductTranslation = '{l s='Free!' mod='blockcart' js=1}';
var delete_txt = '{l s='Delete' mod='blockcart' js=1}';
var generated_date = {$smarty.now|intval};
</script>


<!-- MODULE Block cart -->
<div id="cart_block" class="block exclusive">
    <h4 class="title_block">
        <a href="{$link->getPageLink("$order_process", true)|escape:'html'}" title="{l s='View my shopping cart' mod='blockcart'}" rel="nofollow">{l s='Cart' mod='blockcart'}</a>
        {if $ajax_allowed}
        <span id="block_cart_expand" {if isset($colapseExpandStatus) && $colapseExpandStatus eq 'expanded' || !isset($colapseExpandStatus)}class="hidden"{/if}> </span>
        <span id="block_cart_collapse" {if isset($colapseExpandStatus) && $colapseExpandStatus eq 'collapsed'}class="hidden"{/if}> </span>
        {/if}
    </h4>
    <div class="block_content">
    <!-- block summary -->
    <div id="cart_block_summary" class="{if isset($colapseExpandStatus) && $colapseExpandStatus eq 'expanded' || !$ajax_allowed || !isset($colapseExpandStatus)}collapsed{else}expanded{/if}">
        <span class="ajax_cart_quantity" {if $cart_qties <= 0}style="display:none;"{/if}>{$cart_qties}</span>
        <span class="ajax_cart_product_txt_s" {if $cart_qties <= 1}style="display:none"{/if}>{l s='Products' mod='blockcart'}</span>
        <span class="ajax_cart_product_txt" {if $cart_qties > 1}style="display:none"{/if}>{l s='Product' mod='blockcart'}</span>
        <span class="ajax_cart_total" {if $cart_qties == 0}style="display:none"{/if}>
            {if $cart_qties > 0}
                {if $priceDisplay == 1}
                    {convertPrice price=$cart->getOrderTotal(false)}
                {else}
                    {convertPrice price=$cart->getOrderTotal(true)}
                {/if}
            {/if}
        </span>
        <span class="ajax_cart_no_product" {if $cart_qties != 0}style="display:none"{/if}>{l s='(empty)' mod='blockcart'}</span>
    </div>
    <!-- block list of products -->
    <div id="cart_block_list" class="{if isset($colapseExpandStatus) && $colapseExpandStatus eq 'expanded' || !$ajax_allowed || !isset($colapseExpandStatus)}expanded{else}collapsed{/if}">
    {if $products}
        <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 id="cart_block_product_{$product.id_product}_{if $product.id_product_attribute}{$product.id_product_attribute}{else}0{/if}_{if $product.id_address_delivery}{$product.id_address_delivery}{else}0{/if}" class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}">
                <span class="quantity-formated"><span class="quantity">{$product.cart_quantity}</span>x</span>
                <a class="cart_block_product_name" href="{$link->getProductLink($product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html'}" title="{$product.name|escape:html:'UTF-8'}">
                {$product.name|truncate:13:'...'|escape:html:'UTF-8'}</a>
                <span class="remove_link">{if !isset($customizedDatas.$productId.$productAttributeId) && (!isset($product.is_gift) || !$product.is_gift)}<a rel="nofollow" class="ajax_cart_block_remove_link" href="{$link->getPageLink('cart', true, NULL, "delete=1&id_product={$product.id_product}&ipa={$product.id_product_attribute}&id_address_delivery={$product.id_address_delivery}&token={$static_token}", true)|escape:'html'}" title="{l s='Please remove this product from my cart.' mod='blockcart'}"> </a>{/if}</span>
                <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}
                    {else}
                        <b>{l s='Free!' mod='blockcart'}</b>
                    {/if}
                </span>
            </dt>
            {if isset($product.attributes_small)}
            <dd id="cart_block_combination_of_{$product.id_product}{if $product.id_product_attribute}_{$product.id_product_attribute}{/if}_{$product.id_address_delivery|intval}" class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}">
                <a href="{$link->getProductLink($product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html'}" title="{l s='Product detail' mod='blockcart'}">{$product.attributes_small}</a>
            {/if}

            <!-- Customizable datas -->
            {if isset($customizedDatas.$productId.$productAttributeId[$product.id_address_delivery])}
                {if !isset($product.attributes_small)}<dd id="cart_block_combination_of_{$product.id_product}_{if $product.id_product_attribute}{$product.id_product_attribute}{else}0{/if}_{if $product.id_address_delivery}{$product.id_address_delivery}{else}0{/if}" class="{if $smarty.foreach.myLoop.first}first_item{elseif $smarty.foreach.myLoop.last}last_item{else}item{/if}">{/if}
                <ul class="cart_block_customizations" id="customization_{$productId}_{$productAttributeId}">
                    {foreach from=$customizedDatas.$productId.$productAttributeId[$product.id_address_delivery] key='id_customization' item='customization' name='customizations'}
                        <li name="customization">
                            <div class="deleteCustomizableProduct" id="deleteCustomizableProduct_{$id_customization|intval}_{$product.id_product|intval}_{$product.id_product_attribute|intval}_{$product.id_address_delivery|intval}"><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}&token={$static_token}", true)|escape:'html'}" rel="nofollow"> </a></div>
                            <span class="quantity-formated"><span class="quantity">{$customization.quantity}</span>x</span>{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>
    {/if}
        <p {if $products}class="hidden"{/if} id="cart_block_no_products">{l s='No products' mod='blockcart'}</p>
        {if $discounts|@count > 0}
        <table id="vouchers"{if $discounts|@count == 0} style="display:none;"{/if}>
            {foreach from=$discounts item=discount}
                {if $discount.value_real > 0}
                <tr class="bloc_cart_voucher" id="bloc_cart_voucher_{$discount.id_discount}">
                    <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}" title="{l s='Delete' mod='blockcart'}" rel="nofollow"><img src="{$img_dir}icon/delete.gif" alt="{l s='Delete' mod='blockcart'}" class="icon" /></a>
                        {/if}
                    </td>
                </tr>
                {/if}
            {/foreach}                    
        </table>
        {/if}
        <p id="cart-prices">
            {if !$logged}
            <span class="price ajax_cart_shipping_cost" style="float:left!important">{$shipping_cost}</span>
            {else}
            <span id="cart_block_shipping_cost" class="price ajax_cart_shipping_cost">{$shipping_cost}</span>
            <span>{l s='Shipping' mod='blockcart'}</span>
            {/if}  
            <br/>
            {if $show_wrapping}
                {assign var='cart_flag' value='Cart::ONLY_WRAPPING'|constant}
                <span id="cart_block_wrapping_cost" 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>
                <br/>
            {/if}
            {if $show_tax && isset($tax_cost)}
                <span id="cart_block_tax_cost" class="price ajax_cart_tax_cost">{$tax_cost}</span>
                <span>{l s='Tax' mod='blockcart'}</span>
                <br/>
            {/if}
            <span id="cart_block_total" class="price ajax_block_cart_total">{$total}</span>
            <span>{l s='Total' mod='blockcart'}</span>
        </p>
        {if $use_taxes && $display_tax_label == 1 && $show_tax}
            {if $priceDisplay == 0}
                <p id="cart-price-precisions">
                    {l s='Prices are tax included' mod='blockcart'}
                </p>
            {/if}
            {if $priceDisplay == 1}
                <p id="cart-price-precisions">
                    {l s='Prices are tax excluded' mod='blockcart'}
                </p>
            {/if}
        {/if}
        <p id="cart-buttons">
            {if $order_process == 'order'}<a href="{$link->getPageLink("$order_process", true)|escape:'html'}" class="button_small" title="{l s='View my shopping cart' mod='blockcart'}" rel="nofollow">{l s='Cart' mod='blockcart'}</a>{/if}
            <a href="{$link->getPageLink("$order_process", true)|escape:'html'}" id="button_order_cart" class="exclusive{if $order_process == 'order-opc'}_large{/if}" title="{l s='Check out' mod='blockcart'}" rel="nofollow"><span></span>{l s='Check out' mod='blockcart'}</a>
        </p>
    </div>
    </div>
</div>
<!-- /MODULE Block cart -->

Link to comment
Share on other sites

For 1.6.0.9:

 

/modules/blockcart/blockcart.php:

 

public function assignContentVars($params)
{
...
   $this->smarty->assign(array(
      'products' => $products,
      'customizedDatas' => Product::getAllCustomizedDatas((int)($params['cart']->id)),
      'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_,
      'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_,
      'discounts' => $cart_rules,
      'nb_total_products' => (int)($nbTotalProducts),
      'shipping_cost' => $shipping_cost,
      'shippinghandling' => (int) Configuration::get('PS_SHIPPING_HANDLING'),
...
}
 

 

 

and /themes/<your theme folder>/modules/blockcart/blockcart.tpl:

 

...

<div class="cart-prices">
   <div class="cart-prices-line first-line">
      <span class="price cart_block_shipping_cost ajax_cart_shipping_cost">
         {if $shipping_cost_float == 0}
            {l s='Free shipping!' mod='blockcart'}
         {else}
            {assign var="shipping_nohandling" value=$shipping_cost}
            {math
                  assign="shipping_nohandling"
                  equation="x - y"
                  x=$shipping_cost_float  
                  y=$shippinghandling
            }
            {convertPrice price=$shipping_nohandling}
            {* {$shipping_cost} *}
         {/if}
      </span>
      <span>
         {l s='Shipping' mod='blockcart'}
      </span>
   </div>
   {if $shipping_cost_float != 0}
      <div class="cart-prices-line">
         <span class="price cart_block_shipping_cost ajax_cart_shipping_cost">
            {convertPrice price=$shippinghandling}
         </span>
         <span>
            {l s='Handling costs' mod='blockcart'}
         </span>
      </div>
   {/if}
   {if $show_wrapping}
  ...
 

 

See you use an older version. If this doesn't help, please add your version number, and I will adjust it.

 

pascal


Interesting, the tpl file seems different than the default one. Do you use some custom theme?

  • Like 1
Link to comment
Share on other sites

OK, to summarise all changes to get a separate handing costs line in the cart block:

 

in total four files needed changes for this:

1) modules/blockcart/blockcart.php: 

Where we added the (fixed) handling costs (See previous post #8 for details)

  'shippinghandling' => (int) Configuration::get('PS_SHIPPING_HANDLING'),
 

 

2) themes/<your theme folder>/modules/blockcart/blockcart.tpl

Where we added the html code for the handling costs and did some small calculation for the shipping costs without the handling costs. (N.B. in the attached file, I made some more changes than described above. I added some code for showing the handling costs separately in the pop up that is shown when adding a product, and changed the name of the div around the handling cost, to be able to update the field with ajax)

 

3) themes/<your theme folder>/modules/blockcart/blockcart-json.tpl:

Here I added two lines:

  "shippingHandling": {convertPrice|json_encode price=$shippinghandling},
  "shippingNoHandling": {convertPrice|json_encode price=($shipping_cost_float - $shippinghandling)},
To make the new values available for ajax update (wen adding/removing a product, to update the shopping cart only)
 
 

4) themes/<your theme folder>/js/modules/blockcart/ajax-cart.tpl:

Where we update the html text of the handing and shipping prices  (added/modified red code)
...
updateCartEverywhere : function(jsonData){
   $('.ajax_cart_total').text($.trim(jsonData.productTotal));
 
   if (parseFloat(jsonData.shippingCostFloat) > 0) {
      $('.ajax_cart_shipping_cost').text(jsonData.shippingNoHandling);
      $('.ajax_cart_shipping_handling').text(jsonData.shippingHandling);
      $('.price_handling').fadeIn(0);
   }
   else {
      if (typeof(freeShippingTranslation) != 'undefined')
         $('.ajax_cart_shipping_cost').html(freeShippingTranslation);
      $('.price_handling').fadeOut(0);
   }
$('.ajax_cart_tax_cost').text(jsonData.taxCost);
...

 

I zipped all four files. If you haven't made any changes to the original files, you should be able to just overwrite these with the attached ones. (Make a backup of the original ones!!!)

 

If not, please use some file compare with the original ones and the attached ons to see where exactly I made all changes (www.quickdiff.com is useful to quickly compare files)

 

 

N.B. I renamed the files in the zip to clearly show the path where to put the file. please rename them back to the original file name when really using them .

 

 

Hope this helps,

pascal.

 

 

Attachments: The four files mentioned above. Files are modified versions from PrestaShop 1.6.0.9

Separate_handing_costs_PrestaShop1609.zip

 

 

P.S. A sample of what it does you can see here  (N.B. Temporary link to test site, may be deleted in future)

Sample site's shipping costs as follows

  fixed handling costs: 89$

  dynamic costs:

   - total products price  < 50$: 5$ shipping costs

   - between 50$ and 100$: 8$ shipping costs

   - 100$ or more: 10$ shipping costs

Edited by PascalVG (see edit history)
  • Like 1
Link to comment
Share on other sites

Hi Arsalan,

 

1) did you use the four files I attached? Especially the blockcart.ptl has more changes than described in the previous posts in it (to update the pop up when adding a product and to update the cart block when adding/removing a product ) So if you didn't use this file (for whatever reason, like custom theme modifications or so), you have to check what changes exactly I made in it by comparing it to the original 1.6.0.9 file and merge the changes with your file.

 

2) If you did use all my files, maybe you didn't turn off all optimization options (Advanced parameters->performance), especially turn off cache, force compilation of tpl files, turn off ccc options. Then reload the page again and add/remove a product. See if that helps.

 

 

Let me know. Otherwise, if you want you can PM me some ftp info to get to your files and I can have a look for you (Then also make a new temporary employee in back office with admin rights, so I can have a look there. And send me the login info with the url to your back office login page)

 

pascal

Link to comment
Share on other sites

  • 1 month later...

This is great! For me it's working perfectly in the block cart.

 

I also want to show the handling costs as an extra rule in the Check Out proces. Currently the handling costs are visible as "Total shipping". I would like to show ik in the order detail page and in the mails as well;) Is there a script for that too?

 

Thanks!

Link to comment
Share on other sites

  • 2 months later...

This works great for the blockcart. However, how do we achieve the same for the one-page checkout?

 

OK, to summarise all changes to get a separate handing costs line in the cart block:

 

in total four files needed changes for this:

1) modules/blockcart/blockcart.php: 

Where we added the (fixed) handling costs (See previous post #8 for details)

  'shippinghandling' => (int) Configuration::get('PS_SHIPPING_HANDLING'),
 

 

2) themes/<your theme folder>/modules/blockcart/blockcart.tpl

Where we added the html code for the handling costs and did some small calculation for the shipping costs without the handling costs. (N.B. in the attached file, I made some more changes than described above. I added some code for showing the handling costs separately in the pop up that is shown when adding a product, and changed the name of the div around the handling cost, to be able to update the field with ajax)

 

3) themes/<your theme folder>/modules/blockcart/blockcart-json.tpl:

Here I added two lines:

  "shippingHandling": {convertPrice|json_encode price=$shippinghandling},
  "shippingNoHandling": {convertPrice|json_encode price=($shipping_cost_float - $shippinghandling)},
To make the new values available for ajax update (wen adding/removing a product, to update the shopping cart only)
 
 

4) themes/<your theme folder>/js/modules/blockcart/ajax-cart.tpl:

Where we update the html text of the handing and shipping prices  (added/modified red code)
...
updateCartEverywhere : function(jsonData){
   $('.ajax_cart_total').text($.trim(jsonData.productTotal));
 
   if (parseFloat(jsonData.shippingCostFloat) > 0) {
      $('.ajax_cart_shipping_cost').text(jsonData.shippingNoHandling);
      $('.ajax_cart_shipping_handling').text(jsonData.shippingHandling);
      $('.price_handling').fadeIn(0);
   }
   else {
      if (typeof(freeShippingTranslation) != 'undefined')
         $('.ajax_cart_shipping_cost').html(freeShippingTranslation);
      $('.price_handling').fadeOut(0);
   }
$('.ajax_cart_tax_cost').text(jsonData.taxCost);
...

 

I zipped all four files. If you haven't made any changes to the original files, you should be able to just overwrite these with the attached ones. (Make a backup of the original ones!!!)

 

If not, please use some file compare with the original ones and the attached ons to see where exactly I made all changes (www.quickdiff.com is useful to quickly compare files)

 

 

N.B. I renamed the files in the zip to clearly show the path where to put the file. please rename them back to the original file name when really using them .

 

 

Hope this helps,

pascal.

 

 

Attachments: The four files mentioned above. Files are modified versions from PrestaShop 1.6.0.9

attachicon.gifSeparate_handing_costs_PrestaShop1609.zip

 

 

P.S. A sample of what it does you can see here  (N.B. Temporary link to test site, may be deleted in future)

Sample site's shipping costs as follows

  fixed handling costs: 89$

  dynamic costs:

   - total products price  < 50$: 5$ shipping costs

   - between 50$ and 100$: 8$ shipping costs

   - 100$ or more: 10$ shipping costs

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...