

SE Storefront for Shopify shows the products from your Shopify store on your Joomla site. Products, prices, variants and collections are copied into Joomla and refreshed automatically, and product images are copied to your own server. When a visitor buys, the Buy button takes them to your Shopify store to check out.
images folder of your site must be writable, so product images can be copied thereThe installer checks the Joomla and PHP versions and stops with a clear message if either is too old.
pkg_seshopify_v1.2.2.zip.This installs the package, which contains:
| Part | Element | What it does |
|---|---|---|
| Component | com_seshopify |
The shop page, product pages, dashboard and options |
| Module | mod_seshopify_products |
Shows a selection of products anywhere on your site |
To update, install the newer package over the top. Your settings, product choices and images are kept.
https://shop.example.com or https://yourshop.myshopify.com. Use the address only, with no path after it.£ and GBP, or € and EUR.Open Components > SE Storefront for Shopify > Options.
| Option | Default | What it does |
|---|---|---|
| Shopify store URL | empty | Your store's address, for example https://shop.example.com or https://yourshop.myshopify.com. No trailing path. |
| Product source | Public feed, then Storefront API if the feed fails | Where products are read from. See Product source. |
| Storefront API access token | empty | Optional. Used when the public feed is unavailable, or always if the source is set to Storefront API only. |
| Storefront API version | 2026-07 | The year and month of the Storefront API version. Shopify retires old versions after about a year, so update this if syncs start failing with a "not found" error. |
| Categories come from | Shopify collections | What the category filter on the shop page is built from: your collections, the product type field, or no category filter. |
| Collections to leave out | frontpage,all |
Comma-separated collection handles that should not become categories, such as the home page collection. Only used when categories come from collections. |
| Currency symbol | £ | Shown before prices. Shopify's public feed doesn't include the currency, so set this to match your store's main currency. |
| Currency code | GBP | Three-letter code (GBP, EUR, USD) used in the product information for search engines. Leave empty to leave prices out of that information. |
| Refresh every (minutes) | 60 | How old the stored copy can be before it is refreshed. Minimum 5. |
| Cron secret key | empty | Turns on the cron URL. Letters and numbers only. See Keeping products up to date. |
There are two ways to read products from Shopify:
/products.json. Nothing needs setting up apart from the store URL. It doesn't work if the store is password protected (for example, before launch) or if the feed has been turned off.The default, Public feed, then Storefront API if the feed fails, uses the feed and only falls back to the API when the feed fails and a token is entered. Choose Storefront API only if your store is password protected, or if Shopify keeps rate-limiting your server (see Troubleshooting).
Shopify issues Storefront API tokens through its free Headless sales channel:
If you ever need to replace the token, generate a new one in Sales channels > Headless, update it in the options, then revoke the old one.
| Option | Default | What it does |
|---|---|---|
| Products per page | 24 | How many products appear on each page of the shop. |
| Columns | 4 | Products per row on wide screens. Narrower screens show fewer. |
| Thumbnail fit | Fill the square (crops) | Fill the square crops images to fill the square. Show the whole image fits the whole image inside the square. |
| Default sort order | Featured | Featured (your store's order), Newest, Price low to high, Price high to low, or Name A to Z. |
| Show sold out products | Yes | Whether products with no variants in stock are listed. Sold-out products show a Sold out badge. |
| Buy button text | empty | Replaces "Buy now" on the product page. Leave empty for the default. |
| Buy button background | empty | Background colour of the Buy button. |
| Buy button text colour | empty | Text colour of the Buy button. |
| Buy button background on hover | empty | Used while the pointer is over the button or it has keyboard focus. |
| Buy button text colour on hover | empty | As above, for the text. If both hover colours are empty, the button brightens slightly instead. |
| Product image background | empty | The colour behind product images, which shows through transparent PNGs. Empty means a light grey. |
| Accent colour | empty (dark grey) | Used for the Sale badge, focus outlines, and the Buy button when no button colour is set. |
| Text colour on the accent colour | empty (white) | Text on the accent colour, for example the Sale badge. |
| Category and sort buttons | empty (light grey) | Background of the category and sort buttons on the shop page. |
| Category and sort button text | empty (dark grey) | Text on those buttons. |
| Selected category and sort button | empty (dark grey) | Background of the selected button, also used while the pointer is over a button or it has keyboard focus. |
| Selected category and sort button text | empty (white) | Text on the selected button. |
| Open store links in | A new tab | Whether Buy buttons open your Shopify store in a new tab or the same tab. |
Pick colours with enough contrast between background and text so everything stays readable. The same button colours are used for the module's "See all products" button.
| Option | What it does |
|---|---|
| Licence key | The key from your SE24MEDIA account. See Licence and updates. |
| Licence server | Leave as it is unless SE24MEDIA support tells you otherwise. |
Standard Joomla permissions for the component. See Permissions.
Create a menu item of type SE Storefront for Shopify > Shop (product grid). The shop page shows:
Clicking a product opens its product page, which shows:
On the menu item's Shop options tab you can override the component options for this page:
| Option | What it does |
|---|---|
| Category | Start on one category. Visitors can still switch to other categories. |
| Default sort order | Use Global, or choose a sort order for this page. |
| Columns | Products per row. |
| Products per page | How many products per page. |
| Thumbnail fit | Fill the square, or show the whole image. |
| Show sold out products | Yes or No. |
You can create several shop menu items, for example one per category.
Go to Content > Site Modules > New and choose SE Storefront Products for Shopify. Assign it to a position and to the pages where it should appear.
| Option | Default | What it does |
|---|---|---|
| Category | All products | Only show products from one category. |
| Number of products | 4 | How many products to show (1 to 48). |
| Sort order | Featured | Featured, Newest, Price low to high, Price high to low, or Name A to Z. |
| Columns | 4 | Products per row, or products visible at once in the slider. |
| Links go to | Product page on this site | Where clicking a product goes: its page on your site, or straight to the product on Shopify. |
| Show sold out products | No | Whether sold-out products are included. |
| Layout | Grid | Grid or Slider (swipe or arrows). |
| Slide automatically | No | Slider only. Moves along every few seconds. |
| Seconds between slides | 5 | Slider only, when sliding automatically (2 to 30). |
| Show a button under the products | Yes | Shows a button below the products. |
| Button text | empty | The button's text. Empty shows "See all products". |
| Button link | empty | Where the button goes: a full address (https://…) or a path on your site (/shop). Empty links to the shop page. |
| Open the button link in | The same tab | Same tab or new tab. |
About the slider:
The Button link only accepts web addresses and paths on your own site. Anything else, such as a javascript: link, is ignored and the button links to the shop page instead.
Components > SE Storefront for Shopify opens the dashboard.
Shows whether a licence key is entered and confirmed, the plan, and the date updates run until.
| Button | What it does |
|---|---|
| Sync now | Refreshes all products from Shopify straight away and copies any new images. |
| Fetch images | Copies images that are still waiting, and retries ones that failed. |
| Save | Saves the hide and thumbnail choices in the product list. |
| Check licence | Shown when a licence key is entered but not confirmed. Checks it with the licence server. |
| Remove licence check | Shown when a licence is confirmed. Forgets the check and stops using the key for updates. |
| Options | Opens the component options. |
Every product from the store, with its image, name, categories and price.
Click Save after changing either.
The last 50 syncs, showing when each started, what triggered it (Automatic, Manual or Cron), whether it worked, how many products were found, and any message, such as which source was used and how many images were copied.
When a visitor opens the shop, a product page or a page with the module, and the stored products are older than Refresh every (minutes), a refresh runs. It runs after the page has been sent to the visitor, so nobody waits for Shopify. Only one refresh runs at a time, however many visitors arrive.
If a refresh fails, the shop keeps showing the last good copy, and the next automatic attempt waits 5 minutes.
On a brand new install with no products yet, the first refresh runs straight away so the shop isn't empty.
For quiet sites, or to keep images flowing on large stores, add a cron job:
https://example.com/index.php?option=com_seshopify&task=cron&key=YOURKEY
*/30 * * * * curl -s "https://example.com/index.php?option=com_seshopify&task=cron&key=YOURKEY" > /dev/null
The cron URL replies with plain text:
| Reply | Meaning |
|---|---|
OK 120 |
Sync worked: 120 products. |
OK 120 (images waiting: 35) |
Sync worked, and 35 images will be copied on the next runs. |
Forbidden |
The key is wrong, or no key is set. |
ERROR … |
The sync failed. The reason follows. |
Keep the key private. Anyone with the full URL can start a sync, although they can't change anything else.
Images are copied from Shopify to your site so visitors' browsers never contact Shopify. This helps with GDPR, particularly for visitors in the EU.
images/seshopify/ in your Joomla site./shop/blue-cotton-tee.The extension takes its fonts and text colours from your template, and uses neutral greys by default so it fits most sites.
The quickest way to match your brand is Options > Display:
Leave any of them empty to keep the default. The colours apply to the shop page, product pages and the products module.
For anything else, such as spacing, rounded corners or the muted text colour, add CSS variables to your template's custom CSS file (for Cassiopeia, media/templates/site/cassiopeia/css/user.css):
.sebc,
.sebc-module {
--sebc-radius: 6px; /* rounded corners */
--sebc-gap: 1.25rem; /* space between products */
--sebc-surface: rgba(0, 0, 0, 0.04); /* default image background */
--sebc-border: rgba(0, 0, 0, 0.12);
--sebc-muted: rgba(0, 0, 0, 0.6); /* prices and small print */
/* The colour options can also be set here instead: */
--sebc-accent: #1f2937;
--sebc-accent-contrast: #ffffff;
--sebc-pill: #f3f4f6; /* category and sort buttons */
--sebc-pill-text: #1f2937;
--sebc-pill-light: #1f2937; /* selected button */
--sebc-pill-active-text: #ffffff;
}
Colours chosen in the options take priority over the same variables in your CSS.
There is no free or Pro version: every feature works without a licence key. A valid licence key is what lets your site receive updates.
The key is also kept in step with Joomla's download key for the update site, so you don't need to enter it under System > Update Sites.
If the licence expires or is suspended, the dashboard shows Expired. Everything keeps working, but no new updates are offered until it is renewed. To move the licence to another site, click Remove licence check on the old site.
The extension is translated into English, Spanish, Portuguese, German, French, Italian and Dutch. It uses whichever language your site and administrator are set to.
To change any wording, use Joomla's language overrides (System > Manage > Language Overrides). Search for the text you want to change.
Set these in Options > Permissions.
| Permission | Allows |
|---|---|
| Configure ACL & Options | Changing the options, and checking or removing the licence |
| Access Administration Interface | Opening the dashboard, Sync now and Fetch images |
| Edit State | Hiding products and choosing thumbnails |
| Message or problem | What to do |
|---|---|
| "No store URL set" | Enter your Shopify store URL in Options. |
| "The store URL in the component options is not valid" | Use the full address including https://, with nothing after the domain. |
| "Shopify is rate limiting requests from this server (HTTP 429)" | Shopify is limiting requests from your server, which is common on shared hosting. Wait a few minutes and try again. If it keeps happening, add a Storefront API token: the API has its own limits. |
| "Shopify refused the request" or "returned a web page instead of JSON" | The store is probably password protected, or the public feed is turned off. Add a Storefront API token and set Product source to Storefront API only. |
| "Shopify rejected the Storefront API token" | Check the token was copied in full from the Headless channel, and hasn't been revoked. |
| "Storefront API not found (HTTP 404)" | Check the store URL, and set Storefront API version to a current version, for example the current year and month (YYYY-MM). |
| "The image folder images/seshopify could not be created or is not writable" | Make the images folder writable by the web server. Ask your host if unsure. |
| Images stay "waiting" | Press Fetch images a few times, or set up the cron job. |
| Some images "failed" | Press Fetch images to try again. Images that aren't JPG, PNG, GIF or WebP, or are over 8 MB, can't be copied. |
| Prices show the wrong currency symbol | Set Currency symbol in Options. |
| A product doesn't appear | Check it isn't ticked Hide on the dashboard, and that Show sold out products is on if it's sold out. |
| "Could not reach the licence server" | Your server must be able to make outbound HTTPS requests to se24media.co.uk. Ask your host. |
Go to System > Manage > Extensions, find SE Storefront for Shopify (type Package), and uninstall it. This removes the component, the module, the product tables and the copied images in images/seshopify/.
Email support@se24media.co.uk or visit https://se24media.co.uk.
Shopify is a trademark of Shopify Inc. This extension is not made or endorsed by Shopify.