Migrator
Version 1.0.0 Stable
| Maturity | Stable |
| Released on | Thursday, 20 August 2026 |
Release notes
First public release of Solidshop Migrator (pkg_solidshopmigrator), the free package that moves a VirtueMart 4 catalogue onto Joomla 6. It holds two extensions: the component com_solidshopmigrator, which is the wizard, and the console plugin plg_console_solidshopmigrate for the command-line route, which installs disabled and stays inert until enabled. Establishes the baseline that all future changelog entries are deltas against.
Added
- A Joomla 6 administrator component that reads a VirtueMart 4 store and writes its catalogue into Solidshop. It runs on the destination site — the only shape that works, since VirtueMart 4 does not run on Joomla 6 and there is no in-place path. Install it, run it once, uninstall it: no site-side code, no menu entries, nothing added to the storefront.
- Two source modes — a live database connection or an uploaded
.sqldump for merchants whose old host is gone — with a selectable connection charset (utf8mb4,utf8/utf8mb3,latin1) for databases of Joomla 3 vintage. The migration is read-only against the source, so a read-only MySQL user is enough. - Connect-and-detect reporting the VirtueMart version, content-language tables, entity counts and sample product names, so a character-encoding mismatch is caught in ten seconds rather than after five thousand products. VirtueMart 3 sources are flagged; a multi-vendor store warns that one vendor migrates per run.
- Catalogue migration: the category tree into Joomla's own categories under a root you choose (nesting, aliases and access levels intact), manufacturers into brands, and products with name, alias, SKU, GTIN (as barcode), published state, featured flag, descriptions, meta description, page title, stock, and weight converted from whatever unit VirtueMart recorded (kg, g, mg, t, lb, oz).
- Full multilingual migration — every VirtueMart content-language table becomes a Solidshop product translation, mapped to Joomla language tags on an editable grid (
en_gb→en-GB), one nominated as the default. - Price migration from the default shopper group; where an override price is set and is lower than the base, the override becomes the selling price and the base the compare-at price.
- Variant migration covering both VirtueMart mechanisms — child products (Generic Child Variant and Multi Variant, including multi-level trees) and cart-attribute custom fields — onto Solidshop's options and variants, each with its own SKU, price and stock. Per-value price modifiers are resolved into absolute prices, and generated combinations the source never sold are pruned rather than left as zero-price phantoms.
- Image migration into
images/solidshop/virtuemart-import/, copied from a folder on the server or downloaded from the old site's URL, deduplicated by VirtueMart media id so a shared image is copied once. HTTP fetches are capped at 20 MB and content-type checked; a failed image warns rather than stopping the run. - Preview mode that writes nothing — the same reading and the same mappers as the real run with the writer switched off, so its counts and warnings cannot disagree with reality. It is not a separate estimate.
- A downloadable, printable HTML report: totals, every warning and error keyed to the VirtueMart product id it refers to, and named sections for everything found but deliberately not migrated.
- Chunked runs of 20 product families per request with a live progress count, so catalogue size never meets
max_execution_time; a run that dies resumes rather than restarting. An id map keyed on source, store, entity and source id makes a re-run an update rather than a duplicate — and keys it by target store, so the same catalogue can later go into a second Solidshop store. - Products are written through
ProductGroupWriter, the same bulk write path the CSV importer uses, so migrated products behave exactly like imported ones — including the rule that a value the source does not carry is left alone rather than cleared. - Shipped as a package (
pkg_solidshopmigrator) holding the component and the CLI plugin, so a one-shot tool installs and leaves as one unit — a single uninstall takes both parts with it rather than stranding the console plugin on a live store. Uninstalling drops the working table and any scratch tables from a dump import; the migrated catalogue is untouched. - Requires Joomla 6.x+, PHP 8.4+, and Solidshop 1.3.0 or later — enforced at install time rather than failing halfway through a run, because the shared bulk write path the migrator writes through shipped in 1.3.0.
Command line
For a catalogue in the tens of thousands, or a host with an execution limit a browser run cannot survive, the same migration runs from Joomla's console. Enable plg_console_solidshopmigrate in the Plugin Manager — it is already installed — and run:
php cli/joomla.php solidshop:migrate --config=, driving the identical connection model, runner and mappers the wizard uses. This is a driver, not a second implementation, so the two routes cannot drift apart.- A JSON config file carrying exactly what the wizard collects: a
connectionobject (host, database, user, password, prefix, charset) and anoptionsobject (target store, root category, vendor id, default language and language map, prices-include-tax, image mode and source). Malformed config is rejected with a specific message before anything connects. --dry-runfor the same write-nothing preview,--report=for the same HTML report, and--sourcefor the source cart — defaulting tovirtuemart, currently the only supported value, with anything else rejected rather than ignored.- Progress as it goes: detected version and content languages, every warning, a progress bar over product families, then a summary of products, variants, categories, brands and images. Per-product messages are keyed to the VirtueMart product id. It exits non-zero if any product failed, so it is safe to drive from a script.
- Runs as the site's first unblocked Super User. The writes go through ordinary admin models, which check ACL, and a CLI process has no identity of its own; without a Super User account the command fails up front rather than part-way through.
- The config file holds a database password in plain text — keep it outside the web root and delete it when the migration is done. The browser wizard holds credentials only for the session and never writes them to the database.
Not migrated in 1.0
Version 1 migrates your catalogue, not your history. Everything here is found and named in the report rather than silently dropped, so it can be recreated deliberately: orders, customers and addresses; reviews; shopper groups and group pricing (only the default group's prices are read); coupons, payment and shipment plugin configuration; non-cart custom fields; and downloadable products, imported as physical because Solidshop's downloadable type is a separate plugin. Extra category and manufacturer assignments collapse to one each, and a product needing more than three option axes or 150 combinations is imported without variants — never silently truncated.
Tax and calculation rules are deliberately not mapped. VirtueMart models tax as free-form calculation rules used interchangeably for tax, discounts and fees; Solidshop models it as zones and classes. There is no faithful automatic translation, and a wrong one produces a store that quietly charges the wrong VAT. Every rule found is listed in the report with its name, scope and value. Prices come across exactly as VirtueMart stored them, and the "were prices shown including tax?" answer is recorded in the report rather than applied to the numbers.