Jump to content

Multiple Carriers, No Carrier Name Or Description In Checkout


techjp

Recommended Posts

I'm setting up a store with a few different carriers. Sometimes a product can be shipped by 2 or 3 different carriers, depending on the user's preference. Other times a product can only be shipped with one carrier (oversize items, for example).

 

Our customers tend to purchase more than one item at a time and there will often be cases where items from one order must be shipped separately. However, when more than one carrier is required for the items being purchased, no shipping carrier descriptions are shown during the cart checkout process. Difference prices are shown for different combinations of carrier, and the prices are accurate, but there is no indication of which carriers will be used if a given combination is selected. Here is a screenshot of what we see:

 

post-708433-0-06177700-1457566440_thumb.png

 

 

*** Note: For testing purposes I am using a completely unmodified Bitnami PrestaShop 1.6.1.4 VMware image, the default theme, and no modules have been added. Carriers have been defined using weight ranges and the carriers have been assigned to separate warehouses. Items that can be shipped with a particular group of carriers have then been assigned to belong to that warehouse. The shipping calculation is working perfectly as far as getting the correct total shipping cost is concerned.

 

So, my question is: How can we get a list of carrier names to be included with each price? It doesn't need to show which items will be shipped with which carrier, only which carriers will be used. 

 

Edit: I'd be happy to edit a bit of code to make this work, or use an override if that is possible. I'd sooner avoid using a shipping module as our shipping needs are quite unique. We have the shipping cost calculations working perfectly and just wish to display the carrier names.

Edited by techjp (see edit history)
Link to comment
Share on other sites

  • 4 weeks later...

Just for your reference - our module may be able to resolve your issues.

 

We have a module - Agile seller shipping module, that will display shipping carriers and products as following screenshot image.

Buyer will be able to choose carrier per product, each product will have a list of carriers in drop-down list for buyer to choose.

And of course buyer is able to choose same carrier to save shipping fee if the products are using the same carrier

 

 

 

prestashop-module-seller-shipping-02-fro

 

 

Note - Agile seller shipping module is an accessory module of Agile Multiple seller module - if you use for single seller, we can consider to give  you some discount.

Edited by shokinro (see edit history)
Link to comment
Share on other sites

  • 6 months later...
Update:

 

I think the problem I was having was caused by having multiple items in the cart and having no carriers that were shared between all items. The reason for this is that some items had "free" shipping and other items had regularly billed shipping. To facilitate this I had five carriers set up:

 

Carrier 1. Airmail

Carrier 2. Airmail Free Shipping

Carrier 3. Express Mail Upgrade from Airmail Free Shipping

Carrier 4. Express Mail

Carrier 5. Express Mail Free Shipping

 

From a human perspective we can of course see that really there are only two actual ways to ship items, Express Mail and Airmail. PrestaShop however views them as five individual carriers.

 

So, imagine the following three items in the cart:

 

