This is a special release in these unusual times. It was planned as simple version with an optimisation boost and bugfixes for VM 3.6.10, but it became a lot more than that. Many people are affected by a corona stasis. One of our members had to go in quarantine (without being infected) where he had a lot of time tor develop and donate smaller enhancements. Personally, I had been preparing for coming restrictions since the end of February since it was clear that Germany will follow the other countries. My wife and I are now taking care of our children's homework and home-education, which are aged from 3 to 11 and my development time is severely impacted. On the other hand this period allowed to really hard-cook this version in the debug process. It is already in use on some live shops for at least the past 2 weeks now.

Some of our developers also joined the COVID Support campaign for the Joomla community Participating developers offer a 20% discount on 

VirtueMart Version Eagle Owl
Image by Alexas_Fotos from Pixabay

The biggest change under the hood are the new optimizations that avoid massive sql requests and use booleans to decide whether we need to load data from an xref table. The technique has some implications, which are described on When I worked on that pattern for categories, I noticed that we can enhance the loading of a category tree in a similar way. Rough tests with more than 200 categories (organised as years) indicate a 5 times faster loading time.

The customfield_value created a permanent performance bottleneck. VirtueMart now creates database keys shortened to the first 50 values, which is a reasonable compromise between using a customfield_value as a simple information value and using it as a searchable value.

The VirtueMart native Language Switcher, which is currently part of the VirtueMart membership, now works more more reliable after some really hard work on the router. The new language switcher creates any SEF Urls for different languages. This means it can switch between product details or just the account maintenance - of course without landing on the homepage. Maybe not that interesting for shoppers, but of importance for administrators.

Template developers who used vmbeez3 before 3.8.0 must consider the security leak reported by the Joomla community and update their templates as soon as possible. It is just two lines.

The next milestones are enhancing/fixing the VirtueMart order editing, invoice handling and Joomla 4 compatibility.

VirtueMart 3 component (core and AIO)



  • Using booleans to decide if the data of an xref table should be loaded - saving large SQL queries
  • Enhanced category tree building
  • Finally Final keys for customfield_value
  • added static to function getProductListing
  • if automaticSelectedPayment/Shipment is set to none, the whole trigger plgVmOnCheckAutomaticSelected is not longer executed
  • replaced overpowered md5 for hash replaced against crc32 or removed completly
  • renderVendorFullVendorList is cached now
  • increased size of vendor_terms_of_service to mediumtext
  • function getProductChildIds extended and cache added
  • customfield C uses now function getProductChildIds in the product model (cached)
  • smarter loading of parent category in backend category view

enhanced features for shop

  • Coupon handling enhancements - additions included from Creative Momentum Ltd
  • featured products load 3 times more than necessary to shuffle with PHP (Random per sql is not really random).
  • Snippet ld-json and double quote in product descriptions
  • Revenue report: added date_presets for reporting over previous two years with totals available by year/month
  • FE managing link, add new product link, notify me link buttonized

enhanced features for templaters/developers

  • added loading of "searchable" also for the cart
  • enhanced recognition of frontend manager
  • tableupdater enhanced being more failproof by RuposTel
  • changed function isImage so, that it takes now a full url and not just the extension as input parameter. The parameter before was quite useless, because half of the work of the function is to get the file extension.
  • medihahandler - enhanced display of the options upload, replace
  • Standard payment has now also the method as variable in the layout post_payment
  • ensureUniqueId correctly implemented for radiolists for multivariants
  • added variable show_notify to product model based on the order min level (not just 1 as before)
  • vmprices, enhanced the lines catching the add to cart button
  • Added function resetEntireCart to cart

new features for shop

  • Colors for shipment methods in the admin order list
  • Added config options for sql - optimisation
  • Added config option to disable layout overrides
  • added tool reset_Has_x_Fields to updatesmigration view, which sets all "has_" fields to NULL
  • hidden config populateEmptyST (ShipTo details remain empty and do not get auto populate by the details in the BillTo details)
  • hidden config shoppergroupDontSaveCart - dont store carts for logged in users if in specified shoppergroups
  • Product model added hidden config changeCategoryRemoveFilter

