Converting product images

Need:
One of my distributors provided me a full catalog export in CSV format including product images. I have thousands of products that have been uploaded into the product database. But the included image files are not in the *.jpg *_i.jpg *_t.jpg file structure needed by AC7. Manually uploading every product image file one-by-one is not an option.
All product image files were named matching the SKU value of each product and in GIF format.

Solution:
There are several image batch resizer utilities available on the internet. I reviewed a few and went with one from SoftOrbits.com.

http://www.softorbits.com/batch_picture_resize/index.html

For $20, I have resized thousands of product images into the the standard size, thumbnail size and icon size. The program also lets you automatically tack on the _i or _t suffix as needed. Every image was converted on the fly into JPG format. A watermark could be automatically added to every image however I elected not to do so. Time to convert all three sizes in my computer was about 10 minutes.
The program supports converting several different formats into a common output format, so your source pictures don't even need to all be the same format.  It also has a handy feature called "Canvas Resize" that helps ALOT when dealing with source images that vary wildly in size.
Tech support has been very responsive and friendly – typically you find one or the other but both is rare.

Result:
By converting the images to the proper size, JPG format and required file naming convention, I just moved the converted files into the ~/Assets/ProductImages folder of my AC7 site. All store products immediately pick up the files thanks to the checkbox in the Images admin screen.   Absolutely no effort involved in AC7 to attach the images to the correct products.

Sweet!

Exporting CSV files in Excel 2007

I used the email lists export (thank you Able for having that feature) to migrate my subscribed users to my list server. The problem was the list server requires quote delimiters and the AC7 file doesn't have them.

I thought Excel could do it by opening and resaving the CSV file. No-go, it's a common problem in Excel 2007 apparently.

Microsoft wrote a nice little VBA.Excel app to do it for you. Here's the link with instructions and the code.

http://support.microsoft.com/kb/291296/en-us

Enjoy!

Adding a new page to AbleCommerce 7

I don't know if this is the "right" way to do it, but here are the steps I take to add new pages to AC7 with my own user controls for server-side content and functionality.

Most sites will have some sort of custom menu component, as mine does. So the end result URL will be need to be added to your menu structure. If you are wanting something added to the header or footer links, just add a link to your page in the appropriate header/footer content page under Website/Content and Layout in the Admin screen.

Step 1: Make a blank page
Start by creating a new web page. For this example, we'll use foo.aspx as our file name. In the root of the AC7 site there will be a generic blank page called webpage.aspx. Copy that file to foo.aspx. We'll work with foo.aspx from now on. Your page has all the starting elements needed by AC7, but AC7 doesn't know how you want it laid out.

Step 2: Create an AC7 layout
Go in to your Admin screen. Select Website/Content and Layout. Create a new Content page and call it something you like. I preface all mine with my company name so they're grouped together when sorted by name. Let's call ours "Foo Product Info". Don't save it yet, we have a change to make since it contains nothing so far.

Step 3: Populate the layout
Since the user control we are making will be handling design layout, I don't do any design layout (tables, html etc) here. All you need to do is tell AC7 to reference the user control you've created. In the content section of the new entry we've created, simply put one line that says [[ConLib:Custom\Foo-ProductInfo]]. That's it, save it. Now whenever AC7 is told to load that content, it'll look in your ~/ConLib/Custom folder for a user control called foo-productinfo.ascx. Note that the ConLib reference does not include the file extension. You still have to have the extension on the actual file or the server won't recognize it as a user control.
Incidently, you can add any ~/ConLib/Custom/ user control to an existing AC7 page using this exact same technique. If fact, you can even add the pre-built AC7 controls located in ~/ConLib to other AC7 pages or your own pages.

Step 4: Add the URL to your menu
Whatever menu system your site uses, you need to add ~/foo.aspx to it. You're going to need to hit that page in the next step.

Step 5: Load the new page
The empty page we copied, foo.aspx, contained one control that specifies all the AC7 layout parameters. But changing these never worked for me, so I have to manually set the page up in AC7 each time.
Pull up your store in Admin mode. Now click the Store button in the upper right. This will take you to your store with you logged into it as an Admin.
When your store appears, click the new menu option you added in Step 4 for your ~/foo.aspx page.

