Compatible with: Joomla 5.4.7 · VirtueMart 4.6.8 · PHP 8.3+ · Bootstrap 5 · Font Awesome 6.5.2
First Joomla 5 native release. FashionShop has been rebuilt for Joomla 5.4.7 + VirtueMart 4.6.8 + PHP 8.3 + Bootstrap 5, with no carry-over of the jQuery UI modal helper, the Superfish menu init, the jQuery.backstretch library, or the Joomla 3 / Joomla 4 compatibility shims that defined earlier releases. Ships as a Joomla package installer (pkg_fashionshop-5.4.1.zip) for in-place upgrade and update-server registration, with a from-scratch mobile UX overhaul (canonical utility strip + two mutually-exclusive drawers + full-viewport search & cart panels), a full BS2 → BS5 grid migration, output-escape helpers on the admin-controlled echo sites, J5-native admin form switchers throughout the Template Style fieldset, and modernized 13-network social parity.
Added
Joomla 5 native API
- Full Joomla 5 namespace compliance across the template entry-point, helpers, and parameter-echo paths —
JFactory → Factory, JText → Text, JRoute → Route, JHtml → HTMLHelper, JModuleHelper → ModuleHelper, and the rest of the deprecated J* static-class family.
templateDetails.xml rewritten to the Joomla 5 manifest schema with method="upgrade" declared so existing customers can install in place without uninstall-first. <targetplatform name="joomla" version="5\.[0-9]+"/> declared.
$menuitem->params direct-access replaced with $menuitem->getParams() across the custom mega-menu loop (the J5 protected-property fix). Level-1 filter added so the flat J5 menu return doesn't produce a fully-flattened dropdown tree.
- Native Joomla 5 jQuery 3.7.1 (loaded via the CMS) used in place of the previously-bundled jQuery build — one shared instance across the page, current security patches included.
Mobile UX — canonical utility strip + drawer system
- New canonical mobile utility strip at the bottom of the header — five equal-width cells across the full viewport: SHOP MENU · ACCOUNT · REGISTER · SEARCH · CART. Every icon pinned to a 24×24 box so labels sit on the same Y baseline regardless of Font Awesome glyph variation.
- Two mutually-exclusive mobile drawers: the primary top-right hamburger opens the Menu drawer (
#nav), the "Shop Menu" cell in the utility strip opens the Shop Menu drawer (#mega-menu). Both use a fixed overlay with a tinted background driven by the template style's color4 parameter.
- Drawer items styled centered, uppercase, 12px bold, with +/− accordion indicators in 28×28 circles (flex-centered so the glyph sits dead-center regardless of Font Awesome baseline offsets).
- Primary hamburger transforms to an X close affordance whenever either drawer is open. Hitting X just closes — never re-opens the sibling drawer.
- Search + Cart panels open as full-viewport-width fixed overlays below the utility strip (breaks out of the legacy header container's side padding). The search input flex-sizes to full viewport width, overriding template.css's legacy
#search-position .inputbox { max-width: 130px } mobile cap.
- Camera.js caption z-index neutralised while either the search or cart panel is open — the legacy slideshow set
z-index: 2147483647 (INT_MAX) on .camera_caption, defeating any positive z-index on our panel; we now scope a body-class rule to reset it while a panel is visible.
Modern social-network support (13-network parity)
- Social-media set expanded — added Threads, Bluesky, Mastodon, TikTok, Discord alongside the existing X (Twitter), Facebook, Instagram, LinkedIn, Pinterest, YouTube, Vimeo. Five custom-slot escape hatches retained for anything else.
- Per-network glyphs delivered via FontAwesome 6.5.2 brand iconography (
fa-brands set); FA v4-shims layer bundled so legacy <i class="fa fa-twitter">-style markup from customer content keeps rendering.
- Social-block parameter set extended: each new network has its own
*ON visibility toggle plus URL field, all wired into the Template Style admin form's Community fieldset.
Security helpers (XSS hardening)
- New output-escape helpers added to
index.php:
phEsc() — HTML attribute escaping for href, src, alt, title, and slideshow caption output.
phHexColor() — color parameter validation (regex ^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$) with fallback to #000000 on bad input.
phCssDim() — dimension parameter validation accepting px / em / rem / % / vh / vw / pt / ex / ch / cm / mm / in.
- Admin-controlled echoes across the template tree wrapped with these helpers — 175 raw-echo sites hardened in the Phase 3d security sweep, covering social-block hrefs, preset color values, slideshow caption text, header-block dimension vars, and the module-class fallback in every layout override.
$type fallback added to html/mod_login/default.php — resolves the Undefined variable $type warning that surfaced on PHP 8+ under strict error reporting.
Changed
Bootstrap 2 → Bootstrap 5 grid migration
- Template now renders against Joomla 5's bundled Bootstrap 5 natively. The bundled BS2
bootstrap.min.css load and the on-page BS2 stylesheet references have been dropped from the CSS list.
- BS2 grid classes rewritten to BS5:
.row-fluid → .row across the template tree (33 class-migration edits in index.php). Percentage-width .spanN rules preserved via a compact bridge stylesheet (css/bs2-bs5-bridge.css) that maps BS2's 12-column grid onto BS5-friendly percentage widths so legacy module CSS keeps working.
- BS2 modal markup migrated to BS5:
#LoginForm now uses .modal-dialog + .modal-content wrappers with data-bs-toggle="modal" / data-bs-target / data-bs-dismiss attributes; native .btn-close replaces the legacy inline close button.
- BS2 970-grid pixel widths in the bridge (
.span1 { width: 60px } … .span12 { width: 940px }) replaced with percentage widths — standalone .spanN elements now flow responsively instead of perpetuating the fixed-pixel grid.
Bundled framework refreshed
- Joomla core bundled in the quickstart bumped to 5.4.7 (from 5.1.x on the previous 5.3.0 release). Every subsequent Joomla point release will be reflected in the quickstart at the next FashionShop release.
- VirtueMart bundled in the quickstart bumped to 4.6.8 (from 4.4.4 / 4.2.0 on earlier releases). Schema migrations applied to
#__virtuemart_* tables.
- Font Awesome CDN reference bumped from 4.7.0 → 6.5.2 for brand-glyph support (Threads, Bluesky, Mastodon, TikTok, Discord). FA 6.5.2's
v4-shims layer is bundled alongside so existing <i class="fa fa-twitter">-style markup from customer content keeps rendering.
- PHP minimum raised to 8.3 (from 7.4 on the last legacy release). All template helpers verified on PHP 8.3.x.
- Bootstrap baseline is now 5.x (Joomla-bundled), replacing BS2. Legacy BS2 layout markers preserved via the compact bridge stylesheet.
Admin form modernization — J5-native switchers
- Every legacy
class="switch" type="checkbox" field declaration in templateDetails.xml converted to J-native type="radio" layout="joomla.form.field.radio.switcher" with explicit <option value="0">JNO</option><option value="1">JYES</option> pairs. 94 native switchers now render in place of the 2014-era checkbox controls.
- Scope covers every fieldset, not just the Community-tab social ON toggles — Camera slideshow toggles, cookie-law toggle, jump-to-top toggle, header-panel toggles, and the rest of the legacy boolean-input set.
- Customers opening the Template Style edit screen now see Joomla 5's native pill-switcher UI throughout.
Register-page flow & login modal
- Register URL changed from
com_virtuemart&view=user&layout=editaddress to com_users&view=registration — the VirtueMart edit-address view calls count($user->addresses) on unregistered visitors, which throws count(): Argument #1 must be Countable on PHP 8+.
- VirtueMart account-maintenance page: Save / Cancel buttons centered at all viewports and reordered below the billing-details fieldset so the flow reads fill-in-then-save top-to-bottom. Headings centered on mobile so the whole flow reads as a single column.
#LoginForm BS5 migration: legacy jQuery .toggle("fast") race handler removed (was fighting BS5's own show/hide state), .attr('style','display:none') force-hide calls on SEARCH / CART click removed, mobile .row negative-margin reset so the "Join Us Today!" pane has proper padding from the viewport edge.
- Login modal desktop clearance: modal-dialog margin-top raised so the modal doesn't collide with the fixed header at the top of the page.
Menu rendering (mega-menu + main-menu)
- Custom mega-menu loop patched for J5's protected-property enforcement (
getParams()) and the J5 flat-menu return (level-1 filter). Modules assigned to menu-position-1-* / menu-position-2-* / menu-position-3-* continue to work as before.
- Nested-menu pathway added alongside the module-based mega-menu: mega-menu items whose Joomla parent is another top-level item now render as a dropdown UL nested inside the top-level LI (previously silent-truncated to zero children by the level-1 filter). Both module-based and DB-nested menu structures now produce dropdowns via the same loop.
- Megamenu hover-gap fix: pure-CSS
transition: top 0s linear 500ms on the hidden state so hovering into the dropdown gap doesn't collapse it. No JS required.
Fixed
- Style 50 (Animations For All) HTTP 500 —
templates/fashionshop/html/mod_virtuemart_product/slick-slider.php was still calling legacy JHTML::_('behavior.modal'), a helper removed in Joomla 4/5. Every request to a menu item using that VirtueMart product layout returned behavior::modal not found at page bootstrap. Removed the call; BS5's data-bs-toggle="modal" markup handles modal opening natively.
- Style 51 slideshow flush against header — slideshow container top-margin zeroed on desktop so the hero image starts flush under the fixed header instead of below an empty white strip.
- Slideshow min-height scoped to desktop —
#slideshow-handler { min-height: 400px } now only applies at ≥768px viewports. Mobile falls back to intrinsic content height so the slideshow doesn't reserve a tall empty strip below the actual slide.
- Style 47 breadcrumb strip hidden on mobile — long crumb trails on nested pages were eating 30–40px of vertical space above the article body.
#socialModal hidden on mobile across every style (was leaving an empty 60px vertical band on mobile with no content).
jquery.stellar.min.js parallax init wrapped in try/catch — the ancient plugin (last updated ~2013) calls $(window).offset() internally, which reaches into getClientRects() — a method window doesn't expose on jQuery 3.x. Threw TypeError: r.getClientRects is not a function three times per page load. Suppressed; parallax still runs on invocations that succeed.
- Footer column layout on mobile —
.tf-module.span6 was pinned at width: 585px in template.css, so two columns + gap overflowed the 1170 container and wrapped to separate rows. Bridge CSS now flex-sizes footer .tf-module.spanN children so they share the row width; mobile stacking rule bumped to matching specificity so it wins at ≤767px viewports.
- Social icons row layout normalized — legacy
float: left on icon <li> anchors normalized to a flex row with proper wrap and gap; no more floats overlapping other footer content.
- Configuration-form image logo collapse — when
H1TitleImgText=true the bridge's flex-header rule left #sn-position with no in-flow content because .h1 is position:absolute. Bridge now forces #sn-position { width: 100% } so the image logo has a positive box even in absolute-child mode.
Removed
- Superfish / Supersubs menu init scripts — replaced with pure-CSS
:hover dropdowns + a vanilla JS hover-delay handler (500ms leave delay).
- jQuery.backstretch × 2 body-background loaders — replaced with CSS
background-size: cover.
- Modernizr, Selectivizr, html5shiv polyfill loaders — all targeted legacy IE which Joomla 5 dropped.
- IE conditional comment blocks in
index.php's <head> (IE 6/7/9) — polyfill conditional loaders + IE-only CSS conditional links all stripped.
- Joomla 3 + Joomla 4 compatibility shims — the template no longer carries the
jimport('joomla.event.plugin')-era compat glue.
- BS2 bootstrap.min.css and the BS2 fallback CSS load — BS5 (Joomla-bundled) is the single Bootstrap source now.
- jQuery UI modal helper (
behavior.modal) call in html/mod_virtuemart_product/slick-slider.php — dead in Joomla 4/5, threw fatals on Style 50.
- Dead social networks: Google+, StumbleUpon, Digg, Blogger — params + icons + admin fields all stripped from the social-block set.
- Legacy BS2 modal-pinning CSS on
div.modal#LoginForm in template.css (width: 700px; margin-left: -350px) — BS5's .modal-dialog-centered owns width + centering natively.
- Hardcoded fixed-pixel spanN widths in the bridge CSS — replaced with percentage widths so standalone
.spanN elements flow responsively.
Quickstart database hardening
- Customer-facing aggregate counters reset to 0. Donor-site preview / dev hits no longer leak into a customer's fresh install. Counters now zeroed at quickstart build time on
#__content.hits, #__virtuemart_products.hits, #__virtuemart_products.product_sales, and #__virtuemart_categories.hits.
- Template overrides mark-as-checked — all overrides now flagged
state=1 so they show up correctly in the Templates Manager Overrides view without a manual sweep.
- Postinstall messages hidden — every enabled postinstall message on the donor snapshot marked as displayed so a customer's fresh install doesn't open on a wall of leftover notifications.
- Quickstart install wizard verified clean on PHP 8.3.
Package format
- Standalone template:
pkg_fashionshop-5.4.1.zip — Joomla package installer wrapping tpl_fashionshop.zip and registering the update-server URL. First FashionShop release shipped as a Joomla package rather than the bare template zip — treats "template already exists" as an in-place upgrade so customers with a prior standalone install can safely install the package on top and get promoted to package-managed.
- Quickstart bundle:
fashionshop-quickstart-J5.4.1-10.07.2026.zip — complete Joomla 5.4.7 + VirtueMart 4.6.8 install with FashionShop pre-loaded as the active template, all customer-facing aggregate counters zeroed on first install.
Notes
- Joomla: 5.4.7. VirtueMart: 4.6.8. PHP: 8.3+. Bootstrap: 5 (Joomla-bundled). Font Awesome: 6.5.2. FashionShop template: 5.4.1 (this release).
- VirtueMart-side compatibility plugin. FashionShop itself is Joomla 5 native — no template code depends on Joomla's System — Backwards Compatibility plugin. Some VirtueMart-bundled extensions (
plugins/system/vmloaderpluginupdate, for example) still extend the removed JPlugin class and rely on the compat plugin to keep working. Leave the Backwards Compatibility plugin enabled until VirtueMart's own extensions are migrated upstream.
- Slick / Owl / Camera slideshow libraries retained for compatibility with existing customer content that references them. Migration to Swiper 11 is deferred to a later cycle so this release stays a drop-in upgrade for customers who don't want to touch their slideshow markup.
- This release ships with
method="upgrade" on both the template and the package manifest — customers on the previous FashionShop release can install pkg_fashionshop-5.4.1.zip over the top via the Extensions Manager without uninstalling first.