View from inside the viper

C is for Contribute, Cart Viper Gives Back

  May 20, 2013 18:24
by Mark
GitHub Octocat

We are big fans of DotNetNuke! We are big fans of giving back something to the community! There we said it.

What you may not know about the Cart Viper team is that we have been making DotNetNuke modules since 2005 under the pseudonym of Bite The Bullet, Many of the modules we have created over the years have been released for free and with the source code.
So what has all that got to do with Cart Viper? Nothing other than it shows our depth of knowledge and our commitment to the platform.

Recently there has been some buzz in the DotNetNuke community about Participating and Contributing to DNN open source projects, so since we have a lot of existing modules over on the BiteTheBullet site that have been some what neglected what better idea that to bring some of them up to date and to do it in a public and open manner.

So without further ado we are pleased to announce we have copied over the original source for the BTBYahooWeather module to GitHub

The current version of BTBYahooWeather module

The BTBYahooWeather module is a DNN module we wrote several years ago which allows you to show the weather using the Yahoo Weather RSS feed. The plan is to update the module to use DAL2, add a new template engine based on Razor and generally improving the module. Once completed the module will be available to download for free.

Want to help? Stop by GitHub and get started in giving back to the community too. We look forward to giving back an updated module.

Better Store Buttons - Coming Soon!

  May 15, 2013 09:23
by Mark

A potentially breaking change coming in the next release of Cart Viper for any upgrading customers is that we have changed the image buttons used in the store to be link buttons. So the add to cart button, the buttons on the checkout and my cart page have all been replaced with hyperlink buttons.

Changing the buttons has 3 main benefits

  1. When browsing the store on a tablet the image buttons had a blurred effect. Tablets have a high resolution screen compared to a desktop or laptop computer.
  2. Having the buttons as links makes it much easier to style to match your existing site using just CSS.
  3. Since the buttons are now just links you can use the resource file to localise each option.

So lets take a look at what the cart details page looked like before on a tablet, note we’ve zoomed in to make the blurry image buttons more noticeable.

The old style buttons on a tablet

Coming in next release of Cart Viper the cart page would look like this.

New style buttons on the cart page

All the buttons are styled using CSS, the icons used on the buttons are from the excellent open source project Font Awesome. The icon is in fact a font vector so it looks crisp and sharp on any resolution screen, even when zooming into the page.

The new add to cart button

CSS Style

As already mentioned we are now completely styling the buttons using CSS, no images are used in rendering the buttons. The gradient, rounded corners and shadow are all rendered using CSS so its very easy for you to change the style without needing to create a new image in Photoshop.

The styles for the buttons are defined in Common.css and the main class is called .CvStandardButton. We have a number of other styles and pseudo classes that are used for the hover state for example all of which are also in Common.css file just after the definition of the .CvStandardButton class.

What This Means for Existing Cart Viper Stores

If you are just installing Cart Viper for the first time when the new version is released you don’t have anything to worry about. If however you are upgrading from an earlier version then any custom image buttons you have created will be replaced by the new style links.

So what can upgraders do, well after you have upgraded and follow the steps in the user manual to merge your custom CSS files with the new one from Cart Viper you can go ahead and change the new styles to match your site. You could even just change the CSS to load the original custom image button as a background image but we don’t recommend doing that.
Its time to embrace the change in computing and use CSS to ensure that your site works as best as it possibly can with all the different devices out there.

More Designer Friendly Changes To Come!

We are working on further changes down the road to the templates and template engine to add even greater flexibility to the system. Just on a side note, when we do add the new templates and engine we will be keeping the existing version for customers that don’t wish to switch.

We hope you are as excited as us to see the new version of Cart Viper which is coming soon, we have added some great new features and improved a lot of the existing features.

Agreeing To Terms and Conditions At The Checkout

  May 13, 2013 11:41
by Mark

As we work towards the next major release of Cart Viper we also add the odd small feature into the current version, today we have added a small feature to the single page checkout into the current release 1.6.1 based on customer feedback. The new release is 1.6.1n which can be downloaded from the free trial page.

The new feature allows you to show a terms and conditions checkbox on the Single Page Checkout, customers then need to tick this checkbox before they can place their order.

Agree to the site's terms and conditions before placing your order

Be default this checkbox is not shown, the store admin would need to turn this on by selecting the Show T & C Checkbox on Single Page Checkout setting from the My Account module settings.

Showing T & C setting in the Cart Viper Checkout

Bonus Feature

The wording of the checkbox shown on the Single Page Checkout is controlled by the resource file /DesktopModules/CartViper/App_LocalResources/SinglePageCheckout.ascx.resx so if you wish to customise this caption or add a hyperlink to link to the T & C page for example, then you just need to edit the entry chkAgreeTermsAndConditions.Text in the resource file.

For more information about how to customise the captions see this blog post

Release 1.6.2 Coming Soon

  April 23, 2013 16:14
by Nigel

Since we released version 1.6.1 of Cart Viper the advanced ecommerce solution we have been busy working on new exciting features that will make up release 1.6.2. Based on user feedback we have identified a series of features that were missing not only from Cart Viper but all the other DNN shopping carts, so with these advanced features we are positioning Cart Viper as the market leading DNN shopping cart.

A few of the new exciting features are:

  • Product catalogue localization – allow the customer to select the language to display your products and categories in.
  • Product and category workflow – define that all changes to products and categories should be subjected to approval by a moderator, including automatic email reminders if moderation does not occur within a given time period.
  • Ability to rollback a product or category to any previous version.
  • Allows products to be tagged using DNN taxonomy.
  • Azure support.

For a full list of features that will make up release 1.6.2 please click here, we are always open to suggestions so if you feel there is a great feature we are missing please let us know.

Cart Viper and QuickBooks

  April 17, 2013 10:46
by Mark

Do you use QuickBooks and Cart Viper? Ever wished you could import your orders from Cart Viper straight into QuickBooks?
Well now you can have your orders go straight into QuickBooks automatically using QuickBook Connex for Dnn from JMA Web Technologies.

The demonstration video below show how easy it is to get your online orders from Cart Viper into QuickBooks eliminating the need for data entry and additionally administrative tasks.


QuickBooks Connex for DNN works with Cart Viper to provide a simple way to transfer your online orders from the store into QuickBooks. Why duplicate data entry when you can have an automatic way to pull orders from your dotnetnuke store into your accounting package every 15 minutes.

Works with both the US and UK version of QuickBooks.

Abandoned Shopping Carts – #1 Reason

  April 8, 2013 17:42
by Mark

Abandoned carts are costing you money in your online store. The average store has 72% of abandoned carts, that can add up to a serious amount of lost revenue.

So what is an abandon cart, its when a customer adds items to their cart but never completed the checkout process. Somewhere along the lines of add the items to the cart and finally paying for them the customer has changed their mind.

Think about it, your store is only converting 28% of carts into orders, being able to improve this figure would make a difference in your online store’s bottom line.

The number one reason for a customer to not complete the checkout process is expensive shipping costs, no one likes getting to the checkout page only to find its another $10 to get their items. Expensive shipping charges account for 44% of all abandoned cart. In fact stores which offer free shipping have less abandoned shopping carts all together then those charging even inexpensive shipping.

Take a look to see how your own store is performing with abandoned cart, you can see the number of abandoned carts for the last 30 days in Cart Viper by going to the Store Admin > Sale Stats page.

Abandoned Carts Graph

Stop the Rot

In Cart Viper we have a number of ways of giving free shipping to your customers. So lets look at what we can do to give the customer free shipping and in turn reduce the number of abandoned carts.

Keep It Simple

You can define in the shipping settings which countries will get free shipping, a customer that enters a shipping address with a country that has been defined as free shipping will get free shipping on any order they place.

A variation on this simple option is to define a minimum spend for the country before the customer qualifies for free shipping. So for example we can say all orders to the USA over $25 will have free shipping.
Then you can make the customer aware of this special offer and convert more abandoned carts into paying orders.

Free shipping with subtotal

For our USA customers we have 4 zones defined which allows you to break down the USA into different shipping zones,

  • USA
  • Lower 48
  • Hawaii
  • Alaska

So this allows you to offer your free shipping to say the lower 48 while still charging shipping to the more costly states of AK and HI.

Coupon Clipper

You could also use the coupon functionality to create a coupon that the customer could use at the time of checkout to get free shipping on their order. A simple banner or HTML module on the store could then promote this offer to the customer.

Free Shipping Coupon

Additionally its also possible to configure the coupon to have some restrictions before the customer can get free shipping. So for example we can define a minimum spend that the customer must meet before the coupon will be valid. Its also possible to make the free shipping coupon only valid when the customer purchases an item from a given category or categories.

Mix and Match

Using the mix and match promotion its also possible to define free shipping. So if the customer purchase 3 items for a given category then it would qualify their cart for free shipping. This would be applied automatically during the checkout process.


I hope this blog post has shown there are various options within Cart Viper that can be used to reduce the abandon carts in your store due to high shipping charges.

Depending on your demographic and the types of products you are selling you may find that some of the options mentioned work better than others, so our final piece of advice would be to try out the different free shipping options and measure which works best for your store.

Cart Viper is an advanced ecommerce module created for DotNetNuke created by two UK developers. Feature rich and backed up by great support. Take the free 14 day trial to see how you can leverage a great CMS and Ecommerce solution for your clients.

Logging in DotNetNuke

  April 2, 2013 19:27
by Mark

Starting in DotNetNuke 6.0 support was added for log4net, a first rate logging framework developed by the Apache Foundation.

So why log? Well any non trivial module can benefit from logging, it means you can easily debug an issue on a live site and see what is happening under the hood.
A liberal sprinkling of logging statements in your DotNetNuke module can save you a lot of time when you have some unexpected behaviour in your module.

DNN Logging 101

DNN have wrapped the standard log4net logging statements in a class called DnnLog which is part of the assembly DotNetNuke.Instrumentation.dll. So to get started with logging you need to add a reference to this dll in your code.

Within the logging framework we have different levels of log, this allows us to filter out some of the debug statements in a production DNN install and just log errors or fatal events to the log output for example. Starting at the lowest logging level going to the highest level we have

  • debug
  • info
  • warn
  • error
  • fatal

So if we have the logger set to record all debug level messages it will also log the higher log levels as well, if we however set the log to error level then only error and fatal would be record with the other lower levels ignored.

Within the DNN class DnnLog we have a method for each type of these logging events with various overloaded options.

DnnLog.Debug("Category ID:{0} is at depth:{1} of the category tree", c.CategoryID, depth);

So using this logging statement we can use string formatting to record the debug log message. We can also log exception using a different overloaded method. Using intellisense it is pretty easy to discovery the correct method to use.

Taking Control

So that is all there is to it, oh wait, where do the log messages appear and how do we control the level?

Within the root of the DNN site you will find the file DotNetNuke.log4net.config this is used to control the logging within the site. The default setting is to log to a file only error levels or above.
In a development environment it might be more productive to set the log level to debug so that we get all log statements. To do this we would simple edit the root level

  <level value="Error" />
  <appender-ref ref="RollingFile" />

To the new value of

  <level value="Debug" />
  <appender-ref ref="RollingFile" />

The RollingFile appender will log the output into a text file which can be found in this directory, \Portals\_default\Logs
A new log will be created each day, its important to remember that DNN won’t delete old log files so this could grow to be a large directory if left unchecked.

Bonus Tip

Something which can be useful when debugging and developing is to have the DNN log statements output in the standard Trace Output for the page.
Its a pretty simple thing to do, you would just need to add a new appender that uses the AspNetTraceAppender and then define the appender in the root element.

<?xml version="1.0" encoding="utf-8" ?> 
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="Portals/_default/Logs/" /> 
    <datePattern value="yyyy.MM.dd'.log.resources'" /> 
    <rollingStyle value="Date" /> 
    <staticLogFileName value="false" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="10MB" /> 
    <maxSizeRollBackups value="5" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
    <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%property{log4net:HostName}][Thread:%thread][%level] %logger - %message%newline" /> 
      <locationInfo value="true" /> 
  <appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" > 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFile" /> 
    <appender-ref ref="AspNetTraceAppender" /> 

Then whenever you have Trace turned on the log statement

I hope you found this article useful and you give the DNN logging framework a try in your next module.

Go Live Checklist

  March 14, 2013 20:30
by Nigel

In the rush to put your website live and start taking orders its easy to drop the ball on a simple task, as the old saying goes “You only get one chance to make a first impression”.

With that in mind we have compiled a short checklist of items you should verify before you put your Cart Viper DotNetNuke ecommerce store live:

1) Ensure that the page within your store that contains the “Cart Viper My Account” has the below permissions so “All Users” can view the page. This ensures payment gateways (Paypal, etc) can inform Cart Viper that payment has been successfully taken:

my account 

When setting up the Paypal Standard provider the Secure ID setting is optional and it not the same as your Paypal account page, the correct value can be found in you profile within your Paypal account.

If you are getting an email from Paypal to say you have received payment but don't get one from Cart Viper or see the order in the back office then this is an indication that the IPN is failing and the points above should be the first things to check.

2) Test the SMTP settings on your DNN installation are valid, these settings are located in:

host –> host settings –> SMTP

We use these SMTP settings to send the various emails the store generates, if you receive an error when clicking “test” please contact your ISP to rectify this:


3) Check the default portal alias for your store has the as the primary domain rather than To check this go to:

admin –> site settings –> advanced settings –> portal alias

If the is not listed, simply add this new domain and mark this as the default alias:


4) If you are using a payment gateway that collects the customers credit card information directly on your website (, Paypal Pro, etc) ensure that there is a valid SSL certificate for your website installed on the server and that the page with the “Cart viper my account” module is served over HTTPS.

This can be set at the DNN page level or within the Cart viper my account module settings:

ssl      ssl2

Note if you are using a payment gateway that requires an SSL certificate and it is not configured correctly we will output a message informing you of that and your customers will be unable to checkout.

5) Within Cart viper it is possible to allow Google analytic ecommerce tracking, if you are going to enable this setting it is very important that you also add in the Google analytic tracking code to your websites skin. Without this tracking code you will receive javascript errors on your website and the add to cart functions will cease to work. Page 38 of our user guide explains this in more detail:


In our experience the above 5 are the most commonly over looked items when stores are being moved from test to a production environment, if you think we have missed an important aspect or have an idea how we can improve the process please feel free to add it to the post.

Azure Support in Cart Viper

  March 4, 2013 14:30
by Mark

Currently we are working on developing 1.6.2 of Cart Viper, one of the new features we have added is support for the Microsoft Azure platform. Azure is Microsoft’s cloud based hosting service, using Azure you can quickly deploy a DNN website in a matter of minutes.

Starting in release 1.6.2 of Cart Viper you will be able to deploy and run a Cart Viper ecommerce store on DNN that is hosting on Azure Websites. We’ll be creating a video tutorial to help get you started once we release the module.

Adding support for Azure was mainly focused in two area

  • SQL Scripts
  • PDF Generation

SQL Scripts

When using Azure Websites the database used by DNN is the cloud based version of SQL Server called SQL Azure. SQL Azure has some minor differences in supported SQL terms so we have to modify some of our scripts in order to deploy the module.

PDF Generation

We had previously used a third party library which made use of GDI+ to generate the order detail PDFs, on the cloud platform this lead to an out of memory exception. So we have switched to a new rendering which makes use of WPF.

Using Azure to host your DNN ecommerce site is going to be huge, its just so simple, cost effective and scalable. Watch out for the new release of Cart Viper coming soon.

Mobile DotNetNuke Ecommerce Store

  February 12, 2013 16:55
by Nigel

Working in conjunction with our friends over at ITX we were tasked with allowing Cart viper to provide a mobile DotNetNuke ecommerce store for the Cathedral Company website.

The key requirement for this project was that when viewing the Cathedral Company website on a mobile device the layout would be optimised for a mobile viewing. One of the new features in version 6.1 onwards of DotNetNuke was mobile support, this allowed DotNetNuke to detect if you were viewing the site on a mobile device and then if necessary redirect you to a mobile optimised rather than the standard website.

With this great feature at our disposal we set about creating a series of modules that could display Cart viper categories and products that were optimized for mobile viewing. The end results gives the user a mobile friendly experience when viewing the site on their mobile device allowing for quick page loading times when browsing the store categories and products, but not sacrificing functionality or user-ability.

Site when viewed on mobile device:

photo photo

Site when viewed on non-mobile device:


With the increased number of customers browsing and shopping from their mobile devices this is a must have for ecommerce solutions, if you are interested in learning what mobile functionality Cart viper can offer your DNN site, please drop us a line.