tenbruggencate/maintenance-lite 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

tenbruggencate/maintenance-lite

Composer 安装命令:

composer require tenbruggencate/maintenance-lite

包简介

Shopware 6 maintenance page: branded, SEO-correct (HTTP 503 + Retry-After + noindex), admin-editable per sales channel.

README 文档

README

Ten Bruggencate Development

Maintenance Lite

Maintenance Lite

Configurable branded maintenance page for Shopware 6. Admin-editable heading, lead, launch-window badge, auto-reload, SEO meta. Works standalone — no dependency on any theme.

License: MIT · Shopware: 6.7.x · PHP: 8.1 / 8.2

🇬🇧 English · 🇳🇱 Nederlands · 🇩🇪 Deutsch

📖 More context: Why we built this · How it compares

Lite tier

This is the free Lite tier in the new Maintenance Lite/Pro split. Lite covers the must-have story for a single-storefront shop with a planned downtime or pre-launch window: branded HTTP 503 + Retry-After + noindex, per-sales-channel config, admin-editable copy.

A Maintenance Pro tier is on the roadmap for shops that need more than "branded 503". Planned Pro features include:

  • Scheduled maintenance windows — set a start + end timestamp; the page goes live and steps down automatically, no admin toggle race.
  • "Coming soon" mode with email signup — pre-launch landing variant that captures interested visitors and hands the list to your newsletter plugin.
  • Traffic allowlist for staff bypass — let logged-in admins, named IPs or a signed-cookie session keep browsing the storefront while everyone else sees the 503.
  • Webhook for status-page integration — emit start/end events to Statuspage / Better Stack / your own incident channel so the public status page flips in sync.
  • Multi-scenario banners — multiple named copy presets (planned migration, incident, pre-launch, holiday) so admins switch context without retyping the lead text.

Lite stays free, MIT-licensed, and fully featured for its scope — Pro adds capabilities, never gates v1.x behaviour.

Screenshots

Maintenance page on desktop — branded header, centered card with launch-window badge, sparkle icon, serif heading, lead paragraph, and social meta footer.

Maintenance page — desktop

Maintenance page on mobile — fully stacked card, badge above heading, lead text wraps cleanly, social meta below.

Maintenance page — mobile (responsive)

What it does

Shopware's default maintenance page is generic and unbranded. Rolling your own in the theme plugin couples "the store is down" copy to "the store theme", which is exactly when you can't rely on the theme. This plugin ships its own page that:

  • Survives theme failures — renders independently; if your theme has a SCSS compile error, maintenance still renders correctly
  • Admin-editable copy — heading, lead, icon emoji, launch-window badge, social CTA, SEO meta, all per sales channel
  • Returns HTTP 503 Service Unavailable + Retry-After (v1.3+) — Google's documented correct behaviour for planned downtime, paired with default noindex, follow so multi-day maintenance windows don't poison your SERP rankings or stick "we'll be back" snippets in the index
  • Dynamic Retry-After from a configurable expectedBackAt datetime (v1.4+) — admins set the moment the shop will be back; crawlers, CDNs, and uptime monitors get an accurate hint instead of guessing. Per sales channel, clamped to [60s, 24h]
  • Auto-reload — optional interval so visitors don't have to refresh manually when the window ends
  • Snippet fallbacks — nl-NL / en-GB / de-DE built in; if the admin leaves a field blank, the snippet provides a sensible default

Install

composer require tenbruggencate/maintenance-lite
bin/console plugin:refresh
bin/console plugin:install --activate TenBruggencateMaintenance
bin/console cache:clear

Configuration

Editable per sales channel from Settings → System → Plugins → Maintenance Page.

FieldDefaultPurpose
enabledtrueKill switch — falls back to vendor page when off
heading(snippet)Main heading
lead(snippet)Sub-heading
iconEmoji shown above the heading; leave blank to hide
launchWindow(empty)Badge text e.g. "Spring 2026"; hidden when empty
socialText(empty)Bottom CTA e.g. "Follow us on Instagram"; hidden when empty
metaTitle(snippet)SEO <title> + Open Graph / Twitter card title
metaDescription(snippet)SEO meta description + Open Graph / Twitter card description
autoReloadSeconds0Auto-reload interval in seconds; 0 disables, values 19 are raised to a 10s floor
expectedBackAt(empty)Datetime the shop is expected back; drives the Retry-After header (clamped 60s24h)
allowIndexingfalseLet search engines index the page; off (default) emits noindex, follow

Standards

  • Performance — no runtime JS, no external font fetch, no image dependencies. The page is ~3 KB + inline SCSS.
  • SEO — emits <meta name="robots" content="noindex, follow"> by default so a maintenance window doesn't get indexed; shops running a pre-launch "coming soon" campaign opt into indexing via the allowIndexing config. metaTitle / metaDescription populate the <title>, the meta description, and the Open Graph / Twitter card tags, so a maintenance URL shared on social during a launch shows a proper preview instead of a blank card.
  • GDPR — stateless. No cookies, no tracking, no data stored per visitor. Analytics (TenBruggencateAnalytics) and tracker scripts are disabled on this page by design. Full data-flow documentation in GDPR.md.
  • WCAG 2.2 AA — a single semantic h1, visible focus states on the footer legal links, colour contrast validated against the shipped palette, and the footer nav aria-label localised per storefront language. Screen readers announce the launch-window badge as regular text. Live axe-core audit is on-demand because it requires enabling maintenance mode on the whole stack: see docs/ACCESSIBILITY.md for the reproducer.
  • Security — all fields are escaped via Twig; HTML is not allowed in any admin field, preventing XSS via a compromised admin account.
  • Uninstallplugin:uninstall --keep-user-data preserves every per-SC maintenance copy config; plugin:uninstall without the flag drops all TenBruggencateMaintenance.config.* rows so the destructive path leaves no trace. No owned tables.

