- Details
- Written by: Joerg Kiekebusch
- Category: Latest News
- Hits: 10241
Improved compatibility with Joomla 4.2 and PHP 8.1 plus category tree loading speeded up by factor 10
This version took longer than expected, as the team faced several compatibility issues this time. Joomla 4.2 caused more problems than Joomla 4.0 did back then. Suddenly, the 'add to cart' function didn't work anymore, opening shipping/payment methods caused a loop, saving with timestamp failed and so on.
In addition, the changes and removed functions/methods/modes in PHP 8.1 caused further trouble. For example, this caused searches with special characters to not work.
When we were about ready, a customer with more than 8000 categories (in 5 levels) tested the new version with a terrible result. A lot of tweaking was done on the category tree loading process with an improved cache. The idea of the new cache was to store the cached array instead of a rendered result, so the cache is used by almost every function to list categories. It was super fast with the cache created, but building the cache took 29 seconds for 8000 categories.
I took a closer look, and the reason for the error was simple: The cache saved the result every time there was a new result. The solution was to save it only once at the end. That helped a lot, but it still took 8 seconds to build the cache. I told the customer that there was another idea to make it faster, and he agreed to buy a membership to finance testing this idea. The new idea loads the entire table at once and does the tree sorting directly in php. The new result is phenomenal, loading the category tree via ajax now takes only 800ms without cache for the 8000+ categories. With cache it is about 650ms. Of course this is all measured on my computer, and of course the result is a bit different each time. But in more than 10 tests it was between 780-830ms. On the customer's real live server it is even a bit faster.
After the release is before the release. There is still a lot to do for a seamless integration of VirtueMart into Joomla 4, because there is still a lot of change in the Joomla 4 development. From my humble point of view, Joomla 4.0 was not really stable when we look at the problems we got with Joomla 4.2. But the real problem pressure comes from the compatibility issues with PHP8. So our current focus is still on a stable Joomla 3.10.x with PHP 8.
and it happened again, that the release was ready. But the new compatibility fixes needed compatibilty fixes ;-)
New Options:
- New option BrowseProductCartattributeOnly. This can enhance the speed browsing products
- Cart; added hidden configs enableCartMerging and enableCartLoad (by stAn)
Improvements FOR users
- Customfields, translation are shown in the BE
- Free shipment is calculated without shipment cost
- Fix for edting order items (by Quorvia)
- J4 fixed popup of related products/categories
- added missing empty option to customlist, customlist shows now by default only published customfieldsadded missing empty option to customlist, customlist shows now by default only published customfields
- customfield dropdown in product edit reacts adding the same customfield the second time
Improvements/Fixes under the hood
- Added extra checks, so that unbrowseable discontinued products cannot be added to the cart or get removed
- GetNeighborProducts enhanced it by parsing for more than one orderby correctly. It is better, but still not perfect. Perfect works only with temporarly lists.
- Removed mf_name from product search
- Important enhancement for router cache. The cache for the routing is now stored within the maincontroller after everything is executed, to ensure just one call
- Enhanced cache in category.php
- Added program cache to getParentsList
- Fixed wrong limit in getCategoryTree
- Calls for category tree without media now.
- Fixed fallback for second language
- 0.0 prices are no longer inherited
- Fixes in router for the manufacturer views
Compatibility
- Added mb_decode_mimeheader to subject of mails
- added check if function exists for mb_decode_mimeheader
- Added setConvertInt analogue to setConvertDecimal to define the variables which must be converted to integer (mysql strict mode) and added some of them (for example userinfo)
- Replaced some overlooked query() against execute()
- Enhanced deletion of cookie, added check if function exists
Developers:
- Use for filtering of strings vmSpecialChars and vmSpecialChars_decode.
- Use for tables setLockable if applicable
- Added vRequest::setRouterVars(); to main controllers
- Enhanced vRequest, can now filter given array
- Removed default for text to avoid compatibility problems with some dbs
- Enhanced the currency object, can now be created with custom exchange rate
- Enhanced vmecho, works now with variables of class vmecho (works standalone)
- Added lastAddedProduct to the cart object
- Added hidden configs for CLI; for max_execution_time use givenMaxTime and memory_limit givenMaxRam
- Added getInt and getFloat to vmConfig
- updated jQuery.UI min to 1.13.2
- Details
- Written by: Max Milbers
- Category: Latest News
- Hits: 9376
The Paybox payment system of Verifone is extending more international. It has very interesting payment concepts. They support already more than 50.000 shops and do more than 140 Million transactions per year.
Equip your e-commerce site with a secure and recognised payment solution!
From a basic need to a more complex processing, Verifone secures your e-commerce flows by giving you access to over 30 payment methods.
15 years of experience with a wide range of customers
Paybox accompanies you in your daily life with a secure, modular and turnkey payment solution that meets all your needs.
With each transaction, you benefit from the advantages of a cross-channel, multi-bank, multi-payment means, multi-currency platform equipped with fraud management and reporting tools to facilitate the daily management of your business.
6 good reasons to choose Paybox
For you ... | For your customers... |
Your bank account is credited every night. Paybox does not collect your transactions |
Pay with the payment method they prefer |
A choice of payment methods appropriate to your your business and your customers |
Convenient debit at the time of shipment, in installments, by subscription or in 1 click |
A flexibility of collections, reporting, refunds refunds to satisfy your customers and build loyalty |
Quick refund in case of return on the payment method used |
Paybox is already integrated in our AIO installer, just update your installation, or use our full package to install Paybox with VirtueMart and Joomla!
4.0.6 release notes
This release is for two critical bugs. The security feature for orderUpdate was too secure and blocked updating orders of guests. The other problem was in vRequest which uses the data of the router better now.
- Details
- Written by: Max Milbers
- Category: Latest News
- Hits: 7536
croatian coast, Copyright Max Milbers
VirtueMart 4.0.4 contains various bug fixes and improvements. Especially it solves some problems reported to us after the release of the previous version of VirtueMart when it is used along with Joomla 4.1.x.
Fixes and changes and enhancements included in this version are:
Joomla 4
- Fixed saving the sorting of items in j4
- Fixed chosen update for j4, needs another trigger
- New jQuery for j3 (j4 one)
- Updated xmls so they should work for j3 and j4
- Added a missing j4 adjustment to the vmloaderpluginupdate plugin
Developer new technics
- vmJsApi new method to push JHtml execution in a queque like we do with our js already. The queque is executed with writeJS
- sku, gtin, mpn only shown for is_input customs
- updateStatusForOneOrder is only executed if there is a given virtuemart_order_id and if the entry already exists
- vmplugin function storePluginInternalData converts the decimals, too
- Updated state published in the product model, for listing we now use list.published and some other minors in product model
Templater
- New classes for Multivariant dropdowns
- Horme3 removed $app->isAdmin
- Just some better use of existing functions "loadPopUpLib"
Fixes
- Enhanced router using static functions and values (all static) and remanaged it for better debugging
- Fixed initialisation of language in router, if language was not loaded the first time with loadConfig
- The debug of the router was sometimes called without loading the config and failed
- Changed key field_type_searchable_published from unique to key and minors
- GUI, changed maximum input for order status
- Replaced all %1s and %1d to %1$s and %1$d in EN and DE language files due %1s and %1d causing problems
- Found big error which lead to wrong inserts/updates, if the same entry was stored within the same call again.
- Fix for vmView, added parameter for construct and added setting of VmView::$bs in getVmSubLayoutPath
- Replaced deprecated FILTER_SANITIZE_STRING against FILTER_SANITIZE_FULL_SPECIAL_CHARS
Enhancements
- Added a new option in vmloaderpluginupdate to load config with or without language
- Categories do not load anylonger the parents for the breadcrumbs in the Backend for faster listing
- Some work on the languages. If a language is selected, which exists in joomla but not in the vm config, it should show the joomla language and only the vm content stored in tables like product description should use the fallback.
- JPEG images create thumbs with JPG
- Enhanced handling of storing a new custom proto type if type is plugin but no plugin set
- Enhanced vmecho for better measuring time. It sums up the time needed for a particular function, but not the time between calls to the function
- Details
- Written by: Max Milbers
- Category: Latest News
- Hits: 30361
We are pleased to release a new VirtueMart generation, which adds compatibility with Joomla 4 and PHP8. VirtueMart 4 comes with a new overridable Bootstrap 3 frontend template (Bootstrap 5 will follow soon) and new backend template. Of course there are also new features for the product presentation, a lot of bugfixes and some new programming techniques. We originally had planned to release this on Christmas, but it was not possible to keep the date due to many changes applied to joomla 4 after it's initial release. We still have to iron out a few minor complications with it, but it already works for a number of early adopters..
The Backend Template
The new backend template uses VMUI-Kit. Unluckily this is not ideal for Joomla 4, but BS5 will be added soon. You can choose between four different color styles and it works well on mobiles. Updaters must install it manually, because it is handled as an installable template and is not part of the VirtueMart core installation package.
New backend features and tools
VirtueMart 4 not only has a new look, but also new functions in the backend. For example, Multivariants with children can now be autogenerated with permutating variants. Customfields can have their own SKU, GTIN, MPN. The order status was previously limited to a single character and is now extended to 3 chars. The category dropdown in the "product.edit" view now also lists unpublished categories. Original language flags (as we have already for other edits) now added to the payment and shipment edit views. RuposTel donated a google like search for products and orders. So for example use sku:mySkuToSearch to let VM search only within the SKUs.
Also there are two new maintenance tools. The first one is a synchronizer consisting of three buttons, which sets country 2, country 3 and country numerical code in the country list correctly according to ISO 3166. The second one is a converter button for changing old utf8mb3 tables to utf8mb4 tables.
New frontend template
Spyros Petrakis has generously donated his Horme3 template for the VirtueMart Core. Another new feature which you will find most useful is the the setting for different Bootstrap layouts, which was not fully implemented yet and therefore useless, ...until now! Selecting the Bootstrap 3 layouts in the configuration will load these layouts from the core. So we can now use any Bootstrap 3 template without overrides, because VirtueMart 4 loads the Horme3 ones. This also gives new users the possibility to use old override techniques. We are planning to extend this technique to modules and css. Work is already in progress to provide the same technique for Bootstrap 5.
The javascript also received a general overhaul, so it is more reliable, should work better on different browsers and is easier to handle for templaters (working relative or with classes instead of ids). The new fancybox 1.3.4.2 is working with the new jQuery version now.
Paybox
The payment plugin Paybox got a general overhaul and works now with 3Dsecure V2
Product Bundles
are a very mighty new feature. It can be used as typical bundle of different products for one price. This was also possible before by just creating a product which listed the included products. But this method required a lot maintenance. The inventory just listed a sold bundle, but did not update the inventory per product. If you sold a bundled product also as a bulk-version, then the system used two different products. If you updated the price of the bulk version, nothing changed on the bundles version. Not any longer! The new product bundles make real bundles of different existing VirtueMart products. They can be included for free or also as variants with an extra price. The prices can be a fixed amount or a percentage. So it can also be used for cross-selling and discounts.
Extra related product groups
are also used for cross-selling or presentation of complementary items. They are basically the same as the default related products, but can have another title and appear somewhere on product details page.
Better search with tags
Enhanced search using the customfield searchable tag system. Searching for more than 1 tag now displays only products fitting to any requested tag..
Keep cart content for guests
Added storing of carts for unregistered users as a cookie. This works only for SSL secured pages.
and more
- really a lot work on caches (internal, external), table indexes and other optimisations.
- additionally general work to please the JED Checker.
- option to display thumbnails to select children of multivariants.
- different email layouts by order status to enhance the customer communication.
- you can create a category menu item which clears the cart by category.
Changes for developers
ATTENTION: Triggers are case sensitive in joomla 4!
Changed triggers:
- plgVmOnStoreProduct($data, $plugin_param) changed to function plgVmOnStoreProduct($data, $plugin_param, $key)
- plgVmonSelectedCalculatePrice to plgVmOnSelectedCalculatePrice (lower to upper case)
- in calculation plgVmOnDisplayEdit to plgVmOnDisplayEditCalc
new triggers
- product and order model, added new trigger plgVmMySortSearchListProductsQuery respectivly plgVmMySortSearchListOrdersQuery in exeSortSearchListQuery which is at begin and can takeover the whole function (for searchplugins)
Plugin Handler
- Added vdispatcher.php as proxy for the joomla dispatcher
- We can use now $results = vDispatcher::trigger('event', array(param1, param2,...));
- the directTrigger can now execute a certain event of a plugin family, too.
- added function reloadPlugins, which loads again the payment/shipment methods of the plugins. The cart unloads them, if they do not fit, 3rd party developer can reload them, that way.
Technics
- setConvertDecimal for plugins, tables
- set datefields for tables
- $this->_genericVendorId = false prevents that the tables sets the virtuemart_vendor_id generically
- added extra parameter to vmuploader so that it works also with other input names
- the product model sortSearchListQuery is now working with an extra parameter, which can override an "Request" variables. So using old vRequests parameters is just used as fallback now.
- function getProductListing is now using request params only for the group "products", not for the other groups like featured, recent, topten, and so on
- vmecho again a bit enhanced, if debug is activated vmInfo are quequed as vmdebug (so the messages appear in the real order)
- field products, added a category filter
- changed ajax js for dynamic page reload, a ready script in the layout is not needed anylonger
- added cart functions getCartWeight and getCartQuantity
- removed the problem that a delivery note created an invoiceNumber
- Time of the calculationHelper considers offset
- Details
- Written by: Max Milbers
- Category: Latest News
- Hits: 39513
We know you are all expecting VirtueMart 4 for Joomla 4 to be released soon. We are almost there. Our new version is being tested daily in various test environments and most features are working to our satisfaction. So well, in fact, that the first VM testers are planning to go live with smaller stores soon.
VirtueMart 4 Update Procedure
Upgrade or Migration? Don't worry, the changes in Joomla 4 are substantial in some areas, but we have made sure that you can update from VirtueMart 3 to VirtueMart 4 like a normal update, mostly with just a click of a button. We can provide you with an installation package that is compatible with Joomla 3 and Joomla 4.
VirtueMart 4 loves Testers
Saxonian Swizz Lilienstein, Copyright Max Milbers
Next Release
We will soon provide a new version, even if it is not yet fully perfected for Joomla 4, as we have also made many enhancements for existing VirtueMart stores with Joomla 3.
When to Update?
Joomla 3.10 is officially supported until August 17, 2023. So there is no need to rush to update to Joomla 4 immediately. Joomla 4 is still a new software, so we recommend to wait a bit with live store updates until the community has fully tested Joomla 4. New software always tends to have some bugs that need to be discovered and ironed out in the beginning.
Help Joomla 4 and VirtueMart 4 by testing in your test environments.
We expect that late spring 2022 will be a good time to update the first live stores without any problems.