Four things a store needs and most carts charge for: numbers you can hand your accountant, products your shoppers can search, pages search engines can find, and a cart they can see without leaving the page.
Solidshop Core 1.2.0 is available now. It is the discovery release: three of its four headline features exist so that people can find your products — in your own search box, in Google, and in the cart drawer they never had to leave the page to open. The fourth finally answers “how much did I sell last month?” without exporting orders to a spreadsheet.
All of it is in free Core. Discovery and basic bookkeeping are not things we think a store should have to buy an add-on for.
Reports
A new Solidshop › Reports screen gives you four tabular reports over any date range, each with an Export CSV button:
- Sales by period — by day, ISO week or month.
- Sales by product — units and revenue per product.
- Tax collected — per tax rate, for filing.
- Sales by payment method — what your customers actually pay with.
The interesting part is not the four reports, it is the rules they all obey. Only orders that were actually paid count — the default scope is paid, partially paid and partially refunded, shown as a filter you can widen, and printed on screen and in the CSV so a number can never be quoted without its scope. Days are bucketed in your site’s timezone, not the server’s. And if you take money in more than one currency, each gets its own table section: nothing is ever summed across currencies at an invented exchange rate.
The CSV is built to be handed to somebody else. Every file opens with a comment line stating the scope it was generated under, and every row carries store identity and currency, with money as raw decimals rather than formatted strings. Full reference in the Reports documentation.
Products in Joomla Smart Search
Joomla has a perfectly good site-wide search — Smart Search
(com_finder) — and until now it could not see a
single one of your products. 1.2.0 bundles a new
Smart Search - Solidshop Products plugin that
indexes them, so one search box covers your articles, your contacts
and your catalogue.
Indexed per product: name, short and full description, SKU, SEO page title and meta description, plus the product image and Type, Category, Brand and Language filters for the search results page. The index stays current by itself — saving, deleting, publishing or unpublishing a product or its category updates it immediately.
It also respects storefront visibility exactly, which is the part that quietly matters. An unpublished product, a product whose publish window has not opened, a product in an unpublished category, or one behind a view access level never surfaces to a shopper who could not see it anyway. Multilingual stores get one index entry per enabled language, using the translated name, description and slug.
A native XML sitemap
Joomla ships no sitemap, which meant a Solidshop catalogue was discoverable only through whatever links a crawler happened to follow. Solidshop now emits its own, out of the box — no third-party sitemap extension required:
https://your-shop.example/index.php?option=com_solidshop&view=sitemap&format=xml
That URL is a sitemap index fanning out to shards, so a
catalogue of any size stays within the format’s limits. Product
entries carry a real per-product lastmod — not a
store-wide regeneration stamp — which is how a search engine
learns your price or description changed without waiting to recrawl.
We deliberately omit changefreq and
priority: Google ignores both.
Visibility is derived from the same predicate the storefront listing
uses, restricted to what a guest can see, so nothing in the sitemap
is a page your visitors would be denied. On a multilingual site each
language gets its own URLs. Settings live under
Options › Sitemap (on by default), each store
gets its own scoped sitemap URL on the store’s
SEO tab, and System › Overview
shows the exact URL for your site and warns when
robots.txt does not reference it yet.
Submitting it is two minutes and worth doing today — paste it
into Google Search Console and add a Sitemap: line to
robots.txt. Steps in the
go-live checklist.
A mini-cart drawer, and coupons on the cart page
The cart module used to be a badge and a link. It now opens an off-canvas drawer with the actual cart in it: line items with images and variants, a quantity stepper, remove buttons, a tax-adjusted estimated total that includes automatic discounts, and View cart / Checkout buttons. It updates live when a shopper adds or changes something anywhere on the site — no page reload — and it replaces the old add-to-cart popup as the confirmation that something landed in the cart.
It is keyboard-accessible (focus trap, Esc to close), works in RTL and dark mode, and if you preferred the old behaviour the module has a Display mode option to go back to a plain cart link. One behaviour change to know about: the badge now counts units rather than lines, so adding the same product twice reads “2”.
The cart page grew a matching pair of additions: a coupon field (tucked behind a “Have a discount code?” link) and subtotal, discount and estimated-total rows. Automatic discounts were previously invisible until checkout, which is exactly the wrong place to first show someone they are saving money. A code entered in the cart carries into checkout automatically, and the discount row recalculates as quantities change. Codes restricted by location — which cannot be verified before an address exists — are accepted with a Confirmed at checkout hint rather than rejected. See the discounts documentation.
Your dashboard numbers will change
This is the one thing in 1.2.0 to read before you update. The dashboard now runs its KPI tiles, sales chart, top products and customer insights through the same engine and the same payment scope as Reports. Revenue will read lower than it did in 1.1.x.
Nothing was lost. The old figure counted every order regardless of whether it was ever paid — pending, unpaid and abandoned-at-payment orders included. That is a useful measure of activity and a misleading measure of money, and it disagreed with what Reports would tell you. Revenue and average order value now cover your store currency only, with in-scope orders in other currencies flagged underneath and a link to Reports for the per-currency breakdown. Recent orders and the alert widgets still show every payment status — those are operational views, and unpaid orders are their whole point.
Related: your transacting currency now lives on the store record, on the Store edit screen, and the global “Default currency” option is gone. The two could previously disagree — store set to EUR, checkout transacting in USD. Your existing setting is migrated for you on update, and the storefront behaves exactly as it did before.
Fixes worth knowing about
-
An unwritable cache directory could fail a paid
order. Template compilation threw rather than degraded,
inside checkout and payment callbacks — so a
cache/com_solidshopfolder the web server could not write into broke orders that had already been paid for. It now recompiles per render and logs instead. The new System panel reports both cache areas with their owner and permissions, repairs what PHP can, and prints the exactchowncommand for what it cannot. - Sample shipping data left most carts with no rate. The seeded rate table capped order value in every non-domestic zone, so any cart above the ceiling silently matched nothing and checkout offered no shipping. Rebuilt as five gapless zones covering 77 countries. Only affects stores set up with the sample data.
- A shipping profile with no products assigned is normal. It means “covers everything”, but the store page flagged it as a warning — and assigning products to make the warning go away is what actually breaks your shipping. It now reads as a plain badge, with the behaviour explained on the profile’s Products tab.
- The System menu-items panel only ever found the Cart page. It looked for the wrong view for Customer Profile, omitted Products entirely, and hid unpublished or trashed items — the single state most likely to explain a 404ing storefront page. All states now report, badged.
- The account “Payment Methods” page is gone. Both of its cards said “Coming Soon”; nothing in Solidshop stores a card against a customer. Advertising a capability we do not have to shoppers mid-purchase was the wrong trade.
-
Translation fixes. Greek checkout printed a
literal
&in three policy links, Hindi mistranslated “Subtotal” as “usage” on invoices and in the cart, and 110 new strings reached all 22 translated locales. Our release gate now checks placeholder and ampersand correctness, not just that keys exist.
Updating
1.2.0 is a one-click update from System › Update, with no database changes. Two things are worth doing by hand afterwards:
- Turn on Smart Search for products. Fresh installs get it automatically; updates do not. Enable Smart Search - Solidshop Products in the Plugin Manager, then run the indexer once from Components › Smart Search.
-
Submit your sitemap. It is generated from the
moment you update — but nothing crawls a URL it has not been
told about. Search Console plus
robots.txt, as above.
For the complete, itemised list of changes, see the Solidshop changelog.