Production-readiness checklist

A deliberately short list of things to verify before enabling the plugin on a customer-facing storefront. Not legal cover — the MIT license already disclaims warranty — but practical guidance an experienced operator would want anyway.

  • [ ] Test on staging before flipping the kill-switch on prod. Especially the enabled=false fallthrough path (which renders Shopware's default maintenance page) — that branch only activates if a typo in your config breaks the override, and you do not want the first time you see Shopware's default page to be when your overridden one has crashed.
  • [ ] Set expectedBackAt per sales channel before each maintenance window. Without it, Retry-After defaults to 1 hour. With it, crawlers and uptime monitors get a precise hint and re-check the moment you're back instead of waiting out a stale default.
  • [ ] Confirm the metaTitle / metaDescription fields are filled for any sales channel where the maintenance URL might be shared on social during a launch window — these populate the Open Graph / Twitter card preview, which is otherwise blank.
  • [ ] Update your uptime-monitoring expectations. v1.3+ returns HTTP 503 (was 200 before). Your monitor must treat 503 during planned maintenance as expected; otherwise you'll page yourself.
  • [ ] enabled=false is a kill-switch, not a debugger — toggling it off in prod silently swaps to Shopware's default maintenance page. If something looks off in your branded copy, fix the copy; turning the plugin off won't tell you what was wrong.

Compatibility

Core platform

ShopwarePHPStatus
6.7.x — tested against 6.7.8, 6.7.98.1, 8.2Stable
6.6.xNot supported
6.5.x and earlierNot supported

Database

EngineVersionNotes
MySQL8.0+Primary target; JSON functions used for config-row manipulation in migrations
MariaDB10.11+Tested end-to-end; earlier versions lack some JSON operator support

Browsers (storefront)

Evergreen browsers only — the two most recent stable releases of each:

BrowserDesktopMobile
Chrome / Chromium
Firefox
Safari✅ (macOS)✅ (iOS 16+)
Edge

Internet Explorer and legacy Edge are not supported. The plugin emits no runtime JS (where applicable) so graceful degradation on older browsers usually still renders content, just without progressive enhancements.

Admin browsers

Same evergreen matrix — the Shopware admin is Vue-based and has its own compatibility baseline that this plugin doesn't extend or narrow.

Development

ToolVersionScope
PHP≥ 8.1Runtime + test suite
Composer2.xDependency management
Node.js≥ 18Only needed if you edit SCSS and re-run the theme compile
Python≥ 3.9Only needed for the repo's asset-pipeline scripts (scripts/*.py)

Accessibility

WCAG 2.2 level A + AA — see docs/ACCESSIBILITY.md for axe-core audit output and per-page violations.

What we test before each release

  • Full PHPUnit unit suite against PHP 8.1 + 8.2 (source-inspection tests don't need a kernel)
  • PHPStan level 8 + PHP-CS-Fixer (@PSR12 + @Symfony)
  • Composer validate on every plugin
  • Live-DB smoke tests (plugin install → activate → route render → uninstall cycle)
  • axe-core audit on the primary storefront surfaces (see ACCESSIBILITY.md)

Related plugins

Part of the TenBruggencate Suite — small, focused plugins that play well together:

  • MultiBrand — hostname-based brand resolver + per-brand --brand-* CSS tokens. When active, the maintenance page picks up per-host brand styling automatically.
  • LegalPages — Dutch / German / English legal page templates. Legal footer links render in the maintenance footer so visitors can still reach imprint / privacy during downtime.
  • Analytics — multi-backend analytics (Matomo / Plausible). Cookieless by default, GDPR-first.
  • NewsletterLite — lightweight GDPR-safe newsletter signup with opaque-token unsubscribe.

Support

License

MIT © Ten Bruggencate Development

More from Ten Bruggencate Development

Focused, privacy-first Shopware 6 plugins — free to start, upgrade when you grow:

  • NewsletterLite: GDPR-safe signup & subscriber-list management · Pro: campaigns, lifecycle automations, native-data segmentation
  • Legal PagesLite: localized legal-page templates · Pro: the compliance toolkit (maintained templates, cookie policy, accessibility statement)
  • Analytics — multi-backend (Matomo / Plausible), GDPR-first, cookieless-capable
  • Maintenance — a branded, SEO-correct maintenance page
  • Multi-Brand — serve multiple brands from one Shopware, by hostname
  • Product Encyclopedia — structured educational content pages linked to products
  • Seasons — scheduled theme-config variants

统计信息

  • 总下载量: 16
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-23

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固