This article does not address Advanced shipping or the use of calculators.
Note that if using the techniques below you find you need more rows in a table than five, you should consider paying for a Premium account and using Advanced shipping. The same may apply if my conclusion is "can't be done".
For Mal's cart, standard shipping is mainly defined by selections made in Cart Setup. Login to the cart, Select the Cart Setup tab, select 'Tax and Shipping' then Shipping. An alternative is to hover over 'Shipping' on the left and click on 'Standard shipping'. If you should want to change between Advanced and Standard shipping, then hover over 'Advanced shipping' and click on 'Global settings'.
You may also need to define a 'units' value for each product, which for example, might be the weight. The other product value is noship, valid in some cases as a way of providing free shipping for a product. Note that this does NOT WORK WITH 'post direct to payment', i.e. use of pay.cfm, or with discountpr.
You can say that Shipping is free, is a flat rate per order, is based on the cost of the order (sum of price), or the number of items (sum of qty), or maybe the weight, or some product specific value. You can also say that shipping is free over a certain value.
All of this is done on the Shipping page. Most of these choices relate to numbered Options. For example, Options 4 and 6 relate to charging by the number of items in the order.
Shipping calculations are based on UNITS. If your charges are based on weight, or some other product related factor, you must specify a UNITS value in each product definition. (Described later). If charges are based on order value, or quantity, the calculations are similar, but the UNITS value will be the price or quantity you pass to the cart. (There is also a 'SHIPPING' product value which you can ignore.)
If the charge varies according to order value, quantity, or weight, you may need to specify several numbers. For this you name a 'zone' and define a table with two columns. The first column, UNITS, refers to the price, the quantity, or the UNITS value passed to the cart, and is specified as a series of increments. The second column is COST. For options 6 and 7 this is an amount. For options 4 and 5 it is a multiplier.
Because the charges may vary by shipping destination or carrier service, or some other reason, you can specify up to 5 different 'zones', each with its own table. The Option number you choose applies to all zones.
If you define more than one zone, then before the customer can pay he must select one from a drop down list in the cart, based on the name/text that you supply to describe each zone. He then clicks on Recalculate and the shipping charge is shown.
Before we look at solutions for different situations, let's look at a zone table.
UNITS | COST |
20 | 5 |
10 | 4 |
10 | 3 |
10 | 2 |
The rest | 1 |
The first column, UNITS, will correspond to the number of items when used with options 4 or 6. For options 5 or 7 it will be either the UNITS value passed to the cart for each product, or if a 'units=price' box is checked on the shipping page, then it will be the order value.
Using options 6 and 7, the COST column contains shipping charges. I'll assume dollars. In the example, any number of units up to 20 (whether it be quantity, weight, or value) has a shipping cost of $5. Up to 10 more units will cost another $4. And so on. So 50 units will cost 5+4+3+2 = $14, and any greater amount will cost $14+1. That is the maximum charge.
If we are using options 4 or 5, the COST column contains multipliers. Any number of units up to 20 would be multiplied by 5 to get the shipping charge. If units were pounds, 10lbs would cost $50, 20lbs would cost $100. 21lbs would cost 20*$5 + 1*$4 = $104. There is no maximum. 50lbs would cost $190 (20*5 +10*4 +10*3 +10*2), and every extra 1lb would add $1. No maximum.
Summarising we may say that options 6 and 7 have several thresholds at which the shipping charge increases. The charging structure is a series of steps. Options 4 and 5 use a series of slopes with the charge changing continuously.
There are several ways to specify UNITS with a product. Suppose we wish to pass the weight and it is 3.5
The sample table used integers but decimals may be included, and values may be positive or negative.
Often the use of a table is combined with specification on the shipping page of a flat handling fee, added to all orders. You may also specify that shipping is free if the order value exceeds a threshold.
The following descriptions do not cover the calculator interface.
Check 'No shipping' on the cart setup shipping customization page. See relevant heading if it will apply only to some zones.
There is a separate article on Free shipping.
See the 'free shipping' heading in the relevant section
This is achieved by making the units value 0 for those products.
If the order value is being used as the total units value (options 3, 5, or 7 with the units=price box checked), then you can specify for the 'free shipping' product &noship=1 in a link or name="noship" value="1" for a form. In the latter case when using addmulti.cfm add the product's numeric suffix, e.g. name="noship2". Using noship avoids having to define units values for all products, but does not work with discounbtpr, or use of pay.cfm.
If you are using option 2, 4, or 6 where the item count is the units total, you must change to option 3, 5 or 7 and not check the units=price box. Products to be included in the shipping calculation will need a units value of 1. Those to have free shipping should have a units value defined as (or defaulted to ) 0. The shipping calculation is then similar to that for options 2, 4, and 6 as the units total matches the item count but with free shipping items ignored. See Charging by total weight or other product value below.
Specify this near the start of the shipping customization page. See relevant heading if it is to apply only in some zones.
Check option 1 and specify the amount.
Options 4 or 6. For a zone with flat fee of 5, specify
Units | Cost |
1 | 5 |
Options 5 and 7 could also be used in this case, either with the units=price box checked or by passing products' units values to the cart.
See above for the flat fee table, specifying option 4-7 as recommended below for the other zones.
You may want this if some items are downloadable. Same one line table as before. Option 5 (or 7) and specify noship in the definition of any 'free shipping' products.
Specify on shipping customization page.
Option 7, without checking the units=price box. Set units to 1 for all products.
If the flat fee is 5, waived for orders of over 20 items ..
Units | Cost |
1 | 5 |
19 | 0 |
1 | -5 |
This has to be built into the zone tables. Use options 5 or 7 with the units=price box checked. The last line of the table should reset the total charge to zero. If using option 5 the following example provides for a flat fee of $5, waived when the order value exceeds $100:
Units | Cost |
1 | 5 |
99 | 0 |
0.1 | -50 |
If using option 7 the following example provides for a flat fee of $5, waived when the order value exceeds $100:
Units | Cost |
100 | 5 |
1 | -5 |
Option 2. Specify the 'Shipping cost per item'.
Option 4. The COST column contains multipliers. If the cost per item is 1.50 and the minimum charge $3.30, then:
Units | Cost |
1 | 3.30 the minimum |
1.2 | 0 no more until we get to 2.2 units (i.e. $3.30) |
rest | 1.50 then at standard rate |
Option 4. The COST column contains multipliers. If the cost per item is 1.50 and the maximum charge $10.20, then:
Units | Cost |
6.8 | 1.50 |
Combined with the minimum charge, that would be:
Units | Cost |
1 | 3.30 the minimum |
1.2 | 0 no more until we get to 2.2 units (i.e. $3.30) |
4.6 | 1.50 then at standard rate until maximum |
As above but switch to option 5 and set units=0 for free items, units=1 for the rest. This is equivalent to using option 4 and ignoring some items.
We've seen how to do this with option 4. Other zones could have tables that use the total quantity.
Can't be done. We need the total value but units represents quantity. May be possible if every product has the same price.
Option 5. If the cost per item is 2, waived for orders of over 20 items ..
Units | Cost |
20 | 2 |
1 | -40 |
Normally using option 4 or 6 here. Option 6 has steps at which the shipping cost changes. Using option 4 it changes with each extra item.
This variation forces a change to options 5 or 7, with units set to 0 for 'free shipping' items and set to 1 for the rest. The same tables would be used.
Option tables contain up to five rows. Option 6, the COST column contains amounts.
Units | Cost |
4 | 2 |
10 | 1.80 |
10 | 1.60 |
10 | 1.40 |
The rest | 1 |
Shipping for 1, 2, 3, or 4, items is the same amount. 2. Then there is the first step. Up to 10 more cost another 1.80. 34 (the sum of the UNITS column) would cost 6.80 (2+1.80+1.60+1.40). ANY quantity over 34 would cost 7.80.
Using option 6 this will normally be defined by the first line in the table.
If items ordered have free shipping, they must be omitted from the quantity. We must change from option 6 to option 7 and set units to 0 for 'free shipping' products and 1 for the rest.
Using option 6 (or 7) we simply define the table so that the COST column values sum to the maximum required. In the previous table the total was 7.80.
Can't be done. We need order value but units is the quantity. May be possible if every product has the same price.
Option 6 (or 7 as above). Make the total of the four UNITS values equal to the threshold. Line 5, The rest, should negate the charges. The example has a threshold of 34.
Units | Cost |
4 | 2 |
10 | 1.80 |
10 | 1.60 |
10 | 1.40 |
The rest | -6.80 |
Now we use option 4.
Units | Cost |
4 | 0.5 |
10 | 0.18 |
10 | 0.16 |
10 | 0.14 |
The rest | 0.1 |
The COST column contains multipliers. The shipping charge for 1 unit would be 0.5, for 2 it's 1. For 3 the charge is 1.5 and for 4 it is 2. For this quantity the price is the same as using option 6 and the previous table.
A significant difference (from option 6) is that the value of 0.1 in the final line is a multiplier. There is no maximum value. 0.1 is added for EVERY additional unit over 34.
If we wanted a minimum of 2 we could specify a flat handling fee of 2 on the shipping customization page, and change the table, setting the first multiplier to 0.
Units | Cost |
4 | 0 |
10 | 0.18 |
10 | 0.16 |
10 | 0.14 |
The rest | 0.1 |
Where the minimum varies by zone, the Flat Handling Fee cannot be used to specify the different minimum values. Using the same example without a flat handling fee, we achieve the minimum with:
Units | Cost |
1 | 2 |
3 | 0 |
10 | 0.18 |
10 | 0.16 |
The rest | .14 |
The first unit is charged at the level to cover up to 4 items. This change uses another row of our table leaving a problem. It often happens that one runs out of bands or steps, forcing us to combine some.
This needs a change from option 4 to option 5. 'Free shipping' products must have units set to 0, and the rest have units set to 1. This is equivalent to option 4 but omitting some items from the 'quantity'.
This has to be achieved using the first four rows only. Anything in the fifth will apply ad infinitum.
Can't be done. We need order value but units is the quantity. May be possible if every product has the same price.
Option 6 (or 7 if some items have free shipping as above). Make the total of the first three UNITS values equal to the threshold. Row 4 should negate the charges. The example has free shipping for orders over 24 total items.
Units | Cost |
4 | 0.5 |
10 | 0.18 |
10 | 0.16 |
1 | -5.40 |
Here we use options 5 and 7 and usually check the units=price box. This means that the price is used as the units value and we do not have to specify units for each product. Option 7 has steps at which the shipping cost changes. Using option 5 it changes with each extra unit.
Two approaches here. If discountpr is not used for the free shipping items we can simply add noship to their definitions.
If discountpr is used we need to set units for free products to 0 and base shipping on the units passed to the cart. For all other products we set units to the actual price. Therefore we must not check the units=price box.
Option 7 provides steps in the same way as option 6. The items in the COST column are amounts. The shipping charge is the sum of COST in the relevant lines.
Units | Cost |
10 | 6.85 |
10 | 1.50 |
10 | 1.25 |
10 | 1 |
The rest | 0.9 |
Shipping for 1 to 10 units is the same amount. 6.85. Then there is the first step. Up to 10 more cost another 1.50. 40 (the sum of the UNITS column) would cost 10.60 (6.85+1.50+1.25+1). ANY quantity over 40 would cost 11.50.
Using option 7, the first line of the table provides a minimum charge.
This is the sum of the 5 COSTS in the table.
The total of the four units values should equal the threshold. The fifth row cost should be negative and equal to the sum of the four COST values.
Note however that if some items have free shipping, they will not be included in the threshold.
Units | Cost |
10 | 6.85 |
10 | 1.50 |
10 | 1.25 |
5 | 1 |
The rest | -10.60 |
If the free shipping order value threshold is 35, shipping at that value will be 6.85+1.50+1.25+1 = 10.60. We put this as a negative value in the fifth row.
Can't be done. Probably wouldn't want to!
This uses option 5 where the COST column contains multipliers. A simple 5% could be done using option 3 but with option 5 it just needs
Units | Cost |
The rest | 0.05 |
If the percentage varies with the amount, the table might be
Units | Cost |
10 | 0.7 |
10 | 0.15 |
10 | 0.12 |
10 | 0.10 |
The rest | 0.09 |
An order value of 6 would have a shipping cost of 4.20 (6*0.70). 40 will cost 10.70 (10*0.7+10*0.15+10*0.12+10*0.1). 50 will cost 11.60. There is no limit. Every additional 1 of order value adds 0.09 to shipping.
We can specify a minimum in the Shipping Customization page as a flat handling fee. Suppose it is 5. The two previous tables would need adjustment. In the first we charge 5 as the flat handling fee, then no more until the order value exceeds 100.
Units | Cost |
100 | 0 |
The rest | 0.05 |
In the second we make adjustments. The answers may be 0.10 different from the earlier example (does it matter - if so we can use decimal units) and we have one fewer useful row in our table.
Units | Cost |
7 | 0 |
3 | 0.70 |
10 | 0.15 |
10 | 0.12 |
The rest | 0.09 |
This time we have to implement using the table.
Units | Cost |
1 | 5 |
6 | 0 |
3 | 0.7 |
10 | 0.15 |
The rest | 0.10 |
Again, we have to make compromises. All I'm trying to show is how it might be done!
If we use the fifth row there will not be a maximum. Therefore the maximum is achieved for the order value that is the sum of the UNITS column.
As above, we have to achieve our objective without using the fifth row.
The total of the units in the first three rows should be the threshold. The fourth row then subtracts the result so far.
Note however that if some items have free shipping, they will not be included in the threshold.
Units | Cost |
10 | 0.7 |
10 | 0.15 |
5 | 0.12 |
0.1 | -91 |
Suppose the threshold for free shipping is 25. The third row units value brings the total to that number. Total shipping for three rows is 10*0.7 + 10*0.15 + 5*0.12 = 9.10. When we go ten cents over $25, the shipping charge is eliminated by subtracting 0.1*91.
Can't be done. Probably wouldn't want to!
Here we again use options 5 and 7, with the units values passed to the cart. When using weight, it is sometimes better to use pounds and decimals rather than to specify integral ounces. This is because we are limited to two decimal places in the COST column.
If some items have free shipping, their units value will be 0. Values for other items may be 1 (if using quantity), price (if using order value), or something else such as weight.
We use option 7. The items in the COST column are amounts. The shipping charge is the sum of COST in the relevant lines.
Units | Cost |
0.25 | 3.85 |
0.25 | 1.00 |
0.25 | 0.50 |
0.25 | 0.50 |
This cart expects a maximum order weight of one pound, or kilo, or whatever.
The first line specifies a minimum charge of 3.85.
The maximum shipping charge is 5.85. Adding a fifth row would change the maximum but there would still be one.
Can't be done unless units represents the order value.
We use option 5. The items in the COST column are multipliers.
Units | Cost |
16 | 0.25 |
80 | 0.15 |
80 | 0.10 |
80 | 0.05 |
The rest | 0.01 |
Perhaps the units are ounces. The first pound will cost 4 (16*0.25). Up to 5lbs more will cost 0.15 per ounce. 5lbs costs 13.60 (16*0.25 + 64*0.15). There is no limit.
In the case above, we might want a minimum charge of, say, $3. Specify a flat handling fee of $3 on the shipping page.
Units | Cost |
12 | 0 |
4 | 0.25 |
80 | 0.15 |
80 | 0.10 |
The rest | 0.05 |
The minimum charge of $3 corresponds to 12 units (perhaps ounces), so the first two rows change. We don't increase the charge until after the first 12 units. This requirement uses two rows so we have to compromise in the rest of the table.
As the minimum varies by zone we cannot use a flat handling fee. We'll charge $3 for the first ounce. Unfortunately this method uses more rows.
Units | Cost |
1 | 3 |
11 | 0 |
4 | 0.25 |
80 | 0.15 |
The rest | 0.10 |
The fifth row charges for ever. To limit the charge means we can only use four rows, not the fifth. If we also have a minimum varying by zone, there's not much flexibility left!
Units | Cost |
1 | 3 |
11 | 0 |
4 | 0.25 |
80 | 0.15 |
The rest | 0 |
Can't be done unless units represents the order value.