new features for templaters/developers

  • Debug Option for router
  • vmAccess added function isFEmanager()
  • added extra override posssibility for FE manager views using the suffix Admin to the view name (in case BE and FE view has the same name)
  • Important feature for class vmtables function load, when the $overWriteLoadName is within the translateable fields, then the "where table" is the language table and not the main table. So we can now load a product by slug, for example.
  • added the trigger plgVmOnSendVmEmail in function sendVmMail
  • added javascript function sendFormChange to vm2admin.js, which sends the form of changed elements if using as class sendFormChange
  • Changed the vmtime so, that we can sum up the taken measurements

compatibility for Joomla, Joomla 4, PHP7.4

  • replaced $app->isAdmin/isSite() and similar with VmConfig::isSite() or VmConfig::isSiteByApp()
  • replaced more $obj->$value with $obj->{$value}
  • replaced class hasTip with "hasTooltip", furthermore added JHtml::_('bootstrap.tooltip'); for joomla native bootstrap tooltips


  • fixed moving/ordering of categories
  • hidden configuration ChangeShopperDeleteCart fixed resetting of the cart if switching to a user or registering
  • Cart takes directly the email of logged in joomla users
  • Model customfields, customfields should now also work with 0 values
  • Important fix for customfields, Removing a disabler from a customfield must delete the customfield which stores the disabler
  • usermodel storing user of vendors
  • fixed custom language fallbacks
  • vmTable fixes for language fallback, the problem was that the function is used itself twice so the set temporarly language got lost
  • country dropdown sorted by ordering and alphabetically and with special chars like äöü
  • added _noLimit = true; to prevent that the state of the model is used for Shipmentdropdown, category ordering dropdown,
  • removed old tasks in controllers for ajax, function viewJson
  • removed false positive "Set shoppergroup error"
  • removed task=viewJson& from Urls
  • mediahandler replaced manual setup url against js variable medialink
  • fix in shopfunctions.php functions renderWeightUnitList and renderUnitIsoList, add unknown units to prevent that they are changed/deleted (thx RuposTel)
  • Rounding for currency conversion of costprice and of Margin in case "round only display" is unchecked.
  • product edit, unpublished categories were not rendered
  • cart max_order_level must be checked after checking for quantity steps (by RuposTel)
  • a bit different enhanced quantity check (by RuposTel)
  • Fixed naming of category parameters
  • Fix for usermodel function getUserList in case searchTable shoppers
  • html tag for radio buttons Multivariant fixed ids
  • replaced wrong Vmconfig ajax_category against jdynupdate


  • Big update for multilanguage pages. Loads automatically different language if a language tag is given.
  • Debug option for router
  • Important fix to prevent error if there is no menu item set for the account maintenance
  • function getProductId loads the CategoryName with array_pop not end, the hash uses base64_encode instead of md5 (was overpowered)
  • added unset "start" to productdetails view (hardly used, pagination for related products?), but could generical create bad links with the language switcher
  • function getFieldOfObjectWithLangFallBack was joining language fallback tables, but not using fallbacks in the where clause


  • html_entity_decode for order names in order list
  • When no safe path was given, it was corrected by JPath::clean() to the domain root path and created accidently safepath files and folders in the root directory, fixed.
  • vmbeez3 updated with joomla beez3 template and security update j3.9.16
  • Updated vm system pugin vmLoaderPluginUpdate. When a joomla user is deleted, the corresponding virtuemart data is now also deleted.
  • Deleting a Virtuemart user removes also the joomla user now

Payment Plugins

  • Big Update for Skrill by the Skrill Team Esphere, images compressed by iStraxx
  • Avatax, Fixes and adjustments by AXIOM
  • Realex Plugin removed trigger in createPmtRefTable, the trigger is already executed in $userFieldsModel->store($data);
  • Enhanced PayPal Smartbuttons. Shows PayPal Button now also when logged in.
  • Minors for Sofort
  • Minors for Paypal
  • Fixed core restrictions for skrill

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.