Jump to content
thirty bees forum

Help me develop killer One Page Checkout module


datakick

Recommended Posts

On 5/13/2021 at 7:42 AM, datakick said:

In my opinion, when customer goes to checkout page, they need to be reassured first. They really want to know is

  • what carrier they can use
  • what payment method they can use
  • the final price

And chex tries hard to answer these questions. Customer is not required to log in or create an account before these questions are answered. 

What about my suggestion to display all fields in the shopping cart? That would still work excellent with your main idea behind the Chex, and it would bring great benefits.

Link to comment
Share on other sites

  • 2 months later...

I would appreciate the additonal function to move arround / reposition the filed for customer registration. I am thinking especially about the forms/field "company" and "Vat ID" since >90% of our customers are private persons.

Therefore it makes sense for me to move these two forms more to the buttom.

 

If the integration is too time consuming at the moment I would like to know how to achieve this myself. I could not find any 'template' in the views folder of Chex.

Link to comment
Share on other sites

  • 2 weeks later...
  • 11 months later...

@datakick we do have a strange problem occuring with orders. Different customers create new shopping carts and the addresses of previous customers are assigned to them.

We do use Chex I don't know, and I don't know if Chex by any chance has an impact on this error with the mechanism of remembering baskets. I have also noticed that there are rare situations when a customer registers on the site, leaves the site and after a few days comes back to finalize the order. The order confirmation shows not the data he addresses into Chex when placing the order, but the delivery data from the previous customer (in the Prestashop panel it looks as if the customer has 2 addresses set up, the default one being the wrong one, from the previous customer).

There's a screenshot from the ps_ cart table:

image.thumb.png.8455b923c2e70bbf4f3e8263c9d7274d.png

 

I would be very grateful if you could help by any means - we do use Chex on 2 of our websites, and we would love to continue doing so.

Link to comment
Share on other sites

@Herrosik there is implemented address-sharing during checkout phase. If you look into database for addresses 5701 you will probably see that this is dummy address that does not actually contains any (customer) relevant information other than country / state. 

The reason behind this is, well, the stupidity of prestashop/thirty bees price calculation. In order to determine final price for cart, we have to have an address. That's the reason why (most/all) checkout flows require you to first create an account, then create address, and then select carrier and payment option. 

Chex, on the other hand, allows you to select carrier and payment first, so you can quickly see final price. To do that, it created few dummy addresses, and use these to calculate the cart price. Once you progress in your checkout flow, and create account / login, then the actual address will be used instead. There is a hope that the final price will not change with this step (but it might. For example, if you use module that assign different delivery zone for zipcode ranges)

TLDR: this is expected behaviour. Look into database for addresses with id 5701 / 5702 / 5703 and you should see that these are, in fact, dummy addresses.

 

Link to comment
Share on other sites

@datakick thank you very much for the message. The creation of dummy addresses itself does not bother me, however, as I mentioned, there are situations (rare, once in a few dozen/hundred orders) in which when the customer already registered places an order, he gets the data of the previous customer in the confirmation in the address fields. At first, I suspected that it might have had something to do with clearing the database on the 2nd website with PSCleaner, however, recently this problem also occurred on 1st store, on which we never cleared the order databases. Given the fact that we use Chex on both stores, I thought this might have an impact on this problem. Do you have any suspicions about what might be causing such a problem? Thanks in advance, the module is great, we would just want to fix that issue, since that's quite a critical one.

Link to comment
Share on other sites

  • 2 weeks later...

Has anyone gotten Google Pay or Apple Pay to show in Chex with the official (not tb) Stripe module? They don't show for me. The module developers say:

Quote
The "One Page Checkout" modules which display all steps of the purchase tunnel in a single page may cause incompatibility with the Stripe module for some payment method.
 
Most of the time, these modules redefine a part of the purchase tunnel, making the refresh of payment amounts following the choice of carrier non-operational. However, this operation is essential for Stripe to receive the correct order amount. It also happens that these modules cause Javascript errors that hide or render inoperative the payment by card, Apple Pay or Google Pay. 
 
