Integration modules moved to separate repository

All integration modules were moved to the new vc-modules repository. Now the vc-community repository contains only the platform and eCommerce modules.

New members extension point. (API, Entity framework and UI extension from custom module)

The new powerful platform extension point allows you to extend existing member types from the external module without changing the platform code. Possible extension types:

  • .NET types derived from Member class
  • API all new member types can be accessed through standard generic members API methods without any changes in platform
  • persistent Entity Framework infrastructure, each new member type can have its own tables
  • use existing members management UI to represent new member types with customization

The article below describes in detail how to work with the members extension point.

How to register new member types in your custom module

How custom member types appear in management UI

Web Farms support

Redis cache

Now storefront has two cache managers: ILocalCacheManager and IDistributedCacheManager.

ILocalCacheManager inherits from and replaces the ICacheManager<object>, which was used earlier. This is a simple in-memory cache and each storefront instance in the web farm has its own local cache.

IDistributedCacheManager also inherits from ICacheManager<object> but uses different configuration. First, it uses the JSON serializer, so everything being cached with this cache manager should be tested for serialization and deserialization. Second, if appSettings has VirtoCommerce:Storefront:RedisCache:Enabled=true then this cache manager uses a distributed Redis cache, which synchronizes between all storefront instances in the web farm. There is a new connection string, which describes the location and other parameters of the Redis server:


Where the endpoint is the IP address or domain name of the Redis server.

If Redis cache is disabled, then IDistributedCacheManager works like a serializing local cache.

Azure blob theme storage

Running multiple storefronts instances on web farms requires shared storage for CMS themes and static content resources instead of a local file system when a running a single storefront instance. We decide to use this for Azure blob storage service.

To switch to azure blob storage for CMS content resources, the following steps are required:

  • on storefront web.config
  • on manager web.config

SEO conflicts detection and resolution

SEO management was redesigned and an intelligent conflicts resolution feature was added.

UI prevents SEO conflicts at concrete product (or category) within the concrete store level.

Conflicting SEO detection is executed every time when you open a store in Manager UI. In case same duplicating SEOs are found, the red SEO widget comes into notice:

SEOs list now has an informer describing the problem. Click "Resolve conflicts" and fix the duplicating SEOs quickly by updating semantic URL(s):

In this article you can read more about SEO url routing on storefront works

CMS UI and API redesign

CMS module was rewritten nearly from scratch. Now themes, pages and blogs browsing has a unified UI which is very similar to Assets management.

Simple images uploading for blog and static pages

Added ability to upload and insert images within different modes (markdown / HTML) via drag and drop, copy-paste and standard file open dialog.

Configurable SEO links in storefront

It is possible to define how links for products and categories are built in storefront for each store.

  • In the Virto Commerce Manager open Browse > Stores
  • Select a store
  • Click Settings widget

There is a new setting, SEO Links, with one of three predefined values:

Long - build full path with SEO keywords:

  • /grandparent-category/parent-category/my-cool-category
  • /grandparent-category/parent-category/my-cool-category/my-cool-product

Short - use only last SEO keyword in the path for product or category:

  • /my-cool-category
  • /my-cool-product

None - don't use SEO keywords for links, use category ID and product ID:

  • /category/123
  • /product/123


The right-to-left (RTL) writing system is now supported in Manager:

Even if you haven't translated the localization scripts to RTL language yet, the Manager UI switching to RTL can be done right away:

  • Add a single translation file dedicated to RTL. More details on localization is available here.
  • Set Commerce Manager language in Configuration -> USER PROFILE to RTL language.
  • Refresh the browser page.

Applying tier prices while changing the line item quantity in shopping cart

If product has several prices then line item price will change depending on line item quantity (tier prices).

Price for quantity 1 is $249.95 (without any discounts):

Price for quantity 3 or greater is $240.00 (without any discounts):

Other improvements

  • Add more advanced support for related products in storefront
  • Possibility of individual configuration for order and RFQ tracking numbers in each store
  • Dynamic properties loading performance improvement
  • Major fixes with cart and order totals calculation
  • Simplifying storefront routing

Platform API changes

New methods

CMS Content module

  • GET /api/content// - Return streamed data for requested by relativeUrl content (Used to prevent Cross domain requests in manager)
  • DELETE /api/members - Delete content from server
  • POST /api/content// - Upload new content item
  • GET /api/content///search - Search content items in specified folder and using search keyword
  • GET /api/content///search - Rename or move content item
  • GET /api/content/copy - Copy contents
  • GET /api/content///unpack - Unpack contents from archive
  • POST /api/content///folder - Create content folder

Commerce core module

  • PUT /api/seoinfos/batchupdate - Batch create or update seo infos
  • GET /api/seoinfos/duplicates - Get seo dupllicates for store

Removed methods

  • All old cms content module methods: /api/cms instead, /api/cms/menu