Blog: ProStores Tips & Tricks

If you're using Web Payments Pro for credit card processing in your ProStores store, you or your customers may be served an error code here and there when there's a problem. Unfortunately, there's no friendly error message text to go with it - until there is (*looking at you ProStores peeps), this list of error codes will help:

API Error Codes - PayPal

Good luck, and happy error hunting.

1. Understand How Shipping Algorithms Work

Shipping is a big part of any online store that delivers a tangible product. It can make or break your success - you must get a handle on shipping. When you use an integrated shipper like UPS or FedEx, there are two options for the Quote Basis - Total Order Weight and Packing Algorithm.

If you intend on using the freight service types, then you must select the "Packing Algorithm" as your Quote Basis (rather than Total Order Weight), and your products must have dimensional values (such as Length, Width and Height).

If you select Packing Algorithm, and you want the algorithm to determine which containers should be used for each order, you must then define shipping containers. Otherwise, the algorithm assumes that each product has a container of "Self" (one product per container). In addition, it is recommended that you enter the weight and dimensions for every product to ensure an accurate quote at checkout.

If you have products that are large in volume, but do not weigh much, then you may want to use the Packing Algorithm as your Quote Basis to get an accurate rate quote. Most shippers (i.e. FedEx, UPS) use a "Dimensional Weight" (L x W x H / 194) for figuring the shipping quote. If the Dimensional Weight is greater than the actual weight of the package, then it will be used for the rate quote. For example, if you have a product that is 14 inches long, 15 inches wide, 16 inches tall and weighs 2 pounds, then the algorithm will use the Dimensional Weight of 17.3 pounds, rather than the actual weight of 2 lbs., to calculate the rate quote.


Keep in mind shipping processors round package length, width and height to the nearest whole number.

2. Get to Know Your SSML

Though SSML is a proprietary template language used only in ProStores, it's structure is similar to other programming languages. Getting to know the syntax and function of the code will help you to better understand the code used in the templates allowing you to better manage your store design.

Consider Dynamic META Tags

There are quite a few ways to add META tags to your site's pages. By far, the most efficient is having them dynamically generated. This way, the Title is alway pertinent and can only improve your sites performance when it comes to search. A ProStores default template has basic META in place that will optimize your product detail pages - which are the most important. For those non-product pages, you can add a simple test to populate META with some default information - it's easy and worth while.

3. Work Those Analytics to the Bone

One of the most important things an e-merchant can do is know what his customer want. Analytics is one of the only ways you will ever really know how your customers use your store. If you don't have them already, get an analytics stats package installed on your store immediately. We recommend Google Analytics.

4. Get More Consistent Stats With robots.txt