The Stripe module provides an "actionStripeDefineOrderPageNames" hook for these modules to declare themselves. You can ask the OPC module editor to make it compatible with your module so that it triggers the events necessary for the means of payment to operate.

I'm guessing for now that there's an incompatibility but I'd like to ask for your experience. :)

Link to comment
Share on other sites

  • 3 weeks later...

@datakick did you manage to find any potential issue? I found out a thread on prestashop.com with very similar issue to ours, I'll put down the link:
https://www.prestashop.com/forums/topic/954154-critical-issue-wrong-information-to-wrong-customer/

Do you have any idea what can it be caused by? If yes, I would very much appreciate your help since I'm searching for a solution for a long time and nothing seems to work.

Edited by Herrosik
Link to comment
Share on other sites

47 minutes ago, Herrosik said:

@datakick any chance you could take a look at that in your free time? We really spread our hands, not knowing what to do. Big thanks in advance!

We use to have this issue, but it seemed to go away. Never found out the reason. I did create a bug report but it never got anywhere

https://github.com/thirtybees/thirtybees/issues/1120

 

 

Link to comment
Share on other sites

I double checked the code, but didn't find anything suspicious. 

What I can do is to implement some stop-gag measure, when I can verify at the very last second that the used address belongs to the customer, and raise an exception if not. Of course, that would prevent checkout completion. 

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Just before I got this module I also got Google Maps Address auto completer and  Krona.. Chex does not seem to play with either of these.

 

Krona adds a referral code and Google maps adds the map and validates the address during registration and work fine on Niara.

Is Chex set up to allow these types of things? Or am I doing something wrong with configuration?

Link to comment
Share on other sites

chex uses different payment discovery API that standard checkout page. 

Standard checkout calls hook 'displayPayment' that returns arbitrary html / js code that should be injected into the page. Chex does not do this, as it would not be able to control the page flow if it was constructed randomly. Instead, it uses hook 'displayPaymentEU', that returns list of payment options together with action to be performed. The result is the same as when you enabled 'Advanced EU Compliance' module checkout page.

Link to comment
Share on other sites

17 hours ago, datakick said:

chex uses different payment discovery API that standard checkout page. 

Standard checkout calls hook 'displayPayment' that returns arbitrary html / js code that should be injected into the page. Chex does not do this, as it would not be able to control the page flow if it was constructed randomly. Instead, it uses hook 'displayPaymentEU', that returns list of payment options together with action to be performed. The result is the same as when you enabled 'Advanced EU Compliance' module checkout page.

Ok, this sounds pretty difficult to move past for good reason.

Probably its best to encourage people to use the traditional methods to sign up rather than using the checkout to sign up, this way they can have the other features like those we've mentioned... 

Is there some text we can add in the Chex checkout under "Personal Details" along the lines of "This section enables fast checkout. For faster full service registration including referral codes and faster Autoaddress completion please click here (/my-account). Your items in the cart will be saved if you do this and you will be returned to this cart once its done".

 

I realise not everyone would want this, so maybe could be set up in Settings?

 

This seems like a very quick and easy way to circumvent the problem rather than battling with issues you mentioned.

Link to comment
Share on other sites

  • 1 month later...
On 9/6/2022 at 2:08 AM, datakick said:

I double checked the code, but didn't find anything suspicious. 

What I can do is to implement some stop-gag measure, when I can verify at the very last second that the used address belongs to the customer, and raise an exception if not. Of course, that would prevent checkout completion. 

Did you ever produce a module update that addresses this issue. I've dealt with the same problem for multiple years now. It doesn't happen often, but it definitely happens exactly as @Herrosik explained. Then our fulfillment team ships to the wrong address that was injected and it costs us on every order to fix and replace. It happens enough that we're considering leaving TB because the service costs associated with fixing orders are negating value gained by using the software.

@datakick, can you advise if and you we can resolve this issue?

Link to comment
Share on other sites

1 hour ago, x97wehner said:

Did you ever produce a module update that addresses this issue. I've dealt with the same problem for multiple years now. It doesn't happen often, but it definitely happens exactly as @Herrosik explained. Then our fulfillment team ships to the wrong address that was injected and it costs us on every order to fix and replace. It happens enough that we're considering leaving TB because the service costs associated with fixing orders are negating value gained by using the software.

@datakick, can you advise if and you we can resolve this issue?

Unfortunately I was never able to reproduce the issue, and I didn't found any problem with static code analysis.

I don't know what to fix. I don't know how to verify that the fix 'fixed' the bug. I need some repro-steps, but nobody was able to provide that yet.

Link to comment
Share on other sites

37 minutes ago, datakick said:

Unfortunately I was never able to reproduce the issue, and I didn't found any problem with static code analysis.

I don't know what to fix. I don't know how to verify that the fix 'fixed' the bug. I need some repro-steps, but nobody was able to provide that yet.

I've been trying to reproduce it as well and haven't figured out the sequence. All I know is that it is happening far two often. I had two of them already this week. Being a U.S. company that sells into Canada, we require state or province. In the U.S., the incorrect injected shipping customer is always in the state of Alabama. We had our first Canadian issue this week as well and the injected shipping customer was based in Ottawa.

I'm unable to tell if it is showing the customer the wrong information ahead of them processing the order. I have confirmed that the wrong shipping information shows on their order documents and within the system after being processed. Also, the link of the incorrect shipping information doesn't ever link to the ordering customer's record. If we catch it ahead of shipping, I can switch the order's shipping information to the ordering customers correct address, and then that incorrect address that previously was linked is no longer linked to the order or the customer anywhere that I can see at the database level.

Edited by x97wehner
Link to comment
Share on other sites

2 hours ago, x97wehner said:

I've been trying to reproduce it as well and haven't figured out the sequence. All I know is that it is happening far two often. I had two of them already this week. Being a U.S. company that sells into Canada, we require state or province. In the U.S., the incorrect injected shipping customer is always in the state of Alabama. We had our first Canadian issue this week as well and the injected shipping customer was based in Ottawa.

I'm unable to tell if it is showing the customer the wrong information ahead of them processing the order. I have confirmed that the wrong shipping information shows on their order documents and within the system after being processed. Also, the link of the incorrect shipping information doesn't ever link to the ordering customer's record. If we catch it ahead of shipping, I can switch the order's shipping information to the ordering customers correct address, and then that incorrect address that previously was linked is no longer linked to the order or the customer anywhere that I can see at the database level.

I just released new version that strengthens the address manipulation logic. Hopefully that will fix this issue.

Also, I added one last-second validation check. This one ensures that address belongs to customer, and is performed just before the final redirect to payment. So, if the strengthening of address manipulation did not work, this one at least block the order creation.

Please test 

  • Thanks 1
Link to comment
Share on other sites

1 hour ago, datakick said:

I just released new version that strengthens the address manipulation logic. Hopefully that will fix this issue.

Also, I added one last-second validation check. This one ensures that address belongs to customer, and is performed just before the final redirect to payment. So, if the strengthening of address manipulation did not work, this one at least block the order creation.

Please test 

I will do that. Thank you

Link to comment
Share on other sites

Hello,  i have tried the Chex 0.9.0 , but now i am getting an error 500.

I have choosen the One Page Checkout (Order process type) in BO Preferences/Orders  and the module is active (but i have no valid license).

The error is as follows. What to do? What is happening and how can i solve this.  I think i really will use Chex but i have to fix this first.

 

1:{*
2:* 2007-2015 PrestaShop
3:*
4:* NOTICE OF LICENSE
5:*
6:* This source file is subject to the Academic Free License (AFL 3.0)
7:* that is bundled with this package in the file LICENSE.txt.
8:* It is also available through the world-wide-web at this URL:
9:* http://opensource.org/licenses/afl-3.0.php
10:* If you did not receive a copy of the license and are unable to
11:* obtain it through the world-wide-web, please send an email
12:* to license@prestashop.com so we can send you a copy immediately.
13:*
14:* DISCLAIMER
15:*
16:* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
17:* versions in the future. If you wish to customize PrestaShop for your
18:* needs please refer to http://www.prestashop.com for more information.
19:*
20:*  @author PrestaShop SA <contact@prestashop.com>
21:*  @copyright  2007-2015 PrestaShop SA
22:*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
23:*  International Registered Trademark & Property of PrestaShop SA
24:*}
25:{if !$opc}
26:	{capture name=path}{l s='Shipping:'}{/capture}
27:	{assign var='current_step' value='shipping'}
28:	<div id="carrier_area">
29:		<h1 class="page-heading">{l s='Shipping:'}</h1>
30:<!-- disabled showing order-steps -->
31:		{* include file="$tpl_dir./order-steps.tpl" *}
32:		{include file="$tpl_dir./errors.tpl"}
33:		<form id="form" action="{$link->getPageLink('order', true, NULL, "{if $multi_shipping}multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" method="post" name="carrier_area">
34:{else}
35:	<div id="carrier_area" class="opc-main-block">
36:		<h1 class="page-heading step-num"><span>2</span> {l s='Delivery methods'}</h1>
37:			<div id="opc_delivery_methods" class="opc-main-block">
38:				<div id="opc_delivery_methods-overlay" class="opc-overlay" style="display: none;"></div>
39:{/if}
40:<div class="order_carrier_content box">
41:	{if isset($virtual_cart) && $virtual_cart}
42:		<input id="input_virtual_carrier" class="hidden" type="hidden" name="id_carrier" value="0" />
43:        <p class="alert alert-warning">{l s='No carrier is needed for this order.'}</p>
44:	{else}
45:		<div id="HOOK_BEFORECARRIER">
46:			{if isset($carriers) && isset($HOOK_BEFORECARRIER)}
47:				{$HOOK_BEFORECARRIER}
48:			{/if}
49:		</div>
50:		{if isset($isVirtualCart) && $isVirtualCart}
51:			<p class="alert alert-warning">{l s='No carrier is needed for this order.'}</p>
52:		{else}
53:			<div class="delivery_options_address">
54:				{if isset($delivery_option_list)}
55:					{foreach $delivery_option_list as $id_address => $option_list}
56:						<p class="carrier_title">
57:							{if isset($address_collection[$id_address])}
58:								{l s='Choose a shipping option for this address:'} {$address_collection[$id_address]->alias}
59:							{else}
60:								{l s='Choose a shipping option'}
61:							{/if}
62:						</p>
63:						<div class="delivery_options">
64:							{foreach $option_list as $key => $option}
65:								<div class="delivery_option {if ($option@index % 2)}alternate_{/if}item">
66:									<div>
67:										<table class="resume table table-bordered{if !$option.unique_carrier} hide{/if}">
68:											<tr>
69:												<td class="delivery_option_radio">
70:													<input id="delivery_option_{$id_address|intval}_{$option@index}" class="delivery_option_radio" type="radio" name="delivery_option[{$id_address|intval}]" data-key="{$key}" data-id_address="{$id_address|intval}" value="{$key}"{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} checked="checked"{/if} />
71:												</td>
72:												<td class="delivery_option_logo">
73:													{foreach $option.carrier_list as $carrier}
74:														{if $carrier.logo}
75:															<img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
76:														{elseif !$option.unique_carrier}
77:															{$carrier.instance->name|escape:'htmlall':'UTF-8'}
78:															{if !$carrier@last} - {/if}
79:														{/if}
80:													{/foreach}
81:												</td>
82:												<td>
83:													{if $option.unique_carrier}
84:														{foreach $option.carrier_list as $carrier}
85:															<strong>{$carrier.instance->name|escape:'htmlall':'UTF-8'}</strong>
86:														{/foreach}
87:														{if isset($carrier.instance->delay[$cookie->id_lang])}
88:															<br />{l s='Delivery time:'}&nbsp;{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
89:														{/if}
90:													{/if}
91:													{if count($option_list) > 1}
92:													<br />
93:														{if $option.is_best_grade}
94:															{if $option.is_best_price}
95:																<span class="best_grade best_grade_price best_grade_speed">{l s='The best price and speed'}</span>
96:															{else}
97:																<span class="best_grade best_grade_speed">{l s='The fastest'}</span>
98:															{/if}
99:														{elseif $option.is_best_price}
100:															<span class="best_grade best_grade_price">{l s='The best price'}</span>
101:														{/if}
102:													{/if}
103:												</td>
104:												<td class="delivery_option_price">
105:													<div class="delivery_option_price">
106:														{if $option.total_price_with_tax && !$option.is_free && (!isset($free_shipping) || (isset($free_shipping) && !$free_shipping))}
107:															{if $use_taxes == 1}
108:																{if $priceDisplay == 1}
109:																	{convertPrice price=$option.total_price_without_tax}{if $display_tax_label} {l s='(tax excl.)'}{/if}
110:																{else}
111:																	{convertPrice price=$option.total_price_with_tax}{if $display_tax_label} {l s='(tax incl.)'}{/if}
112:																{/if}
113:															{else}
114:																{convertPrice price=$option.total_price_without_tax}
115:															{/if}
116:														{else}
117:															{l s='Free'}
118:														{/if}
119:													</div>
120:												</td>
121:											</tr>
122:										</table>
123:										{if !$option.unique_carrier}
124:											<table class="delivery_option_carrier{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} selected{/if} resume table table-bordered{if $option.unique_carrier} hide{/if}">
125:												<tr>
126:													{if !$option.unique_carrier}
127:														<td rowspan="{$option.carrier_list|@count}" class="delivery_option_radio first_item">
128:															<input id="delivery_option_{$id_address|intval}_{$option@index}" class="delivery_option_radio" type="radio" name="delivery_option[{$id_address|intval}]" data-key="{$key}" data-id_address="{$id_address|intval}" value="{$key}"{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} checked="checked"{/if} />
129:														</td>
130:													{/if}
131:													{assign var="first" value=current($option.carrier_list)}
132:													<td class="delivery_option_logo{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
133:														{if $first.logo}
134:															<img class="order_carrier_logo" src="{$first.logo|escape:'htmlall':'UTF-8'}" alt="{$first.instance->name|escape:'htmlall':'UTF-8'}"/>
135:														{elseif !$option.unique_carrier}
136:															{$first.instance->name|escape:'htmlall':'UTF-8'}
137:														{/if}
138:													</td>
139:													<td class="{if $option.unique_carrier}first_item{/if}{if $first.product_list[0].carrier_list[0] eq 0} hide{/if}">
140:														<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
141:														{if isset($first.instance->delay[$cookie->id_lang])}
142:															<i class="icon-info-sign"></i>
143:															{strip}
144:																{$first.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
145:																&nbsp;
146:																{if count($first.product_list) <= 1}
147:																	({l s='For this product:'}
148:																{else}
149:																	({l s='For these products:'}
150:																{/if}
151:															{/strip}
152:															{foreach $first.product_list as $product}
153:																{if $product@index == 4}
154:																	<acronym title="
155:																{/if}
156:																{strip}
157:																	{if $product@index >= 4}
158:																		{$product.name|escape:'htmlall':'UTF-8'}
159:																		{if isset($product.attributes) && $product.attributes}
160:																			{$product.attributes|escape:'htmlall':'UTF-8'}
161:																		{/if}
162:																		{if !$product@last}
163:																			,&nbsp;
164:																		{else}
165:																			">&hellip;</acronym>)
166:																		{/if}
167:																	{else}
168:																		{$product.name|escape:'htmlall':'UTF-8'}
169:																		{if isset($product.attributes) && $product.attributes}
170:																			{$product.attributes|escape:'htmlall':'UTF-8'}
171:																		{/if}
172:																		{if !$product@last}
173:																			,&nbsp;
174:																		{else}
175:																			)
176:																		{/if}
177:																	{/if}
178:																{/strip}
179:															{/foreach}
180:														{/if}
181:													</td>
182:													<td rowspan="{$option.carrier_list|@count}" class="delivery_option_price">
183:														<div class="delivery_option_price">
184:															{if $option.total_price_with_tax && !$option.is_free && (!isset($free_shipping) || (isset($free_shipping) && !$free_shipping))}
185:																{if $use_taxes == 1}
186:																	{if $priceDisplay == 1}
187:																		{convertPrice price=$option.total_price_without_tax}{if $display_tax_label} {l s='(tax excl.)'}{/if}
188:																	{else}
189:																		{convertPrice price=$option.total_price_with_tax}{if $display_tax_label} {l s='(tax incl.)'}{/if}
190:																	{/if}
191:																{else}
192:																	{convertPrice price=$option.total_price_without_tax}
193:																{/if}
194:															{else}
195:																{l s='Free'}
196:															{/if}
197:														</div>
198:													</td>
199:												</tr>
200:												{foreach $option.carrier_list as $carrier}
201:													{if $carrier@iteration != 1}
202:													<tr>
203:														<td class="delivery_option_logo{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
204:															{if $carrier.logo}
205:																<img class="order_carrier_logo" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
206:															{elseif !$option.unique_carrier}
207:																{$carrier.instance->name|escape:'htmlall':'UTF-8'}
208:															{/if}
209:														</td>
210:														<td class="{if $option.unique_carrier} first_item{/if}{if $carrier.product_list[0].carrier_list[0] eq 0} hide{/if}">
211:															<input type="hidden" value="{$first.instance->id|intval}" name="id_carrier" />
212:															{if isset($carrier.instance->delay[$cookie->id_lang])}
213:																<i class="icon-info-sign"></i>
214:																{strip}
215:																	{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
216:																	&nbsp;
217:																	{if count($first.product_list) <= 1}
218:																		({l s='For this product:'}
219:																	{else}
220:																		({l s='For these products:'}
221:																	{/if}
222:																{/strip}
223:																{foreach $carrier.product_list as $product}
224:																	{if $product@index == 4}
225:																		<acronym title="
226:																	{/if}
227:																	{strip}
228:																		{if $product@index >= 4}
229:																			{$product.name|escape:'htmlall':'UTF-8'}
230:																			{if isset($product.attributes) && $product.attributes}
231:																				{$product.attributes|escape:'htmlall':'UTF-8'}
232:																			{/if}
233:																			{if !$product@last}
234:																				,&nbsp;
235:																			{else}
236:																				">&hellip;</acronym>)
237:																			{/if}
238:																		{else}
239:																			{$product.name|escape:'htmlall':'UTF-8'}
240:																			{if isset($product.attributes) && $product.attributes}
241:																				{$product.attributes|escape:'htmlall':'UTF-8'}
242:																			{/if}
243:																			{if !$product@last}
244:																				,&nbsp;
245:																			{else}
246:																				)
247:																			{/if}
248:																		{/if}
249:																	{/strip}
250:																{/foreach}
251:															{/if}
252:														</td>
253:													</tr>
254:													{/if}
255:												{/foreach}
256:											</table>
257:										{/if}
258:									</div>
259:								</div> <!-- end delivery_option -->
260:							{/foreach}
261:						</div> <!-- end delivery_options -->
262:						<div class="hook_extracarrier" id="HOOK_EXTRACARRIER_{$id_address}">
263:							{if isset($HOOK_EXTRACARRIER_ADDR) &&  isset($HOOK_EXTRACARRIER_ADDR.$id_address)}{$HOOK_EXTRACARRIER_ADDR.$id_address}{/if}
264:						</div>
265:						{foreachelse}
266:							{assign var='errors' value=' '|explode:''}
267:							<p class="alert alert-warning" id="noCarrierWarning">
268:								{foreach $cart->getDeliveryAddressesWithoutCarriers(true, $errors) as $address}
269:									{if empty($address->alias)}
270:										{l s='No carriers available.'}
271:									{else}
272:										{assign var='flag_error_message' value=false}
273:										{foreach $errors as $error}
274:											{if $error == Carrier::SHIPPING_WEIGHT_EXCEPTION}
275:												{$flag_error_message = true}
276:												{l s='The product selection cannot be delivered by the available carrier(s): it is too heavy. Please amend your cart to lower its weight.'}
277:											{elseif $error == Carrier::SHIPPING_PRICE_EXCEPTION}
278:												{$flag_error_message = true}
279:												{l s='The product selection cannot be delivered by the available carrier(s). Please amend your cart.'}
280:											{elseif $error == Carrier::SHIPPING_SIZE_EXCEPTION}
281:												{$flag_error_message = true}
282:												{l s='The product selection cannot be delivered by the available carrier(s): its size does not fit. Please amend your cart to reduce its size.'}
283:											{/if}
284:										{/foreach}
285:										{if !$flag_error_message}
286:											{l s='No carriers available for the address "%s".' sprintf=$address->alias}
287:										{/if}
288:									{/if}
289:									{if !$address@last}
290:										<br />
291:									{/if}
292:								{foreachelse}
293:									{l s='No carriers available.'}
294:								{/foreach}
295:							</p>
296:						{/foreach}
297:					{/if}
298:				</div> <!-- end delivery_options_address -->
299:				<div id="extra_carrier" style="display: none;"></div>
300:				{if $opc}
301:					<p class="carrier_title">{l s='Leave a message'}</p>
302:					<div>
303:						<p>{l s='If you would like to add a comment about your order, please write it in the field below.'}</p>
304:						<textarea class="form-control" cols="120" rows="2" name="message" id="message">{strip}
305:							{if isset($oldMessage)}{$oldMessage|escape:'html':'UTF-8'}{/if}
306:						{/strip}</textarea>
307:					</div>
308:				{/if}
309:				{if $recyclablePackAllowed}
310:					<p class="carrier_title">{l s='Recyclable Packaging'}</p>
311:					<div class="checkbox recyclable">
312:						<label for="recyclable">
313:							<input type="checkbox" name="recyclable" id="recyclable" value="1"{if $recyclable == 1} checked="checked"{/if} />
314:							{l s='I would like to receive my order in recycled packaging.'}
315:						</label>
316:					</div>
317:				{/if}
318:				{if $giftAllowed}
319:					{if $opc}
320:						<hr style="" />
321:					{/if}
322:					<p class="carrier_title">{l s='Gift'}</p>
323:					<p class="checkbox gift">
324:						<input type="checkbox" name="gift" id="gift" value="1"{if $cart->gift == 1} checked="checked"{/if} />
325:						<label for="gift">
326:							{l s='I would like my order to be gift wrapped.'}
327:							{if $gift_wrapping_price > 0}
328:								&nbsp;<i>({l s='Additional cost of'}
329:								<span class="price" id="gift-price">
330:									{if $priceDisplay == 1}
331:										{convertPrice price=$total_wrapping_tax_exc_cost}
332:									{else}
333:										{convertPrice price=$total_wrapping_cost}
334:									{/if}
335:								</span>
336:								{if $use_taxes && $display_tax_label}
337:									{if $priceDisplay == 1}
338:										{l s='(tax excl.)'}
339:									{else}
340:										{l s='(tax incl.)'}
341:									{/if}
342:								{/if})
343:								</i>
344:							{/if}
345:						</label>
346:					</p>
347:					<p id="gift_div">
348:						<label for="gift_message">{l s='If you\'d like, you can add a note to the gift:'}</label>
349:						<textarea rows="2" cols="120" id="gift_message" class="form-control" name="gift_message">{$cart->gift_message|escape:'html':'UTF-8'}</textarea>
350:					</p>
351:				{/if}
352:				{/if}
353:			{/if}
354:			{if $conditions && $cms_id && (! isset($advanced_payment_api) || !$advanced_payment_api)}
355:				{if $opc}
356:					<hr style="" />
357:				{/if}
358:                {if isset($override_tos_display) && $override_tos_display}
359:                    {$override_tos_display}
360:                {else}
361:					<p class="checkbox">
362:						<input type="checkbox" name="cgv" id="cgv" value="1" {if $checkedTOS}checked="checked"{/if} />
363:						<label for="cgv">{l s='I agree to the terms of service and will adhere to them unconditionally.'}</label>
364:						<a href="{$link_conditions|escape:'html':'UTF-8'}" class="iframe" rel="nofollow">{l s='(Read the Terms of Service)'}</a>
365:					</p>
366:				{/if}
367:			{/if}
368:		</div> <!-- end delivery_options_address -->
369:		{if !$opc}
370:				<p class="cart_navigation clearfix">
371:					<input type="hidden" name="step" value="3" />
372:					<input type="hidden" name="back" value="{$back}" />
373:					{if !$is_guest}
374:						{if $back}
375:							<a href="{$link->getPageLink('order', true, NULL, "step=1&back={$back}{if $multi_shipping}&multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="button-exclusive btn btn-default">
376:								<i class="icon-chevron-left"></i>
377:								{l s='Continue shopping'}
378:							</a>
379:						{else}
380:							<a href="{$link->getPageLink('order', true, NULL, "step=1{if $multi_shipping}&multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="button-exclusive btn btn-default">
381:								<i class="icon-chevron-left"></i>
382:								{l s='Continue shopping'}
383:							</a>
384:						{/if}
385:					{else}
386:						<a href="{$link->getPageLink('order', true, NULL, "{if $multi_shipping}multi-shipping={$multi_shipping}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="button-exclusive btn btn-default">
387:							<i class="icon-chevron-left"></i>
388:							{l s='Continue shopping'}
389:						</a>
390:					{/if}
391:					{if isset($virtual_cart) && $virtual_cart || (isset($delivery_option_list) && !empty($delivery_option_list))}
392:						<button type="submit" name="processCarrier" class="button btn standard-checkout button-medium">
393:							<span>
394:								{l s='Proceed to checkout'}
395:								<i class="icon-chevron-right right"></i>
396:							</span>
397:						</button>
398:					{/if}
399:				</p>
400:			</form>
401:	{else}
402:		</div> <!-- end opc_delivery_methods -->
403:	{/if}
404:</div> <!-- end carrier_area -->
405:{strip}
406:{if !$opc}
407:	{addJsDef orderProcess='order'}
408:	{if isset($virtual_cart) && !$virtual_cart && $giftAllowed && $cart->gift == 1}
409:		{addJsDef cart_gift=true}
410:	{else}
411:		{addJsDef cart_gift=false}
412:	{/if}
413:	{addJsDef orderUrl=$link->getPageLink("order", true)|escape:'quotes':'UTF-8'}
414:	{addJsDefL name=txtProduct}{l s='Product' js=1}{/addJsDefL}
415:	{addJsDefL name=txtProducts}{l s='Products' js=1}{/addJsDefL}
416:{/if}
417:{if $conditions}
418:	{addJsDefL name=msg_order_carrier}{l s='You must agree to the terms of service before continuing.' js=1}{/addJsDefL}
419:{/if}
420:{/strip}

------------------

Stack trace
1. vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php:123 source content_639db455e37a08_08437405(arguments)
2. vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php:114 source Smarty_Template_Resource_Base->getRenderedTemplateCode(arguments)
3. vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php:216 source Smarty_Template_Compiled->render(arguments)
4. vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php:385 source Smarty_Internal_Template->render()
5. themes/01response/order-opc.tpl source Smarty_Internal_Template->_subTemplateRender(arguments)
6. vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php:123 source content_639db455ba2254_18635637(arguments)
7. vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php:114 source Smarty_Template_Resource_Base->getRenderedTemplateCode(arguments)
8. vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php:216 source Smarty_Template_Compiled->render(arguments)
9. vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php:232 source Smarty_Internal_Template->render(arguments)
10. vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php:116 source Smarty_Internal_TemplateBase->_execute(arguments)
11. classes/SmartyCustom.php:179 source Smarty_Internal_TemplateBase->fetch(arguments)
12. classes/controller/FrontController.php:986 source SmartyCustomCore->fetch(arguments)
13. classes/controller/Controller.php:228 source FrontControllerCore->display()
14. classes/controller/FrontController.php:255 source ControllerCore->run()
15. classes/Dispatcher.php:852 source FrontControllerCore->run()
16. ./index.php:33 source DispatcherCore->dispatch()

 

opc_090_error500.txt

Edited by DRMasterChief
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...