
Documentation
TYPO3 Extension “Hreflang Multisite”
Version 2.3.1 (2026-09-30)
All notable changes to b13/hreflang-multisite are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.3.1–2026–09–30
Fixed
- The page-set editor’s heading had no space before the page name. It read
Page-Set bearbeiten"Produkte"on a German backend from the start, because the separator was a trailing space in the English label that the German translation does not carry—and TYPO3 v14 trims it, so the English heading lost it too. The space is now part of the heading rather than of the label. - The PHP compatibility window said three different things.
composer.jsonrequires^8.2,ext_emconf.phpdeclared no PHP constraint at all, and the documentation promised 8.3 through 8.5 because that was the CI matrix. All three now describe the same range:^8.2in Composer,8.2.0-8.5.99inext_emconf.php, and 8.2 added to the CI matrix so the documented claim is actually tested. Nothing is narrowed—an installation on PHP 8.2 was always allowed by Composer and now stays allowed.
Documentation
- Which pages belong in one set. The documentation explained how to build a set and never which pages to put in it. Editing now opens with the rule that pages are linked by shared purpose rather than shared wording, plus a working order for going through a tree.
- Freeing a page that is linked to the wrong one. The cause of a page missing from the selection wizard was documented, the cure was not. Includes the consequence the procedure hides: removing an entry can drop the old set below two pages, which deletes it.
x-defaultalways resolves to a root page’s default language. An alternative language version of the flagged root cannot be chosen, which matters when the fallback is meant to be a different market. Documents the setup this blocks, the way around it, and why the event is not one.- What a listener cannot do. The fallback is appended after every listener has run, so an
x-defaultset by a listener is overwritten. Worth knowing before relying on it. - Why record support is an event and not a feature. Three problems without a general answer: a record often has no counterpart, the counterpart is ambiguous, and record URLs are generated rather than stored.
- Keeping unrelated trees apart with
rootpage-sets. Separate groups are what stop an editor declaring a campaign page the equivalent of a product overview—nothing later in the chain flags it. - The documentation images moved into
Documentation/Images/. They were linked from a path that leaves the published directory, so both would have resolved to nothing on the website while looking correct in the repository. - Fourteen images across the documentation. The page tree, the hreflang field empty and filled, the page-set editor in four states, the overview module plain and filtered, the configuration check in both verdicts, and the two rootpage-sets groups as they are typed. The fourteenth, the open filter menu, is taken by hand—an open dropdown is drawn by the browser outside the page, where no screenshot tool reaches it. Each sits in the chapter that explains it and carries an alt text. The two previous images showed a development installation and are gone.
2.3.0–2026–08–17
Changed
- The composer constraints now state the compatibility window the extension actually supports.
composer.jsonallowed TYPO3 13.0 to 13.3 whileext_emconf.phprequired 13.4 and up, so composer would resolve installations that the extension manager then rejected. Both now say 13.4.composer.jsonalso declares its PHP requirement (^8.2), which was missing.
Fixed
- Page sets now render the
x-defaulthreflang tag in the frontend. A page with a page set emitted every language- and region-specifichreflangtag but silently dropped thex-defaultfallback, even though the backend requires, validates, and stores one. The frontend event listener rebuilt the tag set and overrode the core generator’s output without carrying thex-defaultover. It is now appended as the last entry, pointing at the page flagged asx-defaultin the set (a hiddenx-defaultpage is omitted, matching the core generator).
Documentation
- The README is now a documentation tree. Installation, configuration, page sets, editing, and events each have their own page under
Documentation/, reached fromDocumentation/Index.md; the README keeps the overview and links into it. The package also ships aLICENSEfile (GPL-2.0-or-later, matching the composer metadata) and aSECURITY.mdnaming the disclosure contact.
2.2.1–2026–08–11
Fixed
- Edit modal spacing on TYPO3 v14 (follow-up). The 2.2.0 fix targeted
.module-body, which is the whole modal shell in the iframe, so it had no visible effect. The horizontal padding now applies to the editor content wrapper (#page-set-form .table-fit), which actually insets the page set cards and controls.
2.2.0–2026–08–11
Added
- "Licensed for …" line in the backend module footer. The Info module footer now shows which b13 Marketplace project the installation is licensed for.
Fixed
- Edit modal spacing on TYPO3 v14. The page set editor modal rendered its form flush against the modal edges on v14 because the module body’s side padding was no longer applied there. Restored the horizontal padding, scoped to the modal so v13 is unaffected.
2.1.1–2026–08–07
Documentation
- README rewritten for the TYPO3 v13/v14 release: requirements (v13.4 LTS or v14, PHP 8.3–8.5), site set configuration (
b13/hreflang-multisite),x-defaulthandling, theModifyHrefLangMultisiteTagsEventextension point, and the DDEV/Playwright development setup. - Refer to the CI pipeline provider-neutrally instead of naming a specific service.
- Add this changelog file.
2.1.0–2026–08–03
Added
- Filter for incomplete hreflangs in the Info module. The hreflang overview can now be narrowed to pages whose hreflang configuration is missing or incomplete, so editors find pages that still need attention without scanning the whole tree.
2.0.0–2026–07–03
Rebuild of the extension for TYPO3 v13 and v14.
Changed
- Test suite migrated to a DDEV-provisioned TYPO3 instance with Playwright backend acceptance tests; CI runs a matrix across the supported PHP and TYPO3 versions (PHP 8.3–8.5 on TYPO3 v13.4 and v14).
- Prevent TYPO3 v14 deprecations across the codebase.
Removed
- Support for TYPO3 v12. The extension now requires TYPO3 v13.4 LTS or v14 (
typo3/cms-core,typo3/cms-infoandtypo3/cms-seoat^13 || ^14). searchFieldson thetx_hreflang_multisite_model_page_setTCA—the table is hidden (hideTable), so the setting had no effect and triggered a v14 deprecation.
1.x and earlier
The 1.x line supported TYPO3 v12 and v13 and introduced the site set for v13, the Info module overview, dependency injection in the suggest wizard, and a series of bugfixes around page and language retrieval. Itemized notes start with 2.0.0; for what the extension does today, see the documentation.
Changelog