Skip to content

Dynamische URLs: Schema nur noch einmal im @graph ausgeben - #19

Open
skerbis wants to merge 1 commit into
feature/dynamic-content-schemafrom
fix/dynamic-url-single-output
Open

Dynamische URLs: Schema nur noch einmal im @graph ausgeben#19
skerbis wants to merge 1 commit into
feature/dynamic-content-schemafrom
fix/dynamic-url-single-output

Conversation

@skerbis

@skerbis skerbis commented Sep 6, 2026

Copy link
Copy Markdown
Member

Hallo Oli,

Folge-PR zu #17 und #18. Dieser PR baut auf dem Branch von #18 auf (Basis ist feature/dynamic-content-schema), damit die Änderungen an generateDynamicSchema() nicht kollidieren. Nach dem Merge von #18 kann er auf main umgestellt werden; es ist nur ein Commit.

Problem

Auf dynamischen URLs erzeugte der OUTPUT_FILTER in boot.php zwei Ausgaben für denselben Datensatz: das Schema im @graph über JsonLdGenerator::generateForArticle()generateDynamicSchema() und zusätzlich ein separates <script> über generateDynamicJsonLd(). Details in #17.

Lösung

boot.php ruft nur noch jsonld_render() auf. Der Generator-Pfad ist damit die einzige Quelle: Auf einer dynamischen URL ersetzt das Mapping-Schema (z. B. Product) das WebPage-Schema im gemeinsamen @graph neben Organization, WebSite und BreadcrumbList.

Damit der Generator-Pfad nichts verliert, was bisher nur das separate Script konnte:

  • @id wird für alle Typen gesetzt (url + # + Typ in Kleinbuchstaben, bisher nur bei NewsArticle).
  • image, photo und logo werden von YForm-Dateinamen zu vollständigen Medien-URLs aufgelöst; dafür ist DynamicContent::mediaUrl() jetzt öffentlich und wird gemeinsam genutzt.
  • Das Debug-Overlay zeigt weiterhin URL-Profil-ID und Datensatz-ID (Tab „Dynamic URL - Product“), über einen internen Kontext aus generateDynamicSchema(), der in das Debug-Meta von getArticleOutput() gemerged wird.

generateDynamicJsonLd() bleibt als Funktion erhalten für Templates, in denen die automatische Ausgabe abgeschaltet ist; der Docblock weist darauf hin. README und CHANGELOG sind ergänzt.

Geprüft

  • rexstan Level 8 im Docker-Container: identisch zur Baseline, keine neuen Meldungen.
  • CLI-Skript mit gebootetem REDAXO ruft generateDynamicSchema() per Reflection mit statischen und strukturierten Mappings auf: Typ, @id, verschachteltes Offer und Debug-Kontext stimmen. Die Medien-URL konnte ich in der CLI nicht prüfen, da YRewrite dort nicht als Paket geladen ist; der Code entspricht dem bisherigen Verhalten aus DynamicJsonLd.php.
  • Nicht im Frontend getestet, da in meiner Instanz kein URL-Profil mit Datensätzen existiert.

Aufgefallen, nicht angefasst

getArticleUrl() liefert ohne YRewrite die URL aus rex_getUrl() mit &amp; im Query-String; im JSON-LD url wäre & korrekt. Betrifft nur den Fallback ohne YRewrite und war schon vorher so.

Viele Grüße
Thomas

🤖 Generated with Claude Code

Der OUTPUT_FILTER hat auf dynamischen URLs zwei Ausgaben erzeugt:
das Schema im @graph über JsonLdGenerator und zusätzlich ein
separates Script über generateDynamicJsonLd(). Jetzt ruft boot.php
nur noch jsonld_render() auf.

- generateDynamicSchema(): @id für alle Typen, image/photo/logo
  werden zu Medien-URLs aufgelöst, URL-Profil und Datensatz landen
  im Debug-Meta
- DynamicContent::mediaUrl() öffentlich, gemeinsam genutzt
- generateDynamicJsonLd() bleibt für manuellen Template-Einsatz

Fixes #17

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant