nopCommerce Product Page Enhancement Plugin

Project Description


Zee3dCompany operates an intermediation platform allowing downloading 3D printable models posted by their creators (referred later as designers). Downloads can be free, shareware or paid.

Technical description

The implementaion based on nopCommerce 3.0 (hosting on Azure) integrates and complements nopCommerce functionally. To ensure overall sustainability, it complies with the extension architecture (plug-in) proposed by the platform and is designed as a nopCommerce plug-in (knowing each plugin can implement any number of widgets). The storage of new informations is optimized in order to minimize the number of queries: The unique informations are stored as generic attributes (IGenericAttributeService); Grouped informations for a single entity are stored in new and independent tables. The classes evolution are managed by dependency injection without changing the kernel. The development is multilingual, "desktop" and "mobile" supported (following the paradigm implemented by the platform). User interface's public elements are fully customizable by CSS. Error messages is recorded into the nopCommerce log, as possible, errors will be managed in a silent way so that it won’t degrade the user experience. Sources are fairly commented and both literals samples and comments are in English. 
The following deliverables was provided:

  • The C# project (VS 2012) (with all sources) to generate the plug-in
  • XML file for localization strings

General description

Out of the box, nopCommerce can handle downloads of digital products. Our site will allow the downloading of several types of downloadable products base on their tariff modality (free / shareware / paid). These tariff modalities will be embodied by variants with predefined names. The wanted development consists to enhance the public product page depending on theses tariff modality.


The needed information to run the plugin is stored in the following table:


  • Id
  • ProductId (product id)
  • ProhibitedCountryCodes (JSON formatted list of strings containing country codes where the product can’t be sold)
  • Language (language id)


    The record associated to a product will be created on first use (reading or updating) if it doesn’t exist.


Public product interface

The public product page modified to reflect the tariff modality (free / shareware / paid) associated with downloadable products.

Multilingual management

The displayed title, the short description and the description, the ones corresponding to the current language. A link to display the original version proposed for texts which haven’t been written in the current language (based on the ProductExt.Language field). E.g.: «Read the original version (spanish)». The original version is displayed using an Ajax filed div, in order to make texts not appear in the HTML code.

Geolocation filtering

For legal reason, some downloadable products can not be sold (and even browsed) in some countries.The ProhibitedCountryCodes field is contains a JSON formatted list of country codes (strings) where the product can’t be sold. If this list isn't blank and if it's valid (from a JSON point of view) a synchronous call to the service is performed with a 3 sec. timeout, ex.: If the response is usable, the IP address of the user and the associated country code will be stored in the application cache to be reused for a period of 24h. If the country code associated with the IP is part of the list contained in ProhibitedCountryCodes, a page containing a message explaining that the product can not be accessed from the country from which the user is viewing the site will be displayed and a message will be added to the nopCommerce log file.

Free products

If the default name of a variant downloadable product match the one specified as “free” variant downloadable product in the plugin configuration page, the "Add to cart" button is replaced by a link allowing to download directly the product. The link activation open of a modal pop-up surrounded by a translucent background, displaying:

  • A link to close the pop-up
  • A combo box displaying a text license (multilingual resource)
  • A link to refuse the terms of download and close the pop-up
  • A link to accept the terms of download and download the file.


    If the user isn’t logged in, he or she will be redirected toward the register/login page after that user will be returned to the product page with the modal pop-up open and accessible. The download of the file will be viewed as a regular paid sale - with a zero price - causing all needed activity files updates and all necessary events firings.


If the default name of a variant downloadable product match the one specified as “shareware” variant downloadable product in the plugin configuration page, the link "Add to cart" will be replaced by a download link like the one described above (only the license text, stored in a different resource, will vary) and below which a "Pay" button allowing the user to pay the displayed price will be added (the process will be identical to the paid file case).

Other products variant

The shopping cart process stay the same.

Configuration interface

The configuration page of the plug-in lets specify

  • the default language name of the free variant downloadable product;
  • the default language name of the shareware variant downloadable product;

Project Details


September 2013


Latest Works

Mark's website

Mark's is USA most knowledgeable team of Plumbing Parts with 30 years experience and more than 1 million products online.

nopCommerce B2B Kramer website

Kramer Electronics Russia. Professional switching equipment for the AV market. Online catalog and B2B platform.

nopCommerce new xDalys website

New website for one of the largest new and used automotive parts supply in Lithuania