Item 1. Widget ABC (Carriers #2 and #3 assigned)

Item 2. Widget OPQ (Carriers #1 and #4 assigned)

Item 3. Widget XYZ  (Carrier #5 assigned)

 

In this situation PrestaShop doesn't see any shared carriers that can be presented as a shipping option even though in reality the items are either going to be shipped by Airmail or Express Mail.

 

I never tested this with more than two carriers set for a single item so I am not sure what would happen in that case. However for my scenario with either 1 or 2 carriers set for each item PrestaShop combined the "cheap" options and "expensive" options together and presented two choices for shipping to the customer. The problem was that it didn't give any explanation as to what carrier (or carriers) would be used for a given shipping price. The result was the image in my original post:

 

post-708433-0-06177700-1457566440_thumb.png

 

I ended up "fixing" this problem by either offering "free" shipping for all items or offering "paid" shipping for all items. This way there were only two carriers set for every item (Airmail and Express Mail) which results in tidy options presented by PrestaShop.

 

 

If anyone does wish to proceed with having free & non-free shipping options on the same website you will run into another problem as well: When someone buys an item with "free" shipping and another with non-free shipping in the same order PrestaShop will split this order into two separate entries because from PrestaShop's viewpoint they are using two different carriers (one free, one not free). This is confusing for customers and a PITA for store managers, so ideally items that will be shipped in one box should be presented as shipping in one box. David Garcia faced this problem and fixed it by editing one of the core files to prevent this split from happening.

 

Unfortunately there is a problem with doing this and that is that in some cases you may want (or need) to ship the items separately! For example if the items are dramatically different sizes or shapes it may not be practical to ship them together, and in this case having separate orders within PrestaShop is necessary.

 

So overall it is a very complicated problem and different stores will need to approach it in different ways. 

Edited by techjp (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

I have taken another crack at finding ways to make this work, but unfortunately am still at the same place.

 

I tried setting up 3 different sets of carriers:

 

Set 1:

Slow Free

Fast Upgrade

 

Set 2:

Slow Full Shipping Cost Billed

Fast Full Shipping Cost Billed

 

Set 3:

Fast Free

Slow Downgrade (free)

 

I made sure that the names for the fast & slow carriers in each set were exactly the same, that they had the same transit time, and that they had the same speed grade set. So inside PrestaShop I see the following:

 

Slow / Speed Grade 4 / Transit Time 7 to 14 days

Slow / Speed Grade 4 / Transit Time 7 to 14 days

Slow / Speed Grade 4 / Transit Time 7 to 14 days

Fast / Speed Grade 6 / Transit Time 3 to 5 days
Fast / Speed Grade 6 / Transit Time 3 to 5 days
Fast / Speed Grade 6 / Transit Time 3 to 5 days
 
I was hoping that with exactly the same names, speed grades, and transit times set that PrestaShop would at least display the name properly on the Shipping section of the checkout process. No dice though, it doesn't give any information about the carriers, only the price and a radio button to select:
 
BwsRZFU.png
 
 
 
Beside the top radio button it should say "Fast" and beside the bottom one it should say "slow".
 
I am going to work on a little code to see if there is a way to make this work. If I get it going I will be happy to share it here.
 
Cheers,
 
-techjp
Link to comment
Share on other sites

the area you  are in is well, barbaric, not very good.

 

I've been following this post becuause shipping has become an interest.

 

While you bang on this issue, take a moment to review latest localization work and first for me in shipping.  See front/back office demo's.

 

https://www.prestaheroes.com/en-us/module-for-prestashop-16/74-prestashop-shipping-commander.html

This provides the 'best' non-logged visitor assurance you ship to their country.  

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

the area you  are in is well, barbaric, not very good.

 

PrestaShop's shipping system is definitely messy, one that is ripe for a good module to fix a lot of the problems, IMO.

 

I looked at your "PrestaShop Shipping Commander" module and the features are very slick indeed. I have a couple of questions:

 

1. The Front Office demo doesn't show any shipping costs though, everything is set to "Instant Download". Any chance that the demo could have some shipping costs to display?

 

2. Does the widget also display the name of the country the shipping costs are being calculated for? We have customers in many countries who have us ship through a US address, it would be helpful if they knew the shipping estimate was likely high because it was being calculated for Brazil rather than their shipping destination of the USA (for example).

 

3. Finally, what happens if an item is added to the cart that has no carrier available to the user's country?

Link to comment
Share on other sites

the area you  are in is well, barbaric, not very good.

 

PrestaShop's shipping system is definitely messy, one that is ripe for a good module to fix a lot of the problems, IMO.

 

I looked at your "PrestaShop Shipping Commander" module and the features are very slick indeed. I have a couple of questions:

we took other ecommerce best practices, and made it better.  This module is 'amazing', 5 months of work/testing....very happy with result.

 

1. The Front Office demo doesn't show any shipping costs though, everything is set to "Instant Download". Any chance that the demo could have some shipping costs to display?

I think it's possible you were looking at my module shop, please click front off demo tab where shipping costs and carrier selector are visible in widget.

 

2. Does the widget also display the name of the country the shipping costs are being calculated for? We have customers in many countries who have us ship through a US address, it would be helpful if they knew the shipping estimate was likely high because it was being calculated for Brazil rather than their shipping destination of the USA (for example).

yes, they can see the shipping country and change shipping country to see all carrier options.

 

3. Finally, what happens if an item is added to the cart that has no carrier available to the user's country?

the module issues  various messages,  cannot deliver to address.  We have new dev prod level that will provide prod level carrier select, including msg prod cannot be shipped to your country.  I wanted an all inclusive carrier high level and product level but decided to do two separate module works.

 

 

Hi, feedback to questions see red.

Link to comment
Share on other sites

> we took other ecommerce best practices, and made it better.  This module is 'amazing', 5 months of work/testing....very happy with result.

 
Am I misremembering the price or did it jump by about $30 in the past few hours? I could've sworn it was quite a bit cheaper when I looked earlier.
 
 
> I think it's possible you were looking at my module shop, please click front off demo tab where shipping costs and carrier selector are visible in widget.
 
Yes, this seems to have been what was happening. uBlock Origin was stopping some elements on your page from loading properly. After I whitelisted your site the link to the demo shop comes up.
 
Took me a bit to figure out that I had to manually select the shipping country, and that it was not within the cart pop-up itself, or the "added to cart" confirmation. I think a lot of users will miss the country selection it if it's not right in front of them when they add items to the cart. Would it be possible to use GeoIP as a way to set a default country for each visitor, which they could then change if needed?
 
 
> the module issues  various messages,  cannot deliver to address.  We have new dev prod level that will provide prod level carrier select, including msg prod cannot be shipped to your country.  I wanted an all inclusive carrier high level and product level but decided to do two separate module works.
 
I'm not sure I understand. Will you be adding these features to the existing module, or are you creating another module that has them?
 
My current plan is to launch multiple stores targeted at specific product lines and/or at specific countries, using a high degree of automation to make management possible. If it was just one store then buying a bunch of modules isn't such a huge issue, but buying a bunch of modules for 10 stores, 20 stores, 50 stores, etc, gets very expensive very quickly. So I'm looking for solutions that are both functional and reasonably priced.
Edited by techjp (see edit history)
Link to comment
Share on other sites

Of course it is your product and you can price it at what you think is most reasonable. I was just certain it had been 5500yen earlier today but is now 8500yen.

 

Unfortunately at 8500yen it is beyond what I am able to pay, at least with our need to standardize the modules used for multiple sites.

Link to comment
Share on other sites

  • 2 months later...

Just for your reference - our module may be able to resolve your issues.

 

We have a module - Agile seller shipping module, that will display shipping carriers and products as following screenshot image.

Buyer will be able to choose carrier per product, each product will have a list of carriers in drop-down list for buyer to choose.

And of course buyer is able to choose same carrier to save shipping fee if the products are using the same carrier

 

Note - Agile seller shipping module is an accessory module of Agile Multiple seller module - if you use for single seller, we can consider to give  you some discount.

 

Will the seller shipping module work as standalone without the multiple seller module?

Link to comment
Share on other sites

Hi prestamax

Thanks for your inquiry.

 

 

Will the seller shipping module work as standalone without the multiple seller module?

 

 

 
It will not work properly without agile multiple seller modules.
But you can do not have to register multiple sellers, with the 2 module, you can set your main store as one seller store. it should work.
let me know if you have further questions.
Link to comment
Share on other sites

  • 10 months later...
  • 6 months later...

I had the same issue but managed to resolve it. This is what I did (in prestashop 1.6.1.19)

Go to themes/yourtheme/order-carrier.tpl

To show the logo of the first carrier look for:

{assign var="first" value=current($option.carrier_list)}
<td class="delivery_option_logo{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
	{if $first.logo}
		<img class="order_carrier_logo" src="{$first.logo|escape:'htmlall':'UTF-8'}"alt="{$first.instance->name|escape:'htmlall':'UTF-8'}"/>
	{elseif !$option.unique_carrier}
		{$first.instance->name|escape:'htmlall':'UTF-8'}
	{/if}
</td>

Change it to:

{assign var="first" value=current($option.carrier_list)}
<td class="delivery_option_logo">
	{if $first.logo}
		<img class="order_carrier_logo" src="{$first.logo|escape:'htmlall':'UTF-8'}"alt="{$first.instance->name|escape:'htmlall':'UTF-8'}"/>
	{elseif !$option.unique_carrier}
		{$first.instance->name|escape:'htmlall':'UTF-8'}
	{/if}
</td>

To show the delivery time and item(s) that will be delivered with the first carrier you have to change the following code:

<td class="{if $option.unique_carrier}first_item{/if}{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($first.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                            		
  			{$first.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

To:

<td class="{if $option.unique_carrier}first_item{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($first.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                            		
  			{$first.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

If you also want to add the first Carrier name somewhere , just add {$first.instance->name|escape:'htmlall':'UTF-8'} where ever you want it to show up.

Now for the second carrier.

Look for this code:

{foreach $option.carrier_list as $carrier}
	{if $carrier@iteration != 1}
		<tr>
			<td class="delivery_option_logo{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
				{if $carrier.logo}
					<img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
				{elseif !$option.unique_carrier}
					{$carrier.instance->name|escape:'htmlall':'UTF-8'}
				{/if}
		</td>

Change it to:

{foreach $option.carrier_list as $carrier}
	{if $carrier@iteration != 1}
		<tr>
			<td class="delivery_option_logo">
				{if $carrier.logo}
					<img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
				{elseif !$option.unique_carrier}
					{$carrier.instance->name|escape:'htmlall':'UTF-8'}
				{/if}
		</td>

To show the delivery time and item(s) that will be delivered with the second carrier you have to change the following code:

<td class="{if $option.unique_carrier} first_item{/if}{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($carrier.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                                     
  			{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

To this:

<td class="{if $option.unique_carrier} first_item{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($carrier.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                                     
  			{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

and again If you also want to add the second Carrier name somewhere , just add {$carrier.instance->name|escape:'htmlall':'UTF-8'} where ever you want it to show up.

I hope this helps some people out.

xxx

 

  • Like 1
Link to comment
Share on other sites

  • 2 years later...
On 8/4/2018 at 7:51 PM, Plika1988 said:

I had the same issue but managed to resolve it. This is what I did (in prestashop 1.6.1.19)

Go to themes/yourtheme/order-carrier.tpl

To show the logo of the first carrier look for:


{assign var="first" value=current($option.carrier_list)}
<td class="delivery_option_logo{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
	{if $first.logo}
		<img class="order_carrier_logo" src="{$first.logo|escape:'htmlall':'UTF-8'}"alt="{$first.instance->name|escape:'htmlall':'UTF-8'}"/>
	{elseif !$option.unique_carrier}
		{$first.instance->name|escape:'htmlall':'UTF-8'}
	{/if}
</td>

Change it to:


{assign var="first" value=current($option.carrier_list)}
<td class="delivery_option_logo">
	{if $first.logo}
		<img class="order_carrier_logo" src="{$first.logo|escape:'htmlall':'UTF-8'}"alt="{$first.instance->name|escape:'htmlall':'UTF-8'}"/>
	{elseif !$option.unique_carrier}
		{$first.instance->name|escape:'htmlall':'UTF-8'}
	{/if}
</td>

To show the delivery time and item(s) that will be delivered with the first carrier you have to change the following code:


<td class="{if $option.unique_carrier}first_item{/if}{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($first.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                            		
  			{$first.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

To:


<td class="{if $option.unique_carrier}first_item{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($first.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                            		
  			{$first.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

If you also want to add the first Carrier name somewhere , just add {$first.instance->name|escape:'htmlall':'UTF-8'} where ever you want it to show up.

Now for the second carrier.

Look for this code:


{foreach $option.carrier_list as $carrier}
	{if $carrier@iteration != 1}
		<tr>
			<td class="delivery_option_logo{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
				{if $carrier.logo}
					<img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
				{elseif !$option.unique_carrier}
					{$carrier.instance->name|escape:'htmlall':'UTF-8'}
				{/if}
		</td>

Change it to:


{foreach $option.carrier_list as $carrier}
	{if $carrier@iteration != 1}
		<tr>
			<td class="delivery_option_logo">
				{if $carrier.logo}
					<img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
				{elseif !$option.unique_carrier}
					{$carrier.instance->name|escape:'htmlall':'UTF-8'}
				{/if}
		</td>

To show the delivery time and item(s) that will be delivered with the second carrier you have to change the following code:


<td class="{if $option.unique_carrier} first_item{/if}{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($carrier.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                                     
  			{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

To this:


<td class="{if $option.unique_carrier} first_item{/if}">
	<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
	{if isset($carrier.instance->delay[$cookie->id_lang])}
		<i class="icon-info-sign"></i>
		{strip}                                                                     
  			{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
			&nbsp;
			{if count($first.product_list) <= 1}
				({l s='For this product:'}
			{else}
				({l s='For these products:'}
			{/if}
		{/strip}

and again If you also want to add the second Carrier name somewhere , just add {$carrier.instance->name|escape:'htmlall':'UTF-8'} where ever you want it to show up.

I hope this helps some people out.

xxx

 


Plika1988, you are the bomb!

This solution finally worked for me!

Just one last thing, i am trying to add the names off the carriers, which i would like to place before the transit time of the carrier.
I have been playing with different places in the tpl file, but cant locate the right place.

Can you help me out?

 

Link to comment
Share on other sites

  • 2 weeks later...

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...