Skip directly to page content
b13 GmbH

Hauptstätter Str. 59
70178 Stuttgart
Germany
+49 (0) 711 460 589 70 [email protected]
Graphic featuring a stylized link icon surrounded by overlapping shapes, set against a blue background with a gradient.

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.json requires ^8.2, ext_emconf.php declared 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.2 in Composer, 8.2.0-8.5.99 in ext_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-default always 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-default set 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.json allowed TYPO3 13.0 to 13.3 while ext_emconf.php required 13.4 and up, so composer would resolve installations that the extension manager then rejected. Both now say 13.4. composer.json also declares its PHP requirement (^8.2), which was missing.

Fixed

  • Page sets now render the x-default hreflang tag in the frontend. A page with a page set emitted every language- and region-specific hreflang tag but silently dropped the x-default fallback, 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 the x-default over. It is now appended as the last entry, pointing at the page flagged as x-default in the set (a hidden x-default page 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 from Documentation/Index.md; the README keeps the overview and links into it. The package also ships a LICENSE file (GPL-2.0-or-later, matching the composer metadata) and a SECURITY.md naming 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-default handling, the ModifyHrefLangMultisiteTagsEvent extension 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-info and typo3/cms-seo at ^13 || ^14).
  • searchFields on the tx_hreflang_multisite_model_page_set TCA—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.