Überblick
Das Problem
Auf den meisten Contao-Websites stehen die Schriften in einer einzigen Zeile
im Seitenlayout oder im Theme-Stylesheet: ein Verweis auf
fonts.googleapis.com. Diese Zeile ist schnell eingefügt und
danach schwer wieder loszuwerden. Jeder einzelne Besucher lädt die Schriften
bei jedem Seitenaufruf von einem fremden Server, und das Aufräumen wird mit
jedem Theme-Update und jedem zusätzlichen Stylesheet aufwendiger.
- Der Browser des Besuchers baut eine Verbindung zu einem Drittanbieter auf. Dabei wird seine IP-Adresse übertragen, bevor er irgendetwas anklicken konnte — genau der Punkt, an dem Datenschutzprüfungen und Beschwerden ansetzen.
-
Niemand weiß genau, welche Schriften eingebunden sind.
Die Verweise stecken im Seitenlayout, in mitgelieferten Theme-Stylesheets,
in
@import-Zeilen fremder CSS-Dateien und manchmal in einem einzelnen Inhaltselement. Eine vollständige Liste hat niemand. -
Die Schriften von Hand lokal zu holen ist Fleißarbeit.
Das Google-Stylesheet aufrufen, jede
@font-face-Regel durchgehen, jede Datei einzeln herunterladen, die Datei-Endungen und dieunicode-range-Angaben je Zeichensatz-Ausschnitt korrekt übernehmen — für eine Schriftfamilie mit vier Schnitten sind das schnell dreißig Dateien. - Nach jedem Update kann die externe Zeile zurückkommen. Ein aktualisiertes Theme bringt sein eigenes Stylesheet mit, und der Verweis ist wieder da, ohne dass es jemandem auffällt.
-
Der erste sichtbare Text wartet auf eine fremde Verbindung.
Namensauflösung und Verbindungsaufbau zu zwei zusätzlichen Hosts
(
fonts.googleapis.comfür das Stylesheet,fonts.gstatic.comfür die Dateien) liegen vor dem Rendern. - Halb erledigt ist schlimmer als gar nicht. Wer die Schriften lokal ablegt, die alten Verweise aber stehen lässt, hat beides: lokale Dateien und weiterhin externe Aufrufe.
Am stärksten trifft das Betreiber, die eine Datenschutzerklärung unterschrieben haben und im Zweifel belegen müssen, was ihre Website tatsächlich lädt — und Agenturen, die dieselbe Aufräumarbeit an jeder betreuten Installation wiederholen.
Die Lösung
Das Grundprinzip in einem Satz: Local Fonts ruft die eigene Website so ab, wie ein Besucher sie sieht, sammelt daraus jede eingebundene Google-Fonts-Datei, legt sie im Contao-Uploadverzeichnis ab und liefert sie von dort aus.
Statt einer Liste, die jemand von Hand pflegen müsste, ist die Website selbst die Quelle: Was auf einer veröffentlichten Seite tatsächlich eingebunden ist, wird gefunden — auch dann, wenn der Verweis in einem fremden Stylesheet steckt. Die Arbeit läuft in drei getrennten Schritten, und jeder einzelne wird ausdrücklich angestoßen. Ein Scan schreibt noch nichts; erst der zweite Schritt legt Dateien an; erst der dritte verändert die ausgelieferte Seite.
| Aufgabe | Von Hand | Mit Local Fonts |
|---|---|---|
| Eingebundene Schriften finden | Layouts, Stylesheets und Inhaltselemente einzeln durchsehen | Ein Klick auf Website scannen; Ergebnis als Tabelle mit Schrift, Schnitten und Dateianzahl |
| Schriftdateien beschaffen | Google-Stylesheet öffnen, jede Datei einzeln speichern | Ein Klick auf Schriften jetzt lokal laden |
Zeichensatz-Ausschnitte (unicode-range) |
Leicht zu übersehen; ohne sie zeigt der Browser den falschen Ausschnitt | Wird je Datei mit übernommen |
@font-face-Stylesheet schreiben |
Von Hand, je Schnitt und Ausschnitt eine Regel | Wird beim Download vollständig erzeugt |
| Stylesheet in die Seite bringen | Layout bearbeiten, Cache leeren, im Frontend prüfen | Automatisch vor </head> — oder der fertige CSS-Code zum Selbsteinbinden |
| Alte externe Verweise loswerden | Suchen und Ersetzen in fremdem Theme-Code | Schaltbare Option Externe Google Fonts blockieren |
| Kontrolle nach einem Theme-Update | Fällt meistens aus | Erneuter Scan; der Vergleich steht in derselben Tabelle |
Den oben genannten Kosten stehen damit folgende Funktionen gegenüber:
- Unklare Bestandsaufnahme → Website scannen: ruft jede veröffentlichte reguläre Seite ab und wertet auch verlinkte fremde Stylesheets aus.
- Fleißarbeit beim Herunterladen → Schriften lokal laden: speichert jede Datei unter
files/localfonts/und erzeugt das Stylesheet. - Einbinden und Cache → automatische Einbindung oder fertiger CSS-Code zum Kopieren.
- Zurückgebliebene externe Verweise → Externe Google Fonts blockieren.
- Wiederkehrende Kontrolle → Konsolenbefehl
localfonts:scanfür einen geplanten Lauf.
Wann das Paket passt
| Situation | Einschätzung |
|---|---|
Contao-5-Website, die Google Fonts über fonts.googleapis.com einbindet |
Ja. Genau dieser Fall. |
| Mehrere betreute Installationen mit demselben Aufräumbedarf | Ja. Der Ablauf ist auf jeder Installation derselbe und lässt sich über die Konsole anstoßen. |
| Das Theme bringt eigene Stylesheets mit, die ihrerseits Google Fonts nachladen | Ja. Verlinkte, nicht von Google stammende Stylesheets werden mit ausgewertet und auf Wunsch durch bereinigte lokale Kopien ersetzt. |
| Die Schriften stammen von Adobe Fonts, einem anderen Anbieter oder liegen bereits selbst gehostet vor | Nein. Erkannt wird ausschließlich, was über den öffentlichen Google-Fonts-CSS-Dienst eingebunden ist. Für andere Anbieter tut das Paket nichts. |
| Die Installation ist von außen nicht erreichbar (reine lokale Entwicklung ohne echten Hostnamen) | Nein. Der Scan ruft die eigenen Seiten über HTTP ab und braucht dafür einen auflösbaren Hostnamen; außerdem verlangt die Aktivierung eine am Startpunkt der Website konfigurierte Domain. |
| Erwartet wird eine Auswahl, welche Schrift eingebunden werden soll | Nein. Das Paket übernimmt, was es findet — es ist kein Schriftverwalter, sondern ein Werkzeug zum Lokalisieren des Bestands. |
Teil 1 — Einrichtung
Der Weg von der leeren Installation bis zu lokal ausgelieferten Schriften:
- Voraussetzungen prüfen
- Vor der Installation: Sicherung und Entscheidungen
- Installation über den Contao Manager oder über Composer
- Installation überprüfen
- Lizenz aktivieren
- Erste Nutzung: scannen, laden, einbinden
Voraussetzungen
| Komponente | Anforderung |
|---|---|
| PHP | ^8.2 |
| Contao Core-Bundle | ^5.3 |
| Symfony (config, console, dependency-injection, http-client, http-foundation, http-kernel) | ^6.4 || ^7.0 |
PHP-Erweiterung ext-json | erforderlich |
PHP-Erweiterung ext-sodium | erforderlich |
| Ausgehende HTTPS-Verbindungen des Servers | zu fonts.googleapis.com, fonts.gstatic.com und www.v-t.one |
| Erreichbarkeit der eigenen Seiten | Der Server muss die eigenen veröffentlichten Seiten über ihre konfigurierte Domain abrufen können |
| Schreibrechte des Webservers | auf das Contao-Uploadverzeichnis (files/) und auf ein eigenes, privates Verzeichnis unterhalb von var/ |
| Contao-Konsole | ausführbar, falls der automatische Symlink in den Webroot nicht angelegt werden kann |
Zum privaten Verzeichnis unterhalb von var/: Es liegt
außerhalb des öffentlichen Webverzeichnisses und ist nicht über HTTP erreichbar.
Es muss für den Webserver beschreibbar sein und gehört in die Datensicherung.
Ein abgebrochener Schreibvorgang kann den gespeicherten Stand nicht beschädigen.
Vor der Installation
-
Sicherung anlegen. Datenbank und Dateisystem, insbesondere
das Verzeichnis
files/und das Seitenlayout, in dem die Schrifteinbindung steht. -
Am Startpunkt der Website eine Domain eintragen. Contao
Seitenstruktur → Startpunkt bearbeiten → Feld Domainname. Ohne
diesen Eintrag erzeugt ein Scan außerhalb eines Web-Zugriffs Adressen mit
dem Hostnamen
localhost, und die Lizenzaktivierung findet keine Domain, an die sie gebunden werden könnte. - Lizenzschlüssel bereithalten. Local Fonts ist kostenlos, setzt aber eine aktivierte Lizenz voraus. Der Schlüssel wird unter v-t.one ausgestellt.
- Entscheiden, wie eingebunden werden soll. Automatisch (das Stylesheet wird in jede Seite eingefügt) oder selbst (der fertige CSS-Code wird kopiert). Die Einstellung ist jederzeit umschaltbar, siehe Schritt 3.
- Wenn möglich zuerst auf einer Testinstanz durchspielen. Besonders dann, wenn ein gekauftes Theme eigene Stylesheets mitbringt: das Blockieren externer Verweise greift in die ausgelieferte Seite ein.
Installation über den Contao Manager
- Contao Manager öffnen und anmelden.
- Bereich Entdecken öffnen. Neue Pakete werden immer dort gesucht und hinzugefügt; der Bereich Pakete daneben zeigt unter Installierte Pakete nur, was bereits vorhanden ist. Entdecken ist zugleich die Startansicht.
-
Über Pakete suchen nach
vtinnovations/localfontssuchen und beim Treffer Paket hinzufügen wählen. - Änderungen anwenden. Der Contao Manager weist darauf hin: „Dieses Paket wird installiert, wenn du die Änderungen anwendest." Danach installiert er das Paket und aktualisiert den Autoloader.
- Bereich Systemwartung → Datenbank-Migrationen und -Backups → Datenbank prüfen; die angezeigten Datenbank-Änderungen bestätigen. Local Fonts legt keine eigenen Tabellen an — in aller Regel wird hier nichts gemeldet.
- Unter Systemwartung den Anwendungs-Cache leeren (in der Navigation auch als Cache erneuern).
Zur Anrede: Der Contao Manager duzt („…wenn du die Änderungen anwendest."). Die Zeile ist hier wörtlich zitiert, damit Sie sie auf dem Bildschirm wiederfinden.
Installation über Composer
Die Alternative ohne Contao Manager, im Projektverzeichnis ausgeführt:
composer require vtinnovations/localfonts
vendor/bin/contao-console cache:clear
vendor/bin/contao-console contao:symlinks
In einer Contao Managed Edition registriert das Paket seine Bundle-Klasse und
seine Routen selbst; es ist kein Eintrag im Kernel nötig. In einem klassischen
Symfony-Setup ohne Contao Manager muss das Bundle wie jedes andere
Symfony-Bundle im Kernel registriert werden. In einer Managed Edition erledigt
auch composer contao:setup das Leeren des Caches und das Anlegen
der Symlinks mit.
Aktualisieren:
composer update vtinnovations/localfonts --with-dependencies
vendor/bin/contao-console cache:clear
Nicht per ZIP-Ersetzung aktualisieren. Das Paket ist ein
Composer-Paket und gehört unter vendor/. Ein Verzeichnis von
Hand zu überschreiben lässt den Autoloader auf dem alten Stand und führt zu
schwer auffindbaren Fehlern.
Installation überprüfen
-
Auf der Konsole prüfen, ob der Befehl des Pakets registriert ist:
vendor/bin/contao-console list localfontsIn der Ausgabe muss
localfonts:scanerscheinen. - Im Contao-Backend unter Layout muss der Eintrag Local Fonts stehen. Der Untertitel in der Modulliste lautet „Google Fonts lokal speichern und automatisch einbinden (V&T Innovations)."
- Unter System → Einstellungen muss ganz oben die Gruppe V-T.ONE Licence management stehen, darin der Abschnitt Local Fonts. Diese Seite ist Administratoren vorbehalten.
Die Gruppenüberschrift ist auch im deutschen Backend englisch: „V-T.ONE Licence management". Das ist so vorgesehen — es ist die gemeinsame Gruppe, in der alle V-T.ONE-Pakete ihren Abschnitt ablegen. Der Abschnitt selbst trägt den Produktnamen.
Lizenz aktivieren
Local Fonts folgt dem Modell Lifetime Free: Das Produkt ist kostenlos, verlangt aber in jedem Fall eine aktivierte Lizenz. Es gibt genau eine Stufe, keine Testphase, keine kostenpflichtige Zusatzstufe und keinen anonymen Nutzungsmodus.
Ohne aktivierte Lizenz verhält sich die Website exakt so, als wäre das Paket nicht installiert. Es wird nichts in die ausgelieferte Seite eingefügt, nichts entfernt und nichts heruntergeladen. Das Backend-Modul zeigt dann nur den Hinweis: „Local Fonts benötigt eine gültige, aktivierte V&T-Innovations-Lizenz. Aktivieren Sie sie unter System › Einstellungen › Local Fonts Lizenzverwaltung. Ohne Aktivierung werden weder Schriften geladen noch im Frontend eingebunden."
So aktivieren Sie die Lizenz
- Als Administrator im Contao-Backend anmelden. Ein normales Redakteurskonto kann die Lizenz weder einsehen noch setzen.
- System → Einstellungen öffnen.
- Ganz oben in der Gruppe V-T.ONE Licence management den Abschnitt Local Fonts aufsuchen.
- Solange keine Lizenz aktiv ist, steht dort in Rot: „Nicht lizenziert. Es wird keine geschützte Funktion ausgeführt, die Website bleibt unverändert."
- Den Schlüssel in das Feld Lizenzschlüssel eintragen. Der Platzhalter im Feld zeigt die erwartete Form:
XXXXX-XXXXX-XXXXX-XXXXX. - Auf Lizenz prüfen und aktivieren klicken. Der Server nimmt dafür selbst Verbindung auf — nicht Ihr Browser; eine Firewall, die ausgehende HTTPS-Verbindungen unterbindet, verhindert die Aktivierung.
- Die Seite lädt neu und zeigt oben die Rückmeldung. Bei Erfolg: „Lizenz aktiviert."
- Der Abschnitt zeigt jetzt in Grün: „Lifetime-Free-Lizenz aktiv. Alle Funktionen freigeschaltet." Darunter steht eine Zeile mit Schlüssel:, Paket:, Gültig ab:, Gültig bis: (bei diesem Produkt „unbegrenzt") und Zuletzt geprüft:.
- Layout → Local Fonts öffnen. Statt des Hinweises stehen dort nun die drei Arbeitsschritte.
Der hinterlegte Schlüssel wird in dieser Zeile nie vollständig angezeigt. Er dient dort nur dazu, eine hinterlegte Lizenz von einer anderen zu unterscheiden.
Domainbindung
Die Lizenz gilt für die Domains dieser Installation, und zwar
hostnamengenau. Die vertrauenswürdigen Domains ergeben sich aus
den Startpunkten der Seitenstruktur: aus jedem Feld Domainname wird
genau dieser Hostname übernommen. Es wird nichts verkürzt und nichts erweitert —
example.com und www.example.com sind zwei
verschiedene Identitäten, ebenso jede Subdomain. Platzhalter sind nicht möglich.
Ist an keinem Startpunkt ein Domainname eingetragen, meldet die Aktivierung: „Für diese Installation ist keine vertrauenswürdige Domain konfiguriert." Tragen Sie den Domainnamen am Startpunkt ein und wiederholen Sie die Aktivierung.
Beim Umzug auf eine andere Domain bestätigt die zuvor aktivierte Lizenz die neue Adresse nicht. Das Backend zeigt dann denselben Zustand wie „nicht lizenziert" an. Aktivieren Sie die Lizenz nach dem Umzug erneut.
Erste Nutzung
Alles Weitere spielt sich im Backend-Modul Layout → Local Fonts ab. Es führt durch drei nummerierte Schritte, die aufeinander aufbauen: Schritt 2 bleibt gesperrt, bis Schritt 1 ein Ergebnis geliefert hat, Schritt 3, bis Schritt 2 Dateien angelegt hat.
- Schritt 1: Website scannen. Ermittelt, welche Google Fonts eingebunden sind. Es wird noch nichts geschrieben. → Details
- Schritt 2: Schriften lokal laden. Lädt die gefundenen Dateien herunter und erzeugt das Stylesheet. → Details
- Schritt 3: Einbinden. Legt fest, wie das Stylesheet in die Seite kommt, und blockiert auf Wunsch verbliebene externe Verweise. → Details
Jeder dieser Schritte verlangt einen ausdrücklichen Klick. Im Hintergrund wird nie in die Website geschrieben.
Teil 2 — Funktionen im Detail
Alle hier beschriebenen Funktionen setzen eine aktivierte Lizenz voraus. Da es nur eine Lizenzstufe gibt, ist keine Funktion gegenüber einer anderen eingeschränkt: entweder steht alles zur Verfügung oder nichts.
Schritt 1: Website scannen
Der Scan ruft jede veröffentlichte reguläre Seite der Installation über ihre
eigene Adresse ab und sucht in der ausgelieferten Seite nach Verweisen auf den
Google-Fonts-CSS-Dienst. Zusätzlich lädt er jedes per <link>
eingebundene Stylesheet, das nicht von Google stammt, und sucht auch darin.
Anschließend holt er die gefundenen Google-Stylesheets und liest daraus die
einzelnen Schriftdateien aus.
Wo: Backend → Layout → Local Fonts → Abschnitt „Schritt 1: Website scannen". Der Abschnitt trägt den Hinweistext: „Durchsucht alle veröffentlichten Seiten nach Google Fonts. Es werden noch keine Dateien geschrieben."
So führen Sie einen Scan durch
- Im Backend Layout → Local Fonts öffnen.
- Prüfen, ob der Seiten-Cache aktuelle Inhalte enthält. Wurde zuvor Externe Google Fonts blockieren eingeschaltet, leeren Sie vorher den Seiten-Cache — sonst findet der Scan in bereits zwischengespeicherten Seiten nichts mehr (siehe Hinweis unten).
- Bei Abschnitt 1 auf Website scannen klicken. Wurde bereits einmal gescannt, heißt die Schaltfläche Erneut scannen.
- Den Reiter geöffnet lassen. Der Scan läuft im selben Zugriff ab: Er ruft nacheinander jede veröffentlichte Seite ab und zusätzlich jedes verlinkte Stylesheet. Bei einer Website mit vielen Seiten kann das deutlich dauern. Brechen Sie nicht ab und laden Sie die Seite nicht neu.
- Nach dem Durchlauf lädt das Modul neu und zeigt eine Zusammenfassung in der Form: „Letzter Scan: … | Seiten: … | Gefundene Schriften: …".
- Darunter steht die Ergebnistabelle mit den Spalten Schrift, Schnitte und Dateien. Ein Schnitt wird als Kombination aus Stil und Strichstärke angegeben, etwa
normal-400oderitalic-700. - Meldungen aus dem Durchlauf erscheinen als Liste über den Schritten. Gleichen Sie sie mit der Fehlerbehebung ab, bevor Sie weitergehen.
- Stimmt das Ergebnis, weiter mit Schritt 2.
Was der Scan berücksichtigt:
| Quelle | Wird ausgewertet |
|---|---|
| Veröffentlichte Seiten vom Typ „Reguläre Seite" | Ja, jede einzelne. Zeitgesteuerte Seiten nur innerhalb ihres Veröffentlichungszeitraums. |
| Seiten anderer Typen (Weiterleitung, Startpunkt, Fehlerseite …) | Nein. |
| Unveröffentlichte Seiten | Nein. |
| Verweise auf den Google-Fonts-CSS-Dienst direkt in der Seite | Ja. |
Per <link rel="stylesheet"> eingebundene eigene oder fremde Stylesheets | Ja — sie werden geladen und ebenfalls durchsucht. |
| Schriften anderer Anbieter oder bereits selbst gehostete Schriften | Nein. |
Der Scan sieht die Seite ungefiltert. Seine eigenen Abrufe sind gekennzeichnet, und die Eingriffe des Pakets bleiben bei diesen Abrufen aus. Ein erneuter Scan findet die externen Verweise daher auch dann noch, wenn Externe Google Fonts blockieren eingeschaltet ist — vorausgesetzt, die Seite wird tatsächlich neu erzeugt und nicht aus dem Seiten-Cache ausgeliefert.
Ein Scan überschreibt das vorherige Ergebnis vollständig. Findet ein erneuter Scan nichts — etwa weil die Seiten aus dem Cache kommen —, ist die Liste der gefundenen Schriften anschließend leer. Bereits heruntergeladene Dateien bleiben davon unberührt; nur die Grundlage für einen weiteren Download fehlt dann.
Schritt 2: Schriften lokal laden
Dieser Schritt lädt jede beim Scan gefundene Schriftdatei herunter, legt sie
unter files/localfonts/<schrift>/ ab und erzeugt daraus das
Stylesheet files/localfonts/localfonts.css. Die Dateien liegen
damit im Contao-Uploadverzeichnis und erscheinen in der Dateiverwaltung.
Wo: Backend → Layout → Local Fonts →
Abschnitt „Schritt 2: Schriften lokal laden". Hinweistext: „Speichert die
Schriftdateien in files/localfonts/ und erzeugt das Stylesheet."
Solange kein Scan gelaufen ist, steht dort nur: „Zuerst Schritt 1 ausführen."
So laden Sie die Schriften herunter
- Schritt 1 ausführen, sofern noch nicht geschehen.
- Bei Abschnitt 2 steht dann: „Noch nichts heruntergeladen. n Schrift(en) stehen bereit."
- Auf Schriften jetzt lokal laden klicken.
- Den Reiter geöffnet lassen. Auch dieser Vorgang läuft im selben Zugriff ab und lädt jede Schriftdatei einzeln herunter. Bei mehreren Schriftfamilien mit vielen Zeichensatz-Ausschnitten sind das leicht mehrere Dutzend Dateien.
- Nach dem Durchlauf zeigt der Abschnitt: „Lokal installiert: n Schrift(en), m Datei(en)" sowie „Stand: …" mit dem Zeitpunkt.
- Darunter steht dieselbe Tabelle wie in Schritt 1, jetzt aber mit der Anzahl der tatsächlich auf der Festplatte liegenden Dateien je Schrift. Nur erfolgreich geschriebene Dateien werden gezählt — ein fehlgeschlagener Download erscheint als eigene Meldung in der Liste über den Schritten.
- Die Schaltflächen heißen jetzt Erneut laden / aktualisieren und Lokale Schriften entfernen.
- Prüfen, ob die Dateien ausgeliefert werden:
/files/localfonts/localfonts.cssim Browser aufrufen. Erscheint eine 404-Meldung, fehlt der Symlink in den Webroot — siehe Fehlerbehebung. - Weiter mit Schritt 3.
| Verhalten | Erläuterung |
|---|---|
| Bereits vorhandene Dateien | werden nicht erneut geladen. Erneut laden / aktualisieren holt nur, was noch fehlt, und erzeugt das Stylesheet neu. |
| Dateinamen | enthalten Schrift, Stil, Strichstärke und eine kurze, aus der Quelladresse abgeleitete Kennung. Ändert Google die Quelladresse, entsteht eine neue Datei; die alte bleibt liegen. |
| Zeichensatz-Ausschnitte | Google liefert je Ausschnitt (lateinisch, kyrillisch, vietnamesisch …) eine eigene Datei. Alle werden übernommen, jede mit ihrer unicode-range. |
| Contao-Dateiverwaltung | Die angelegten Dateien werden bei Contao angemeldet und erscheinen in der Dateiverwaltung unter files/localfonts/. |
| Webroot-Verknüpfung | Das Paket markiert das Verzeichnis als öffentlich und legt die Verknüpfung in den Webroot selbst an, damit die Dateien sofort ausgeliefert werden. |
Lokale Schriften entfernen
Setzt die Installation auf den Ausgangszustand zurück: Das gesamte Verzeichnis
files/localfonts/ wird gelöscht — die heruntergeladenen
Schriftdateien, das erzeugte Stylesheet und die bereinigten CSS-Kopien.
Diese Aktion fragt nicht nach. Ein Klick auf
Lokale Schriften entfernen löscht sofort und ohne Rückfrage. Es gibt
keinen Rückgängig-Schritt; die Dateien müssen bei Bedarf über einen neuen
Scan und Download wieder beschafft werden. Haben Sie eigene Dateien in
files/localfonts/ abgelegt, verschieben Sie sie vorher.
So entfernen Sie die lokalen Schriften
- Falls Externe Google Fonts blockieren aktiv ist: zuerst ausschalten. Sonst sind nach dem Löschen weder die lokalen noch die externen Schriften vorhanden.
- Falls Sie den CSS-Code selbst in Ihr Layout eingepflegt haben: diesen Block dort ebenfalls entfernen, er zeigt anschließend ins Leere.
- Im Backend Layout → Local Fonts öffnen.
- Bei Abschnitt 2 auf Lokale Schriften entfernen klicken.
- Das Modul lädt neu und meldet: „Lokale Schriften wurden entfernt." Die Tabelle der installierten Schriften ist leer, Schritt 3 zeigt wieder „Zuerst Schritt 2 ausführen."
- Den Seiten-Cache leeren, damit im Frontend keine zwischengespeicherte Seite mehr auf das gelöschte Stylesheet verweist.
- Falls die Contao-Dateiverwaltung noch Einträge zu den gelöschten Dateien anzeigt: dort eine Synchronisation des Dateisystems ausführen. Das Paket meldet gelöschte Dateien nicht selbst wieder ab.
Das Ergebnis des letzten Scans bleibt erhalten. Sie können also direkt wieder Schriften jetzt lokal laden auslösen, ohne erneut zu scannen.
Schritt 3: Automatisch einbinden
Im automatischen Modus fügt das Paket den Verweis auf das erzeugte Stylesheet
selbst in jede ausgelieferte Seite ein, unmittelbar vor </head>.
Am Seitenlayout ist nichts zu ändern. Das ist die Voreinstellung.
Wo: Backend → Layout → Local Fonts → Abschnitt „Schritt 3: Einbinden". Hinweistext: „Legt fest, wie das lokale Stylesheet in die Seite kommt." Solange nichts heruntergeladen wurde, steht dort nur „Zuerst Schritt 2 ausführen."
So stellen Sie den automatischen Modus ein
- Im Backend Layout → Local Fonts öffnen und zu Abschnitt 3 gehen.
- Die Zeile Aktuell: nennt den geltenden Modus. Im automatischen Modus steht dort: „automatisch — das Stylesheet wird in jede Seite eingebunden."
- Steht dort stattdessen „manuell — es wird nichts automatisch eingebunden.", auf Automatisch einbinden klicken.
- Das Modul lädt neu; die Zeile Aktuell: zeigt den neuen Modus.
- Seiten-Cache leeren.
- Eine Frontend-Seite aufrufen und im Quelltext prüfen, ob vor
</head>die Zeile<link rel="stylesheet" href="/files/localfonts/localfonts.css">steht.
| Bedingung | Verhalten |
|---|---|
| Das erzeugte Stylesheet existiert nicht | Es wird nichts eingefügt. Führen Sie Schritt 2 aus. |
Die Seite verweist bereits auf /files/localfonts/localfonts.css | Es wird kein zweiter Verweis eingefügt. |
Die Seite enthält kein </head> | Der Verweis wird an den Anfang der Ausgabe gestellt. |
| Keine aktive Lizenz | Es wird nichts eingefügt; die Ausgabe bleibt unverändert. |
| Backend-Seiten | bleiben unverändert. |
Solange das Paket auf eine Seite einwirkt, trägt die Antwort zusätzlich den
Kopfzeilen-Eintrag X-Local-Fonts: active und die Seite einen
HTML-Kommentar <!-- Local Fonts active --> im Kopfbereich.
Beides ist als schnelle Kontrolle gedacht, ob die Einbindung greift.
Schritt 3: Selbst einbinden
Im manuellen Modus fügt das Paket nichts automatisch ein. Stattdessen zeigt das Backend den vollständigen erzeugten CSS-Code an, den Sie selbst an die gewünschte Stelle kopieren. Das ist der Weg, wenn die Einbindungsreihenfolge im Layout eine Rolle spielt oder wenn die Schriftregeln in ein eigenes Stylesheet gehören.
So binden Sie den CSS-Code selbst ein
- Im Backend Layout → Local Fonts öffnen und zu Abschnitt 3 gehen.
- Auf Selbst einbinden (CSS kopieren) klicken.
-
Das Modul lädt neu. Die Zeile Aktuell: zeigt: „manuell — es wird
nichts automatisch eingebunden." Darunter erscheint ein Textfeld mit dem
erzeugten CSS und darüber die Anweisung: „CSS-Code zum Einpflegen
— komplett kopieren, z. B. in das eigene Stylesheet oder im Layout unter
„Zusätzliche <head>-Tags" in einen
<style>-Block. Die Schriftdateien liegen bereits lokal unterfiles/localfonts/:" - In das Textfeld klicken — der gesamte Inhalt wird dadurch markiert — und kopieren.
-
Den Code einfügen: entweder in Ihr eigenes Stylesheet oder in Contao unter
Layout → Seitenlayouts → Layout bearbeiten → Feld
Zusätzliche
<head>-Tags, dort umschlossen von<style>und</style>. -
Wer lieber verlinkt als kopiert, verwendet stattdessen den unter dem Textfeld
genannten Pfad: „Wer lieber verlinkt statt kopiert, bindet stattdessen
/files/localfonts/localfonts.cssein." - Seiten-Cache leeren und eine Frontend-Seite prüfen.
Steht statt des Codes eine rote Meldung — „Das generierte Stylesheet wurde nicht gefunden. Bitte Schritt 2 erneut ausführen." —, dann existiert die Datei nicht (mehr). Führen Sie Schritt 2 erneut aus.
Zurück zum automatischen Modus geht es jederzeit über Automatisch einbinden. Denken Sie daran, den selbst eingefügten Code danach wieder zu entfernen, sonst sind die Regeln doppelt vorhanden.
Externe Google Fonts blockieren
Diese Option räumt auf, was nach dem Lokalisieren noch übrig ist. Ist sie aktiv,
entfernt das Paket aus jeder ausgelieferten Seite die verbliebenen Verweise auf
fonts.googleapis.com und fonts.gstatic.com —
<link>-Elemente, @import-Zeilen und einzelne
Adressen im Quelltext. Zusätzlich werden eigene oder fremde Stylesheets, die
ihrerseits solche Verweise enthalten, durch bereinigte lokale Kopien ersetzt.
Voreinstellung: inaktiv. Der Zustand steht im Modul als
„Externe Google Fonts blockieren: aktiv" bzw. „… inaktiv", mit
der Erläuterung: „Entfernt verbleibende Verweise auf
fonts.googleapis.com und fonts.gstatic.com aus dem
Frontend."
So schalten Sie das Blockieren ein
- Schritt 2 muss abgeschlossen sein — es müssen lokale Schriften vorhanden sein.
- Sicherstellen, dass die Einbindung wirklich greift: entweder steht der Modus auf automatisch, oder Sie haben den CSS-Code bereits selbst eingepflegt.
- Im Backend Layout → Local Fonts öffnen, Abschnitt 3.
- Auf Externe Google Fonts blockieren klicken.
- Das Modul lädt neu; die Zeile zeigt nun „aktiv", und die Schaltfläche heißt Blockieren ausschalten.
- Seiten-Cache leeren.
- Eine Frontend-Seite aufrufen und im Quelltext nach
fonts.googleapis.comundfonts.gstatic.comsuchen. Es darf kein Treffer mehr übrig sein. - Die Darstellung prüfen: Die Schriften müssen unverändert aussehen. Tun sie das nicht, ist das lokale Stylesheet nicht eingebunden — Modus prüfen.
Blockieren im manuellen Modus ohne eingebundenen Code lässt die Seite ohne Schriften zurück. Genau davor warnt das Modul selbst, sobald beides zusammentrifft: „Achtung: Externe Google Fonts werden blockiert, das lokale Stylesheet aber nicht automatisch eingebunden. Ohne den Code oben fehlen im Frontend die Schriften."
Vor jedem erneuten Scan den Seiten-Cache leeren. Wird eine Seite aus dem Cache ausgeliefert, wurde sie bereits bereinigt — der Scan sieht dann keine externen Verweise mehr und liefert ein leeres Ergebnis.
Scan und Download über die Konsole
Derselbe Ablauf ohne Backend, etwa für einen geplanten Lauf oder ein Deployment-Skript. Der Befehl macht dasselbe wie die Schaltflächen in Schritt 1 und Schritt 2.
So führen Sie den Scan über die Konsole aus
-
Im Projektverzeichnis nur scannen, ohne etwas zu schreiben:
vendor/bin/contao-console localfonts:scan - Bei Erfolg meldet der Befehl: „Local-Fonts-Scan abgeschlossen." und weist auf den nächsten Schritt hin: „Erneut mit --download ausführen, um die Schriften lokal zu speichern."
-
Scannen und im selben Lauf herunterladen:
vendor/bin/contao-console localfonts:scan --downloadDie Kurzform lautet
-d. - Abschließende Meldung: „Schriften heruntergeladen und Stylesheet erzeugt."
- Das Ergebnis anschließend im Backend unter Layout → Local Fonts kontrollieren — Zusammenfassung und etwaige Meldungen stehen dort genauso wie nach einem Lauf über die Schaltflächen.
Auf der Konsole gibt es keinen Web-Zugriff, aus dem sich die Domain
ableiten ließe. Ist am Startpunkt der Website kein Domainname
eingetragen, werden die Seitenadressen mit dem Hostnamen
localhost erzeugt, und der Scan ruft die falsche Website ab oder
läuft ins Leere. Das Modul meldet das ausdrücklich — siehe
Fehlerbehebung. Tragen Sie den
Domainnamen am Startpunkt ein, bevor Sie den Befehl per Cron planen.
Ohne aktivierte Lizenz bricht der Befehl mit dem Rückgabewert für einen Fehler ab und meldet: „Dieses Plugin benötigt eine gültige, aktivierte V&T-Innovations-Lizenz. Erhältlich unter https://www.v-t.one."
Lizenz verwalten
Die Lizenzverwaltung liegt unter System → Einstellungen, ganz oben in der Gruppe V-T.ONE Licence management, Abschnitt Local Fonts. Sie steht ausschließlich Administratoren offen. Die erstmalige Aktivierung ist in Teil 1 beschrieben; hier stehen die beiden weiteren Aktionen.
| Schaltfläche | Wann sichtbar | Wirkung |
|---|---|---|
| Lizenz prüfen und aktivieren | immer | Aktiviert den im Feld Lizenzschlüssel eingetragenen Schlüssel für diese Installation. |
| Lizenz aktualisieren | nur bei aktiver Lizenz | Gleicht den hinterlegten Stand erneut ab, ohne dass der Schlüssel neu eingegeben werden muss. |
| Lizenz entfernen | nur bei aktiver Lizenz | Setzt die Installation auf den nicht lizenzierten Zustand zurück. Fragt vorher nach: „Aktivierte Lizenz entfernen?" |
So aktualisieren Sie eine aktive Lizenz
- Als Administrator anmelden und System → Einstellungen öffnen.
- Im Abschnitt Local Fonts auf Lizenz aktualisieren klicken. Das Feld Lizenzschlüssel bleibt dabei leer.
- Die Seite lädt neu und zeigt die Rückmeldung oben an.
- In der Detailzeile prüfen, ob Zuletzt geprüft: nun den aktuellen Zeitpunkt nennt.
Darüber hinaus wird eine aktive Lizenz über den Contao-Cron einmal täglich von selbst erneut abgeglichen. Es ist also im Normalbetrieb nichts zu tun.
So entfernen Sie die Lizenz
- Als Administrator anmelden und System → Einstellungen öffnen.
- Im Abschnitt Local Fonts auf Lizenz entfernen klicken.
- Die Rückfrage „Aktivierte Lizenz entfernen?" bestätigen.
- Die Rückmeldung lautet: „Lizenz entfernt. Local Fonts wurde auf das nicht lizenzierte Standardverhalten zurückgesetzt."
Das Entfernen löscht keine Inhalte. Weder Seiten noch Layouts
noch die bereits heruntergeladenen Schriftdateien werden angetastet. Die
Dateien bleiben unter files/localfonts/ liegen; sie werden nur
nicht mehr eingebunden und nicht mehr über das Backend-Modul verwaltet.
Haben Sie den CSS-Code selbst ins Layout eingepflegt, wirkt dieser weiterhin —
dort entfernt das Paket nichts.
Ist der Lizenzserver nicht erreichbar, bleibt der bisherige Stand unverändert bestehen. Die Meldung lautet dann: „Der Lizenzserver ist vorübergehend nicht erreichbar. Der vorherige Lizenzstatus wurde beibehalten." Eine aktive Lizenz geht dadurch nicht verloren.
Teil 3 — Für Entwickler
Konsolenbefehl
Das Paket registriert einen für den Betrieb bestimmten Konsolenbefehl.
| Befehl | Beschreibung |
|---|---|
localfonts:scan |
„Scans the website for Google Fonts and stores them locally." — Beschreibung und Optionstexte sind englisch, weil sie beim Registrieren des Befehls feststehen, also bevor eine Sprachdatei geladen werden kann. |
| Option | Kurzform | Voreinstellung | Wirkung |
|---|---|---|---|
--download |
-d |
aus | „Also download the detected fonts and generate the stylesheet (same as the backend button)." — ohne die Option wird nur gescannt. |
Rückgabewerte: Erfolg bei abgeschlossenem Lauf, Fehler ohne aktive Lizenz.
Verzeichnisse und Zustandsdatei
| Pfad | Inhalt |
|---|---|
files/localfonts/<schrift>/ |
Heruntergeladene Schriftdateien, eine je Schnitt und Zeichensatz-Ausschnitt. |
files/localfonts/localfonts.css |
Das erzeugte Stylesheet. |
files/localfonts/cleaned-css/ |
Bereinigte Kopien fremder Stylesheets, die ihrerseits Google-Fonts-Verweise enthielten. Werden nur bei aktivem Blockieren angelegt und verwendet. |
var/localfonts/state.json |
Ergebnis des letzten Scans, Liste der installierten Schriften, Zeitstempel, Meldungen und die Einstellungen des Pakets. |
var/localfonts/ (weitere Inhalte) |
Interner Arbeitsbereich des Pakets. Muss für den Webserver beschreibbar sein, gehört in die Datensicherung und niemals in die Versionsverwaltung. |
In state.json stehen unter settings zwei Werte,
für die es bewusst keine Schaltfläche im Backend gibt:
| Schlüssel | Voreinstellung | Wirkung |
|---|---|---|
enabled |
true |
Auf false gesetzt, wirkt das Paket auf keine ausgelieferte Seite mehr ein — weder Einbinden noch Blockieren. Ein Not-Aus ohne Deinstallation. |
fontDisplay |
"swap" |
Der Wert, der beim Erzeugen des Stylesheets als font-display in jede @font-face-Regel geschrieben wird. Eine Änderung wirkt erst nach einem erneuten Download. |
Beide Werte lassen sich nur durch Bearbeiten der Datei ändern — es gibt im Backend kein Bedienelement dafür. Bearbeiten Sie die Datei nur bei gestopptem Bearbeitungsbetrieb: Jeder Klick im Modul schreibt die ganze Datei neu und würde eine gleichzeitige Änderung überschreiben.
Aufbau des erzeugten Stylesheets
files/localfonts/localfonts.css beginnt mit der Kennzeichnung
/* Generated by Local Fonts. */ und enthält danach je Schriftdatei
eine Regel dieser Form:
@font-face {
font-family: 'Open Sans';
src: url('/files/localfonts/open-sans/open-sans-normal-400-1a2b3c4d.woff2') format('woff2');
font-style: normal;
font-weight: 400;
font-display: swap;
unicode-range: U+0000-00FF, U+0131, U+0152-0153;
}
Die Zeile unicode-range entfällt, wenn die Quelle keine angegeben
hat. Der Verzeichnisname je Schrift entsteht aus dem Familiennamen in
Kleinbuchstaben, wobei alles außer Buchstaben und Ziffern zu einem Bindestrich
wird — Open Sans wird zu open-sans.
Die Datei wird bei jedem Download vollständig neu geschrieben. Eigene Änderungen daran gehen dabei verloren; ergänzende Regeln gehören in ein eigenes Stylesheet.
Hooks und Listener
| Integrationspunkt | Klasse | Zweck |
|---|---|---|
Contao-Hook modifyFrontendPage |
EventListener\FrontendAssetsListener |
Fügt den Verweis auf das lokale Stylesheet ein, entfernt bei aktivem Blockieren die externen Verweise und ersetzt fremde Stylesheets durch bereinigte Kopien. |
kernel.response, Priorität -512 |
EventListener\FrontendResponseListener |
Wendet dieselbe Umformung auf HTML-Antworten außerhalb des Backends an und setzt die Kopfzeile X-Local-Fonts: active. |
Backend-Modul (BE_MOD, Gruppe design) |
Controller\Backend\LocalFontsModule |
Der dreistufige Arbeitsablauf unter Layout → Local Fonts. |
Das Paket legt keine eigenen Datenbanktabellen an und
registriert keine Frontend-Module und keine Routen, die eine
Website selbst aufruft. Der gesamte Zustand liegt in
var/localfonts/state.json; die erzeugten Dateien werden lediglich
in der Contao-Dateiverwaltung angemeldet.
Die eigenen Abrufe des Scanners sind am Anfragekopf
X-Local-Fonts-Scan: 1
erkennbar. Antworten auf solche Anfragen werden vom Paket nicht verändert. Eigener Code, der Frontend-Ausgaben umschreibt, sollte diesen Kopf ebenfalls respektieren, sonst sieht der Scan eine bereits veränderte Seite.
Was kein Erweiterungspunkt ist
Das Paket bietet bewusst keine öffentliche Erweiterungsschnittstelle. Folgendes ist interne Umsetzung und kann sich in jeder Version ändern:
- Die Dienstklassen für Scan, Download, Speicherung und CSS-Erzeugung. Sie sind nicht als API gedacht; es gibt weder ein Interface noch ein Event, um in den Ablauf einzugreifen.
- Der Aufbau von
var/localfonts/state.json. Die beiden oben beschriebenen Einstellungen sind der einzige Teil, dessen Bearbeitung vorgesehen ist. - Das Schema der Dateinamen unterhalb von
files/localfonts/. - Der Inhalt von
localfonts.css— die Datei wird bei jedem Download neu erzeugt.
Wer eingreifen möchte, arbeitet stattdessen über den manuellen Einbindungsmodus: Dann fügt das Paket nichts selbst ein und Sie entscheiden vollständig, wo und wie die Regeln in die Seite gelangen.
Deployment und Cache
composer require vtinnovations/localfonts
vendor/bin/contao-console cache:clear
vendor/bin/contao-console contao:symlinks
Beim Ausrollen zu beachten:
-
files/localfonts/gehört zu den Nutzdaten, nicht zum Programmcode. Wird das Verzeichnis beim Ausrollen nicht mitgenommen, müssen Scan und Download auf dem Ziel erneut laufen. -
var/localfonts/gehört in die Datensicherung und nicht in die Versionsverwaltung. Dort liegen die zur Laufzeit abgelegten Daten dieser Installation. -
Die Verknüpfung in den Webroot ist umgebungsabhängig. Nach
einem Deployment, das den Webroot neu aufbaut, führen Sie
contao:symlinksaus. - Nach einem Theme- oder Layout-Update erneut scannen. Ein Update kann neue Verweise mitbringen, die dann nicht lokal vorliegen.
- Bei einem Domainwechsel die Lizenz erneut aktivieren. Die Bindung erfolgt hostnamengenau.
Cache leeren:
vendor/bin/contao-console cache:clear
Der Seiten-Cache ist davon zu unterscheiden: Änderungen an Einbindungsmodus oder Blockieren wirken sich erst auf neu erzeugte Seiten aus. Leeren Sie ihn nach jeder Umschaltung und vor jedem erneuten Scan.
Fehlerbehebung
| Symptom | Ursache und Prüfung |
|---|---|
| Das Modul zeigt nur einen roten Hinweis, keine Arbeitsschritte | Keine aktive Lizenz. Siehe Lizenz aktivieren. Der Hinweis nennt den Weg selbst: System › Einstellungen › Local Fonts Lizenzverwaltung. |
| „Nicht lizenziert. Es wird keine geschützte Funktion ausgeführt, die Website bleibt unverändert." | Es ist keine Lizenz hinterlegt, oder die hinterlegte gilt für diese Installation nicht mehr — etwa nach einem Domainwechsel. Aktivieren Sie erneut. |
| „Es wurde kein Lizenzschlüssel eingegeben." | Das Feld Lizenzschlüssel war leer oder der eingegebene Wert überschreitet die zulässige Länge. Schlüssel erneut einfügen, auf Leerzeichen am Rand achten. |
| „Für diese Installation ist keine vertrauenswürdige Domain konfiguriert." | An keinem Startpunkt der Seitenstruktur steht ein Domainname. Contao → Seitenstruktur → Startpunkt bearbeiten → Feld Domainname setzen, dann erneut aktivieren. |
| „Der Lizenzserver ist vorübergehend nicht erreichbar. Der vorherige Lizenzstatus wurde beibehalten." | Der Server konnte www.v-t.one nicht erreichen. Ausgehende HTTPS-Verbindungen und einen etwaigen Proxy prüfen. Ein bestehender Lizenzstatus bleibt unverändert; später erneut versuchen. |
| „Der Lizenzschlüssel wurde nicht akzeptiert." | Der Schlüssel ist für dieses Produkt nicht gültig. Eingabe prüfen und mit dem ausgestellten Schlüssel abgleichen. |
| „Die Lizenz ist für die konfigurierte Domain dieser Installation nicht autorisiert." | Die Domain am Startpunkt und die Domain der Lizenz stimmen nicht überein. Die Bindung ist hostnamengenau: example.com und www.example.com sind nicht dasselbe. |
| „Die Lizenz konnte nicht gespeichert werden." | Das private Verzeichnis des Pakets unterhalb von var/ ist für den Webserver nicht beschreibbar. Eigentümer und Rechte prüfen, dann erneut aktivieren. |
| „Die Überprüfung der Lizenzantwort ist fehlgeschlagen." / „Die Antwort des Lizenzservers konnte dieser Anfrage nicht zugeordnet werden." / „Der Lizenzserver hat eine ältere Lizenz zurückgegeben als die derzeit aktive." / „Der Lizenzserver hat kein kompatibles Lifetime-Free-Paket zurückgegeben." | Ein bereits aktiver Lizenzstatus bleibt in allen vier Fällen unverändert bestehen. Wiederholen Sie den Vorgang später einmal; besteht die Meldung fort, wenden Sie sich mit dem genauen Wortlaut an v-t.one. |
| „Es ist kein Lizenzschlüssel zum Aktualisieren gespeichert." / „Derzeit ist keine Lizenz aktiviert." | Lizenz aktualisieren oder Lizenz entfernen wurde ohne aktive Lizenz ausgelöst. Zuerst aktivieren. |
| „Zugriff verweigert" beim Klick auf eine Lizenz-Schaltfläche | Das angemeldete Konto ist kein Administrator. Die Lizenzaktionen sind serverseitig auf Administratorkonten beschränkt. |
| „Ungültiges Sicherheitstoken" | Die Sitzung ist abgelaufen oder die Seite lag lange offen. Backend neu laden, gegebenenfalls neu anmelden, dann erneut klicken. |
| „Keine veröffentlichten regulären Seiten gefunden." | Es gibt keine Seite vom Typ „Reguläre Seite", die veröffentlicht und innerhalb ihres Zeitraums ist. Der Scan wertet ausschließlich solche Seiten aus. |
| „Seiten-URLs wurden als „localhost“ erzeugt. …" | Der Scan lief ohne Web-Zugriff (Konsole, Cron) und am Startpunkt fehlt der Domainname. Die Meldung nennt beide Wege: Scan im Backend ausführen, oder die Domain am Startpunkt (DNS) bzw. framework.router.request_context.host setzen. |
| „Seite konnte nicht gelesen werden: …" | Der Server konnte die genannte eigene Seite nicht abrufen. Häufig: interne Namensauflösung, Basic-Auth auf der Staging-Umgebung, eine Firewall-Regel, die Zugriffe des Servers auf sich selbst blockiert. |
| „Keine Google-Fonts-Stylesheets auf den gescannten Seiten gefunden." | Entweder ist wirklich nichts eingebunden, oder die Seiten kamen aus dem Seiten-Cache und wurden bereits bereinigt. Cache leeren und erneut scannen. Siehe Externe Google Fonts blockieren. |
| „Google-Fonts-Stylesheets wurden gefunden, aber keine ladbaren Font-Dateien erkannt." | Das abgerufene Stylesheet enthielt keine auswertbaren @font-face-Regeln mit Dateiadresse. Rufen Sie die im Quelltext eingebundene Google-Adresse selbst auf und prüfen Sie die Antwort. |
| „Stylesheet konnte nicht gelesen werden: …" / „Google-Fonts-CSS konnte nicht gelesen werden: …" | Eine der nachgeladenen CSS-Dateien war nicht abrufbar. Adresse prüfen; bei Google-Adressen ausgehende HTTPS-Verbindungen des Servers prüfen. |
| „Keine erkannten Fonts vorhanden. Bitte zuerst die Website scannen." | Der Download wurde ohne vorheriges Scan-Ergebnis ausgelöst — oder ein erneuter Scan hat das Ergebnis geleert. Schritt 1 ausführen. |
| „Verzeichnis konnte nicht angelegt werden: …" / „Datei konnte nicht geschrieben werden: …" | Fehlende Schreibrechte des Webservers auf files/. Eigentümer und Rechte des Uploadverzeichnisses prüfen. |
| „Download fehlgeschlagen (…): …" | Eine einzelne Schriftdatei war nicht erreichbar. Der Rest wird trotzdem installiert; die betroffene Datei zählt nicht als heruntergeladen. Download wiederholen. |
| „Symlink … konnte nicht angelegt werden (…). „vendor/bin/contao-console contao:symlinks“ ausführen." | Die Verknüpfung in den Webroot konnte nicht erstellt werden, etwa weil das Hosting keine Symlinks zulässt. Den genannten Befehl ausführen. Bis dahin werden die Dateien nicht ausgeliefert. |
/files/localfonts/localfonts.css liefert 404 |
Dieselbe Ursache: Die Verknüpfung in den Webroot fehlt. vendor/bin/contao-console contao:symlinks ausführen. |
| „Das generierte Stylesheet wurde nicht gefunden. Bitte Schritt 2 erneut ausführen." | Im manuellen Modus soll der CSS-Code angezeigt werden, die Datei fehlt aber. Schritt 2 erneut ausführen. |
| Im Frontend fehlen die Schriften, obwohl alles heruntergeladen ist | Der Einbindungsmodus steht auf manuell und der CSS-Code wurde nicht eingepflegt. Zeile Aktuell: in Schritt 3 prüfen. Siehe Selbst einbinden. |
| „Achtung: Externe Google Fonts werden blockiert, das lokale Stylesheet aber nicht automatisch eingebunden. …" | Manueller Modus und aktives Blockieren treffen zusammen. Entweder den angezeigten CSS-Code einbinden oder auf Automatisch einbinden umstellen. |
Im Quelltext steht weiterhin fonts.googleapis.com |
Entweder ist Externe Google Fonts blockieren nicht aktiv, oder die Seite kam aus dem Seiten-Cache. Option prüfen, Cache leeren, erneut aufrufen. |
| Änderungen im Modul wirken sich im Frontend nicht aus | Seiten-Cache. Nach jeder Umschaltung den Cache leeren. Zur Kontrolle, ob das Paket auf eine Seite einwirkt, dient die Antwort-Kopfzeile X-Local-Fonts: active. |
Bekannte Einschränkungen
- Nur der öffentliche Google-Fonts-CSS-Dienst wird erkannt. Schriften von anderen Anbietern oder bereits selbst gehostete Schriften findet der Scan nicht.
- Der Scan braucht eine erreichbare Website. Er ruft die eigenen Seiten über HTTP ab. Ohne auflösbaren Hostnamen am Startpunkt liefert ein über Konsole oder Cron ausgeführter Scan keine brauchbaren Ergebnisse.
- Nur veröffentlichte reguläre Seiten werden ausgewertet. Schriften, die ausschließlich auf einer nicht veröffentlichten Seite oder auf einem anderen Seitentyp eingebunden sind, bleiben unentdeckt.
- Scan und Download laufen im laufenden Zugriff. Es gibt keine Hintergrundverarbeitung und keine Fortschrittsanzeige; bei sehr vielen Seiten kann ein Durchlauf in das Zeitlimit von PHP oder des Webservers laufen. In diesem Fall den Konsolenbefehl verwenden.
- Bereits vorhandene Dateien werden nicht erneut geladen. Ändert Google die Datei unter derselben Adresse, bemerkt das Paket das nicht. Um wirklich neu zu laden, zuerst die lokalen Schriften entfernen.
- Es gibt keine Auswahl, welche gefundene Schrift übernommen wird. Der Download nimmt alles, was der letzte Scan gefunden hat.
-
Lokale Schriften entfernen löscht ohne Rückfrage und
nimmt das gesamte Verzeichnis
files/localfonts/mit. -
Die Einstellungen
enabledundfontDisplayhaben keine Bedienoberfläche und sind nur invar/localfonts/state.jsonzu ändern. - Es gibt genau eine Lizenzstufe (Lifetime Free). Keine Testphase, keine kostenpflichtige Zusatzstufe, kein anonymer Nutzungsmodus.
- Die Domainbindung ist hostnamengenau. Subdomains und abweichende Schreibweisen gelten als eigene Domains.
-
Ohne die PHP-Erweiterung
ext-sodiumlässt sich keine Lizenz aktivieren. Das Paket bleibt dann dauerhaft im nicht lizenzierten Zustand und die Website unverändert. - Das Entfernen der Lizenz löscht die Schriftdateien nicht. Sie bleiben auf dem Server liegen, werden aber bis zur erneuten Aktivierung weder ausgeliefert noch über das Modul verwaltet.
Deinstallation
Gehen Sie in dieser Reihenfolge vor, damit im Frontend keine Verweise auf gelöschte Dateien zurückbleiben.
- Blockieren ausschalten. Backend → Layout → Local Fonts → Abschnitt 3 → Blockieren ausschalten. Sonst fehlen nach der Deinstallation sowohl die lokalen als auch die externen Schriften, bis der Cache erneuert ist.
-
Selbst eingepflegten CSS-Code entfernen. Haben Sie den
manuellen Modus verwendet, löschen Sie den kopierten Block aus Ihrem
Stylesheet oder aus den zusätzlichen
<head>-Tags des Layouts. -
Lokale Schriften entfernen. Abschnitt 2 →
Lokale Schriften entfernen. Damit ist
files/localfonts/gelöscht. - Lizenz entfernen. System → Einstellungen → Abschnitt Local Fonts → Lizenz entfernen, Rückfrage bestätigen. Führen Sie diesen Schritt aus, bevor Sie das Paket löschen — danach ist die Schaltfläche nicht mehr erreichbar.
-
Paket entfernen. Im Contao Manager unter Pakete → Installierte Pakete das Paket entfernen und die Änderungen anwenden. Oder über Composer:
composer remove vtinnovations/localfonts vendor/bin/contao-console cache:clear -
Das Arbeitsverzeichnis
var/localfonts/löschen. Erst damit sind die zur Laufzeit abgelegten Daten dieser Installation vollständig entfernt. Solange Sie eine spätere Neuinstallation erwägen, bewahren Sie stattdessen eine Sicherung davon auf. - Caches leeren — Anwendungs-Cache und Seiten-Cache — und eine Frontend-Seite kontrollieren.
- Schriften wieder herstellen. Ohne das Paket bindet nichts mehr ein Schrift-Stylesheet ein. Fügen Sie Ihre Schrifteinbindung wieder in das Seitenlayout ein — oder hosten Sie die Schriften selbst.
Die Deinstallation löscht keine Inhalte. Seiten, Artikel, Inhaltselemente und Layouts bleiben unverändert. Das Paket legt keine eigenen Datenbanktabellen an; es sind also keine Tabellen zu bereinigen.