A very simple, powerful text document that every store owner should know about. All search engine bots and spiders look for this document at the root of your domain ( - even if its not there. It's most effective use for an e-commerce store owner is to block spiders from following links to the Cart. Obviously, a bot is not going to buy a product - so allowing it to add one to a cart is only going to skew your stats... in a bad way. Using this document to prevent a search engine from "slurping" your cart will guarantee you the freedom of knowing anything added to a cart was added by a real person.

Here is an example robots.txt document:

User-agent: *
Disallow: Cart.bok

Now, save that file in plain text as "robots.txt" and upload it to the root of your domain. Now, no search engine will follow a link or form that goes to the cart. There is plenty of information out there to learn more about the robots.txt file.

5. Redirects Via an htaccess File

Every ProStores store has a homepage. But, it's not named "index.html" like you may expect. It's designed to be the homepage of the store, not necessarily the whole domain. In earlier versions, it was called "StoreFront.bok" - more current versions may be something like "servlet/StoreFront".

Either way, web servers default to "index" and if we want people to land at your storefront, we need to redirect them (tell the server you want them to go somewhere other than "index"). There are a few ways to do this, but only one "right way". Yep, another plain text document that goes at the root of your domain - but this one is hidden.

Warning! You can royally screw your whole site if you don't know what you are doing in this file. Therefore, you will not see an example here.

We strongly recommend speaking with your host provider about this file if you have questions. If the redirect in this document is improper, your search engine ranking may suffer a severe impediment.

The correct way to rewrite this page is by using a "301 redirect". This a permanent move - it tells search engines that "index.html" has been permanently moved to StoreFront.bok. To make sure your ProStores store is redirected correctly, you should use a FireFox extension called Live HTTP Headers. This browser extension will allow you to pull up a window, load a website, and see the machine speak that happens in the background called HTTP Headers. With this information you can look for the 301 - see an example below.


HTTP/1.x 301 Moved Permanently
Date: Mon, 21 Apr 2008 21:07:21 GMT
Server: Apache
Content-Length: 247
Connection: close
Content-Type: text/html; charset=iso-8859-1

If you have an Advanced or better ProStores store, most likely at one time or another you will want to add a log off link to your navigation. This simple SSML snippet will create just that - it makes a link to log on or log off, depending on the user status.

<ss:if test="$customer.isLoggedIn()">
	<ss:link source="$templateSet.logoff">Log Off</ss:link>
	<ss:link source="$templateSet.logon">Log On</ss:link>

Do you experience an occasional order having the wrong shipping method applied? Maybe a few orders came in with a shipping quote for "Standard" that should have been quoted with "UPS Ground"? Perhaps the order has no sales tax applied? There are quite a few things that can cause these issues - shipping and sales tax algorithms are complicated after all.

To start troubleshooting, begin with the ship to address on the order. At least half of all shipping quotes gone slaunchways are due to the State and/or Provence being borked. Does the ship to state on the order show the states' two letter code (CA) or is it typed out full (California)? If it's typed out, that is a problem. The ProStores system requires the two letter code for a state or Provence in any address — seems logical, since that's what all other systems require.

The frustrating part is the default checkout templates in your store use an input box for state. In this input box, your shopper can type up to 10 characters. Well, that's just silly — it's a problem waiting to happen. Here is how you can change that silly input box into a select box that will force the correct two letter code.

In your "New Customer Checkout" template, find this code snippet in the source code:

<ss:edit source="$customer.state" size=10/>

Replace it with this:

<ss:select name="$customer.state" source="$system.states('*')"> 
	<option value="">Select</option> 

Almost done. Now, you will need to edit all the other checkout templates too — and the select name you must use changes depending on the template. The rest of the select code stays the same — you just need to change the $customer.state value in the name to something else on a few other templates.

For Ship To and Ship To Gift templates use:


For Anonymous checkout templates use:


Problem solved. Now, your shopper can easily select the appropriate State or Provence from an easy select menu without having to type anything. Thus, removing the opportunity for typing error. You're welcome.

ProStores has a built in mail processor that it uses to send messages - like the Email a Friend feature for example. The cool part is, you can use the form mail processing that is built in to send your own forms - perhaps a "Contact Us" form or an "Ask a Question" form.

You can use the code below on any ProStores template to create a form that sends a message.

<form name="emailfriend" method="POST" action="Send.bok">

	<p>Name <input type="text" name="$$email.senderName" value=" "></p>
	<p>E-Mail <input type="text" name="$$email.senderEmail" value=" "></p>

	<p>Name <input type="text" name="$$email.recipientName" value=" "></p>
	<p>E-Mail <input type="text" name="$$email.recipientEmail" value=" "></p>

	<hr size="1"/>
	<p>MESSAGE<br><textarea name="$$email.message" cols="40" rows="3" wrap="virtual"></textarea></p>
	<p><input type="submit" value="Send"></p>


The ".bok" on the action may not be needed - it depends on the type of ProStores installation in which your store lives.

In a ProStores store, a blank keyword search will return "All" products — If you have a large catalog, this is never a good thing. Expecting your users to view 2000 items 25 items at a time is just silly. Here is a quick, easy way to completely remove the possibility of a blank keyword search in your ProStores store.

In Page Template Manager, locate the opening of the default keyword search form found in the Header template source code. It should look something like this:

<form method="post" action="$storeVersion.searchResults"></form>

There is a DOM event called "onSubmit". Using this event, we can easily add a test to the form that will keep the form from being submitted if the keyword input is empty. Example:

onSubmit="if(document.searchForm.keyword.value == '') return false;"

Once you correctly add the event to the form element it should look like this:

<form method="post" action="$storeVersion.searchResults" onSubmit="if(document.searchForm.keyword.value == '') return false;"></form>

Now, with no complicated form validation or any other scripting, your keyword search form cannot be submitted unless the user enters a keyword. That makes sense, right? You're welcome.

About this Archive

This page is an archive of recent blog entries in the ProStores Tips & Tricks category.

ProStores Software is the previous category.

System Updates is the next category.

Find recent content on the main index or look in the archives to find all content.