tenbruggencate/maintenance
最新稳定版本:1.5.1
Composer 安装命令:
composer require tenbruggencate/maintenance
包简介
Shopware 6 maintenance page: branded, SEO-correct (HTTP 503 + Retry-After + noindex), admin-editable per sales channel.
README 文档
README
TenBruggencateMaintenance
![]()
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
Screenshots
Maintenance page — desktop |
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 defaultnoindex, followso multi-day maintenance windows don't poison your SERP rankings or stick "we'll be back" snippets in the index - Dynamic
Retry-Afterfrom a configurableexpectedBackAtdatetime (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
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.
| Field | Default | Purpose |
|---|---|---|
enabled | true | Kill switch — falls back to vendor page when off |
heading | (snippet) | Main heading |
lead | (snippet) | Sub-heading |
icon | ✨ | Emoji 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> |
metaDescription | (snippet) | SEO meta description |
autoReloadSeconds | 0 | Auto-reload interval in seconds; 0 disables |
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">so search engines don't index the maintenance copy.metaTitle/metaDescriptionremain admin-editable for social previews (the page is often shared on Twitter/Instagram during launch windows). - 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 — semantic headings (
h1/h2), visible focus states on the social CTA, colour contrast validated against the shipped palette. 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: seedocs/ACCESSIBILITY.mdfor the reproducer. - Security — all fields are escaped via Twig; HTML is not allowed in any admin field, preventing XSS via a compromised admin account.
- Uninstall —
plugin:uninstall --keep-user-datapreserves every per-SC maintenance copy config;plugin:uninstallwithout the flag drops allTenBruggencateMaintenance.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=falsefallthrough 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
expectedBackAtper sales channel before each maintenance window. Without it,Retry-Afterdefaults 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/metaDescriptionfields 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=falseis 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
| Shopware | PHP | Status |
|---|---|---|
| 6.7.x — tested against 6.7.8, 6.7.9 | 8.1, 8.2 | Stable |
| 6.6.x | — | Not supported |
| 6.5.x and earlier | — | Not supported |
Database
| Engine | Version | Notes |
|---|---|---|
| MySQL | 8.0+ | Primary target; JSON functions used for config-row manipulation in migrations |
| MariaDB | 10.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:
| Browser | Desktop | Mobile |
|---|---|---|
| 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
| Tool | Version | Scope |
|---|---|---|
| PHP | ≥ 8.1 | Runtime + test suite |
| Composer | 2.x | Dependency management |
| Node.js | ≥ 18 | Only needed if you edit SCSS and re-run the theme compile |
| Python | ≥ 3.9 | Only 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
- Email: guy@tenbruggencatedevelopment.nl
- Docs & news: tenbruggencatedevelopment.nl
- Source / issues: Bitbucket repo
- Security vulnerabilities: see
SECURITY.md— email first, no public issues, 72-hour acknowledgement SLA
License
tenbruggencate/maintenance 适用场景与选型建议
tenbruggencate/maintenance 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 17 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「seo」 「maintenance」 「launch」 「shopware」 「wcag」 「downtime」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 tenbruggencate/maintenance 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tenbruggencate/maintenance 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 tenbruggencate/maintenance 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
An enhanced drop-in replacement for Laravel's maintenance mode
Maintenance page plugin
Neos Content Repository Helper to rebirth orphaned nodes
Maintenance page, pretty and simple.
PHP SDK for Floodgate, a cloud service which provides a centralized management console for managing remote feature flags.
Help to manage meta data on Laravel Eloquent model
统计信息
- 总下载量: 17
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 42
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-04-26