Step 6: Establish page layout
Once your new page loads, AC7 will complain the user control doesn't exist. That's swell, because it doesn't yet. Ignore it, we're only here to establish layout.
Since you've pulled up the store from the Admin screen, you have the View/Edit control at the bottom of the page. Set it to edit so you can change all the page sections. Set each page layout, content, sidebars and header/footer options you want. Click Apply when you're done. Now the page is starting to look good. Don't close this page, you're going to need it for testing.

Step 7: Make your user control
I use Visual Web Developer 2005 Express for my work. Start building your control, being sure to save it in the ~/ConLib/Custom folder.
Remember leaving that page open in Step 6? Well, now you can test your control without a complete site recompile. Just save the control in VWD and hit refresh on the page. The page will update to reflect the changes you've made.
If you need code debugging, well there's no avoiding a recompile. AC7 is huge so a full recompile takes a little time, be patient.

Conclusion
That's it. You've built a new page, laid it out according to your existing site requirements and integrated a custom user control. You have access to all the same objects, containers, collections etc that AC7 uses within the code of your user control. Just be sure to add the necessary includes as required.

Variants Explained

For those of us who are just getting into the world of ecommerce software products, the term Variants may be somewhat new. The intent of this article to provide some clarity and save you some time discovering what Variants can and cannot do. This is a work-in-progress so check back or subscribe to it.

Explanation
Variants are a way to present the visitor with choices about a particular product for sale. These choices can be presented as either a dropdown box or as graphical images called "swatches".

Variants versus Kits
Variants differ from kits in such they do not require other product records to be created. A single product record with variants can represent literally dozens of different SKUs. This makes management of several like products much easier and more centralized, but it comes with a tradeoff. It's also important to note that while Kits can do radio buttons, checkboxes etc, they cannot do swatches. If you are "into" the swatches, you must use variants. Finally, variants only allow one selection per group of choices. Kits can have multiple selections which gives them an incredible level of flexibility.

Variants Example
Clothing or Apparel products are the ideal use for variants. Let's take the example of a Lifejacket. Yes, it just so happens that I sell lifejackets so this is my shameless effort at plugging my store. It also makes a great example for variants.
My lifejacket is a fancy one. It's actually a winter coat AND a life jacket. That means it's not only going to have choices for size but also choices for color. Here's the URL to product: http://www.solunar.com/Mustang-Classic-Float-Coat-P2585.aspx

As you can see, I've chosen to use swatches for one option (Color) and the drop down for the other option (Size). Choosing a swatch will present the visitor with the second choice group for Size. Once both choices are selected, the final SKU, price etc will all be determined and the Add-to-Basket button becomes available.
Note that the Price and quantity available update as each variant is selected, however the Item # does not update. This will probably be fixed in a future release.

Variant Options
Note the term "Option": That's how Able refers to a collection of choices. A single "Option" will contain multiple "Choices", of which only one can be selected. AC7 gives the user a nifty interface to manage of all the possible combinations of the option groups you've created. This is known as the "Variant Grid".

Variant Grid
The Variant Grid is where you can see all your possible variations for the choices you've created. AC7 automatically builds the complete grid for you based on all the choices of the option groups you created.
That means, set up all your option groups and choices first and then choose "Manage Variants". Otherwise, you'll lose any changes you made to the variants grid when you add another choice. Sorry, that's just the way it works right now.

Variants and Inventory
Since variants do not have a separate product record, inventory is managed within the variant grid or on the product record itself. You need to maintain each variations in-stock quantity, weight, price, cost and other values. Notice you cannot keep separate packaging dimensions on the variants grid – variants assumes all variations are the same dimensions as the product the variants are created for.
You have two options for the actual inventory values of Variants. You can choose to have a single in-stock quantity amount and use the product record value, or maintain separate inventory amounts for each variation possible from your choices. This is easily changed on the main product screen with the Inventory Mode pulldown.

