eShop Virtuemart Template Changelog
- Details
- Category: Template Change Log
- Change Log:
September 3, 2026
Version 5.4.8.1
Maintenance release.
- Joomla 3 compatibility code removed throughout the template. The template's PHP now uses Joomla's current API everywhere — the template files, the component override and every layout override (cart, checkout, product details, login and the modules). The old code only worked while Joomla's Behaviour – Backward Compatibility plugin was switched on, and will not work at all on Joomla 6. The most serious case was the error page: when it failed, Joomla could not display any error page, so an ordinary “page not found” was served to your visitors as a 500 server error.
Both the template package and the Quick Start have been rebuilt for this release. Download the latest from your member area.
August 18, 2026Version 5.4.8
Joomla 5.4.8, the VirtueMart 4.8.0 security update, and a module-chrome fix that made a page go blank.
Important — please update VirtueMart
- VirtueMart 4.8.0 is a security release from the VirtueMart team (published 12 August 2026, revision 11339, “Eagle owl”). The Quick Start in this release installs it, and the demo this template is built from has been updated to it. If you already run an eShop store, update VirtueMart yourself — installing this template package does not update your store component. Get it from virtuemart.net or your Joomla Extensions Manager.
Changed
- Version numbering has changed. From this release the template version matches the Joomla version it is built and tested against, so eShop 5.4.8 is the build for Joomla 5.4.8. The previous number for this template was 5.4.0.3. Nothing about how you install or update the template changes, and Joomla still treats 5.4.8 as newer than 5.4.0.3.
- The Quick Start now installs Joomla 5.4.8. The previous Quick Start bundled Joomla 5.4.7. Starting a new site from it now gives you the current Joomla release without an immediate update afterwards.
Fixed
- The “Slides” module style produced a blank page.
html/layouts/chromes/slides.phphad a stray closing brace at the end of the file that nothing opened, so the file would not parse and any module you assigned that style to brought the page down with a PHP fatal error. Nothing on the demo used that style, which is why it went unnoticed — but it would have hit any customer who chose it. The file now parses cleanly. - An internal engineering report was being packaged.
security-sweep-3f-report.md, a note from our own modernization work, was inside every download even though nothing referenced it and the template's own file manifest never listed it. It has been removed from the package and the Quick Start. - A 1.4 MB stale copy of the template was riding inside the Quick Start.
templates/eshop.zip— a June snapshot of the template folder sitting beside the real one — was in the download and installed nowhere. It has been removed. - The Quick Start registered a template style that pointed at nothing. A leftover “Aeon Template” style row had no matching template installed, so after a fresh Quick Start install it appeared in System → Site Template Styles with nothing behind it. It has been removed. No menu item referenced it, so nothing else changes.
No template-parameter or database changes — installs as a straight overwrite.
July 22, 2026Version 5.4.0.3
Maintenance release — fixes for issues found in real-world use on a live production site. With thanks to Michael Mullan, whose Expression bug report led to this maintenance pass across our templates.
- Fixed: search-module icon rendered as a stray character — the Joomla 3 jui icon font was removed from Joomla core in Joomla 4, so the glyph fell back to a literal character and the dead font reference 404'd on every page. The icon is now a self-contained SVG.
- Fixed: pagination arrows (first/previous/next/last) rendered as empty squares — Joomla 4+ uses newer icon class names the template never mapped. Now self-contained SVGs.
- Fixed: featured/blog articles showing only their title — tall single-column intro articles were clipped by the blog layout CSS.
- Improved: search button sits snug against the search input.
- Fixed: the template version shown after install now tracks the real release version.
July 16, 2026Version 5.4.0.2
Bugfix release. Fixes a legacy Joomla 3 form-validation call (
behavior.formvalidation, removed in Joomla 5) in the VirtueMart login template override, which could cause a500 - behavior::formvalidation not founderror on pages where the login block is shown to guests — for example the cart, depending on your VirtueMart settings. The override now uses the Joomla 5-nativebehavior.formvalidator.Found during the follow-up on the 2026-07-15 report — thank you again, Zoltán!
July 15, 2026Version 5.4.0.1
Bugfix release. Fixes a PHP 8 fatal error (
count(): Argument #1 ($value) must be of type Countable|array, null given) on the cart "Bill To / Ship To" address edit page. Theedit_address.phptemplate override — and its Bootstrap-3 layout variant — now guard the optional user-fields block with!empty()instead ofcount(), so guest checkout address editing works on all PHP 8 versions. Recommended update for everyone running EShop 5.4.0.Thank you, Zoltán, for taking the time to report this!
June 27, 2026Version 5.4.0
Compatible with: Joomla 5.4.6 · VirtueMart 4.6.8 Pro · PHP 8.x (verified on PHP 8.3.31) · Bootstrap 5First Joomla 5 native release. eShop has been rebuilt from the ground up for Joomla 5.4.6 + VirtueMart 4.6.8 Pro + PHP 8.3 + Bootstrap 5.3.8 + vanilla JavaScript, with no carry-over of the Bootstrap 2 / jQuery 1.x dependencies that defined the earlier 3.x-era codebase. This is the first eShop release that ships with no template-side jQuery menu init, no BS2 markup in any rendered output, no MooTools, no remnants of the deprecated Joomla 3/media/jui/library, a modern hamburger mobile menu with single-branch-open accordion, full 13-network social parity, J5-native admin form controls throughout the Template Style screen, and a hardened output-escaping pass across the admin-controlled parameter-echo paths.Added
Joomla 5 native API
- Full Joomla 5 namespace compliance across all template files, overrides, and helper utilities — every
Joomla\CMS\*class accessed through its namespaced form. templateDetails.xmlrewritten to the J5 manifest schema withmethod="upgrade"declared so existing customers can update in place without uninstall-first. Extension-version declaration bumped to5.4.0. Build date set to2026-06-26. Copyright updated toCybersalt Consulting Ltd / VirtueMartTemplates.net.- VirtueMart 4 helper integration refactored end-to-end for J5 namespace resolution.
VirtueMart core upgrade — 4.2.12 → 4.6.8 Pro (build 11258)
- VirtueMart upgraded four minor releases from
4.2.12(March 2024 build) to4.6.8 Pro build 11258(March 2026 build) on the donor before quickstart export. Customers installing the 5.4.0 quickstart get the current VirtueMart catalog engine, payment gateways, shipping plugins, and security fixes out of the box rather than a 22-month-old VM core to update first. - Schema migrations applied to all
virtuemart_*tables during the donor-side upgrade pass — the quickstart bundle exports the post-migration schema state, so the customer's fresh install boots into a fully-current VM database with no upgrade-in-progress flags.
Bootstrap 5.3.8 native rendering
- Template now renders directly against J5's bundled
/media/vendor/bootstrap/css/bootstrap.min.css— no separate Bootstrap copy, no compatibility shim CSS in the final shipped tree. - Phase 3a
bs2-bs5-bridge.csslayer installed to preserve backward compatibility for any third-party content posted by site editors using legacy BS2 markup (.row-fluid,.spanN, etc.). The bridge layer means existing customer-authored content that pre-dates the modernization continues to render correctly without manual rework. - BS5 modal markup migration applied throughout the template — every
data-toggle→data-bs-toggle,data-dismiss→data-bs-dismiss. The login modal, currency-selector dropdown, and any custom-content modal triggers all now fire under BS5's vanilla-JS modal handler.
Modern slideshow — Swiper 11
- Custom legacy
camera.jsplugin replaced with Swiper 11, J5's bundled slideshow library — touch-friendly, accessible, and actively maintained. - Per-slide CTA button styling, caption positioning, and overlay darkness now controllable from the module-edit UI rather than requiring code edits.
- Fade-gradient overlay preserved from the previous camera.js implementation; visual look and feel matched 1:1 between old and new engine.
Vanilla JavaScript menu
- New
js/menu-vanilla.js— a self-contained IIFE replacement for the legacysuperfish.js+supersubs.js+ inline jQuery menu handlers. WeakMap-backed 500 ms mouse-out delay preserves the original menu-hover feel without any jQuery dependency.
Mobile menu — Expression-pattern accordion
- New
js/mobile-accordion.jsreplacing the legacy selectnav side-panel mobile menu with a hamburger toggle that reveals a single-branch-open accordion below the header. - Hamburger button auto-injected into
#top-handleron DOMContentLoaded;aria-expanded+aria-labelattributes carry the accessibility metadata. - JS-injected
+/−indicators on parent items; tapping a parent expands children inline (no fly-out side panel); tapping a leaf navigates and closes the menu. - Light-theme menu (white background, dark text) with WCAG-AA contrast on every indicator; comfortable 44px+ tap targets on every row.
- Top-right quick-nav (
FAQ / HELP / SUPPORT / MY ACCOUNT / REGISTER) on mobile lays out as a wrapping flex-row centered — legible at every viewport width instead of stacked vertically against the edge.
Modern social-network support (Phase 3f — 13-network parity)
- Added Instagram, Threads, Bluesky, Mastodon, YouTube, TikTok, Pinterest, Discord via FontAwesome 6.5.2 brand glyphs.
- X (the Twitter rebrand) replaces the legacy Twitter icon with the current
fa-x-twitterlogo. - Per-network icon glyphs delivered via the
fa-brandsset, retiring the legacy iconfont references entirely.
Package + Update Manager registration
- New
pkg_eshop.xmlpackage manifest. Installing thepkg_eshop-5.4.0.zippackage registers the eShop template AND its update-server URL (https://virtuemarttemplates.net/updates/pkg_eshop.xml) with Joomla's native Update Manager so customers get update notifications in-admin when future releases ship.
Security hardening (XSS)
- New escape and validation helpers added to
index.php:phEsc()— HTML attribute escaping forhref,src,alt,title, and Swiper caption output.phHexColor()— color parameter validation with fallback to#000000on bad input.phCssDim()— dimension parameter validation acceptingpx / em / rem / % / vh / vw / pt / ex / ch / cm / mm / in.
- 126
phEsc()/phHexColor()/phCssDim()wraps applied acrossindex.phptemplate parameter echoes — every admin-controlled string that the template echoes into the rendered HTML is now escape-validated at the boundary. $typefallback added tomod_loginoverride — Joomla 5 splitmod_logininto separate login / logout templates; fallback silences the Undefined variable $type warning while preserving the legacy logout branch.$moduleclass_sfxfallback added tomod_breadcrumbsoverride.- All 73 template overrides reviewed for malicious patterns (
eval,base64_decode,system,exec, raw$_GET/$_POSTechoes, obfuscation) via the Cybersalt override-security checklist — clean. Override Manager dashboard widget orphan-row sweep also applied so the admin Templates panel no longer shows a permanent "Override(s) to check" badge from removed-in-J5 core layouts. - 39 legacy admin form switches in
templateDetails.xmlconverted to J5-nativetype="radio" layout="joomla.form.field.radio.switcher"markup — the old BS2-eratype="checkbox" class="switch"inputs are gone. Editing the Template Style in the admin now uses the modern J5 switcher UI consistently.
Changed
J3 to J5 API migration
- Every deprecated
J*static class call migrated to its namespaced equivalent:JFactory,JText,JHtml,JUri,JRoute,JComponentHelper, etc.
Web fonts
WebFontConfig+ajax.googleapiswebfont.js loader replaced with direct<link>to Google Fonts (Open+Sans) with&display=swap+ preconnect hints tofonts.googleapis.com+fonts.gstatic.com— one fewer external JS dependency, no flash-of-invisible-text.
Modernization swaps (Phase 5)
- Phase 5b: jQuery.dropkick currency selector replaced with native
<select>and CSS-only chrome. - Phase 5c: Superfish menu replaced with vanilla
menu-vanilla.js(no jQuery dependency). - Phase 5d: jQuery.backstretch replaced with CSS
background-size: cover. - Phase 5e: Removed jQuery 3 compatibility shim (BS5 bundles its own modern jQuery).
- Camera slideshow hand-ported to Swiper 11.
- Login modal toggle rewritten from
jQuery(...).toggle()to vanillaaddEventListener+style.display; modal close handled by BS5 vanilla-JS modal API.
Fixed (layout + rendering regressions caught at walkaround)
- Header full-width — the dark top bar now extends the full template width on every viewport. Fix:
header.span12 { width: 100% !important; max-width: 100% !important }+.container.main-bg { position: relative }so the absolute-positioned header sizes to its container, not the viewport. - Product category page — 4-in-row grid restored. Before the fix the BS2 standalone
.span3 { margin-left: 20px }rule was leaking into.row-fluidcontexts and pushing the fourth card onto a second row. Fix: bridge-CSS rule.row-fluid > [class*="span"] { margin-left: 0 !important }with!importantto win the cascade against the standalone rule. - Product card heights normalized.
.spacer-handler { height: 100% }from the legacy template was clipping product titles, prices, and "Product Details" buttons below the card boundary. Fix: bridge-CSS override.spacer-handler { height: auto }so cards size to their content. - MY ACCOUNT / REGISTER quick-nav centering. On medium viewports where the two items wrapped onto a second row, the legacy flex layout left them left-aligned against the menu's left edge. Fix:
display: contentson the wrapper to flatten the sibling-UL out of the flex flow +text-align: center— wrapped items now center across the available width. - Bootstrap 2 grid × Bootstrap 5 grid coexistence. The bridge CSS now provides explicit
.row > .spanNrules so legacy customer content using BS2 grid markup renders correctly inside a J5-native page that uses the modern.rowwrapper. No more half-broken hybrid layouts when an editor pastes legacy markup into a new content area. - Mobile menu fly-out side panels eliminated. The legacy selectnav implementation rendered the mobile menu as off-canvas side panels that were broken under modern viewport widths. Replaced wholesale with the in-flow accordion above (see "Mobile menu" in Added).
- Hamburger button positioning sits cleanly inside the dark top bar instead of overflowing the right edge.
- Slideshow fade gradient retained through the camera.js → Swiper migration so the visual transition character is unchanged.
Quickstart database hardening (Phase 5)
- Phase 5f: Update Sites Manager cache flushed; enabled / disabled update sites surveyed.
- Phase 5f.2: Pending extension updates applied. Weblinks Extension Package upgraded to 5.1.0 via Joomla CLI on the donor before quickstart export. Customers installing the 5.4.0 quickstart get current third-party extensions out of the box rather than pending updates as their first action.
- Phase 5g.1: Global check-in across J5 tables (stale check-outs cleared).
- Phase 5g.2: Condition-based postinstall messages hidden (customer-actionable kept);
robots.txtsynced torobots.txt.dist; all user groups set to text-filterNH(No HTML, XSS hardening). - Phase 5j: Article hits counter reset. All
#__content.hitsvalues reset to0in the donor database before quickstart export. Rationale: the hits counter accumulates during development on the donor site and ships as preloaded view-counts inside the customer's freshly-installed quickstart, which is misleading at best and indistinguishable from third-party tampering at worst. - Phase 5i: Footer year bumped to 2026 and centered.
- Phase 5k: All 73 template overrides reviewed (Cybersalt override-security checklist) and marked as checked-in. Orphan-of-removed-core override sweep applied to silence the admin Templates panel's permanent "Override(s) to check" badge from layouts that were removed in Joomla 5.
- StageIt 5 + MCP for Joomla preinstalled in the quickstart bundle so the customer's fresh install includes the staging-clone workflow and the Claude API endpoint out of the box — new in 5.4.0 per the Cybersalt VMT quickstart-shipped-extensions standard.
Removed
Legacy Bootstrap purge (Phase 3b.6)
- Deleted top-level
css/bootstrap.css— BS2-era full stylesheet, no longer referenced byindex.php. - Deleted
css/bootstrap/subdirectory (BS2 split-files). - Deleted
js/bootstrap.min.js— BS2-era jQuery-dependent JS bundle.
Extinct-framework dead code
- MooTools dead-code purge across the override tree: removed
$$(),window.addEvent,Fx.Slide, and other MooTools-isms left over from the J3-era codebase. The framework hasn't loaded since J4 but the calls remained harmlessly dead in chrome and module overrides. Now removed for code-cleanliness. - IE conditional comments (7 blocks) removed.
selectivizr.jsIE polyfill removed.- Removed dead social networks: Google+, StumbleUpon, Digg, Blogger, MySpace.
Cassiopeia vestigial overrides
- Deleted the orphaned
templates/cassiopeia/html/override tree shipped from the J4-era donor. Cassiopeia is Joomla's default fallback template, not eShop's active template — these overrides targeted core layouts that were removed in J5 and caused a spurious "Changes found" notice in the admin Templates panel.
Notes
Notes- Server PHP version when this release was prepared: PHP 8.3.31.
- Joomla: 5.4.6 (current stable). VirtueMart: 4.6.8 Pro (Revision 11258, March 2026 build). eShop template: 5.4.0 (this release).
- Maxdebug
error_reportingaudit on the eShop Quickstart's default install shows zero PHP warnings, notices, or deprecations originating from eShop template code.
Package format
- Template package:
pkg_eshop-5.4.0.zip— Joomla package wrapper that installs thetpl_eshoptemplate extension AND registers the update-server URL under the package manager for in-admin update notifications. - Quickstart bundle:
eshop-quickstart-J5.4.6-27.06.2026.zip— complete Joomla 5.4.6 install with VirtueMart 4.6.8 Pro and eShop pre-loaded as the active template, plus StageIt 5 and MCP for Joomla preinstalled.
August 18, 2025Version 18.08.2025 5.3.0/4.4.4
- Upgraded - Now compatible Joomla 5
- Upgraded - Now compatible Virtuemart 4.4.4
- Fixed - Minor bugs
November 29, 2024Version 29.11.2024 5.1.2/4.2.12
- Fixed - Minor bugs with cart
August 15, 2024Version 14.08.2024 5.1.2/4.2.12
- Upgraded - Now compatible Joomla 5
- Upgraded - Now compatible VirtueMart 4.2.12
- Fixed - Minor bugs
January 18, 2024Version 18.01.2024 4.3.4/4.2.0
- Fixed - Minor Bugs
December 13, 2023Version 07.12.2023 4.3.4/4.2.0
- Fixed - Cart update bug
November 3, 2023Version 03.11.2023 4.3.4/4.2.0
- Upgraded - Now compatible with PHP 8.2
- Upgraded - Now compatible with Joomla 4.3.4
- Upgraded - Now compatible with VirtueMart 4.2.0
September 18, 2023Version 18.09.2023 4.3.4/4.0.12
- Fixed - Responsive menu no displaying
June 30, 2023Version 26.06.2023 4.3.0/4.0.13
- Fixed - VirtueMart Products Module bug
- Fixed - Double ReCaptcha on VirtueMart Registration page
- Fixed - Template toggle button not displaying
June 23, 2023Version 16.06.2023 4.3.0/4.0.13
- Fixed - Menu Params error for adding in image on menu
May 20, 2023Version 20.05.2023 4.3.0/4.0.12
- Fixed - Template updated to be compatible with Joomla 4.3
September 9, 2022Version 09.09.2022 3.10.11/4.0.6
- Fixed - Joomla 3.10.11
- Fixed - Template updated for PHP 8.0