Variants and Feeds
Since variants are not separate product records, all variants will have the same URL. You may at some point discover that variants are not included in the AC7 feed uploads. My secret expert contact in the ECommerce world (Judy) has explained that you wouldn't want variants included in those feeds.
The reason is important: you could get some negative results from the search engine by uploading many differently described products with the exact same URL. Kits don't have to worry about this situation because they require separate product records.

Variant Sort Order
You can easily control the order in which variants are displayed in either the swatch mode or dropdown mode. Edit the specific choice group you want to change and use the green arrows to move an entry up or down as necessary.

Displaying All Variants
By now you have noticed that not all the variants display at the same time. The visitor must choose the first variant before the next will appear. Able is aware of the need for having all variant groups display at the same time, however the programming is difficult. That's because each variant could conceivably change the next variants possible choices.

Advanced Variants
A really nifty feature is the ability to disable specific variations. Let's use fishing reels as an example. You might have a reel that comes in three models (Model) and is built for left-hand or right-hand operation (Crankside). But wait, they don't make a Model 300, left-handed fishing reel; The Model 300 only comes in a right-handed version.
In the Variants Grid, you can uncheck the "Avail" column for that particular variation to eliminate it from the displayed choices. It's still in the variant list because it was auto-created, but it will no longer be a possible choice to the visitor.

Conclusion
Variants are a fantastic way to offer product selection choices in a creative way. Knowing their strengths and weaknesses can help you close more sales and make product management much easier.

Add your own Admin menu options

Introduction
This one is pretty simple if you already know .Net programming, but not everyone does.

I have a few URL's I like to keep close-at-hand, like my distributors. But I'm not always on my home computer so using My Favorites only works to a point. You can add your own menu options the Admin menu with just a few simple steps. And you don't even have to be a .Net programmer.

In this example, we're going to add a few search engine URLs to the Admin Help menu in AC7.

Always make a backup
First, make a backup copy of the ~/Admin/Menu.Sitemap file just in case something bad happens. Bad things never happen right? Uh huh. Just keep telling yourself that.

Using the right editor
Open the menu.sitemap file located in the ~/Admin/ folder of your site using Notepad. I suggest Notepad specifically because there's no risk of it saving the file in a different format than a text file. That's important – .Net will complain (loudly) if the file format isn't what it expects.

The file will look quite "busy", but it has a very clear pattern once you study it for a short while.

Sitemap file layout
Scroll the menu.sitemap file all the way to the bottom. That's where the Admin Help menu options are located. By now, you may have noticed that the menu entries seem to be stored top-to-bottom in the file exactly how they are listed left-to-right on the Admin screen. The order of the items listed in this file is how .Net determines their display position within the menu.

Adding our menu options
Find this menu option line near the end of the file:

Code:
<siteMapNode title="Online Support" url="http://www.ablecommerce.com/crmtree.aspx" roles="*" />

And copy/paste the entire line below the original line so you have two lines that look like this:

Code:
      <siteMapNode title="Online Support" url="http://www.ablecommerce.com/crmtree.aspx" roles="*" />
      <siteMapNode title="Online Support" url="http://www.ablecommerce.com/crmtree.aspx" roles="*" />

Why the Roles
In .Net-speak, this is known as an "External" link, and is considered un-secured in the Microsoft world. You must have the "roles='*'" on the end or .Net will automatically protect your site by ignoring any menu option pointing to an external link. Those wacky Redmond folks at it again, saving our world from insecure web installations.

Setting the Title and URL
By now, your keen powers of observation have led you to conclude that the copied line will be your new menu option. You beat me too it. Simply change the URL to whatever you want. In our case, we're going to set it to "http://www.google.com". While you're at it, go ahead and change the title value to "Google" so the option isn't confused with the real Help option.

Save the file and refresh your Admin page. Your new menu option awaits your gracious first click!

Conclusion
Adding new menu options to the Admin screen is really quite easy. Once you get the hang of how the file has to be laid out, alot of new choices present themselves. Remember that any future AC7 updates might overwrite this file, so be sure to back up revised AC7 files into a separate folder. That way you always have a copy to reference for changes after an update is installed.