Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Beispiel: Einflussnahme auf die URL-Erzeugung (Suchmaschinenoptimierung) / Das Interface UrlFactory
Das Interface UrlFactory
Package: de.espirit.firstspirit.generate
URLs werden bei der Generierung eines Projektknotens erzeugt. Regulär werden die URL-Pfade dabei aus den Referenznamen der beteiligten Objekte gebildet, für eine Seitenreferenz also aus dem Referenznamen der Seitenreferenz und den Referenznamen der übergeordneten Menüebenen. Über die Schnittstelle UrlFactory kann die URL-Erzeugung nun beeinflusst werden. Sie ermöglicht beispielsweise die Verwendung von Anzeigenamen zur Erstellung sprachabhängiger URLs. Es ist aber auch möglich, Verzeichnisstrukturen für den Webserver anzulegen, die komplett von der Struktur des Projekts abweichen.
So können z. B. anstatt der folgenden URLs, in denen zur Andeutung der Inhaltssprache entsprechende Ordner (z. B. „de“) in die Hierarchie eingefügt, die URL-Bestandteile aber immer mittels Referenznamen gebildet wurden,
http://domain.de/de/events/konferenz2013.html und
http://domain.de/en/events/konferenz2013.html
URLs mit sprachabhängigen Hierarchiebestandteilen unter Verwendung von Anzeigenamen erzeugt werden:
http://domain.de/veranstaltungen/konferenz2013.html und
http://domain.de/events/conference2013.html
Das Interface UrlFactory dient zur Erzeugung von URLs für Medien, Medien-Ordner, Menüebenen und Projektinhalten vom Typ ContentProducer (eine Erweiterung des Interfaces IDProvider). Die erzeugten URLs können auf den entsprechenden Projektinhalten über die Methode String getStoredUrl(…) ausgelesen werden.
Das Interface spezifiziert folgende Methoden:
- void init(final Map<String, String> settings, PathLookup pathLookup): Initialisierungs-Methode (zur Initialisierung von Komponenten siehe Initialisierung von Komponenten). Übergeben werden die Konfigurationseinstellungen, die innerhalb des Modul-Deskriptors im Abschnitt <configuration/> definiert sind, im Parameter settings. Den Schlüssel bildet der jeweilige Tag-Name (umgewandelt in Kleinbuchstaben), der Wert dem jeweiligen, im Tag-Abschnitt enthaltenen Inhalt, also <key>text</key>. Sollen bei der Berechnung der URLs manuell definierte Pfade für alle Vaterelemente berücksichtigt werden, muss zudem eine Instanz vom Typ PathLookup übergeben werden (siehe Das Interface PathLookup).
- String getUrl(ContentProducer node, TemplateSet templateSet, Language language,
PageParams pageParams): Die Methode berechnet den URL-Pfad für den übergebenen Projektknoten vom Typ ContentProducer. Außerdem wird der Parameter language übergeben, der die Projektsprache definiert, für die ein Knoten gelesen werden soll, sowie die Parameter templateSet für einen Vorlagensatz und pageParams mit Einstellungen für Knoten, die mehrseitige Anzeigen bewirken. Die Methode liefert einen auf den übergebenen Parametern basierenden URL-Pfad, der mit einem Schrägstrich beginnt und mindestens einen Dateinamen mitsamt Erweiterung enthält. - String getUrl(Media node, Language language, Resolution resolution): Diese Methode berechnet den URL-Pfad für einen übergebenen Projektknoten vom Typ Media. Zusätzlich werden als Parameter ein Language-Objekt übergeben, der die Projektsprache definiert, für die die Mediendatei gelesen werden soll, sowie ein Resolution-Objekt, das bei einem Bildknoten die Zielauflösung angibt; language kann bei sprachunabhängigen Medien den Wert null haben, während resolution bei Dateiknoten null ist. Diese Methode liefert ebenfalls einen auf den übergebenen Parametern basierenden URL-Pfad, der mit einem Schrägstrich beginnt und mindestens einen Dateinamen mit Erweiterung beinhält.
Die von den Methoden getUrl(…) zurückgelieferten URLs werden für das Element, mit der durch die Parameter angedeuteten Konstellation, in der UrlRegistry gespeichert und in zukünftigen Generierungsaufträgen wiederverwendet. Sobald für ein Element in einer bestimmten Parameterkonstellation eine gespeicherte URL in der UrlRegistry vorliegt oder per manueller URL-Einstellung im SiteArchitect definiert wird, wird dieser gespeicherte Wert verwendet; die UrlFactory-Implementierung wird für dieses Element nur dann erneut abgefragt, wenn die gespeicherten URLs des Elements aus der Registry oder den URL-Einstellungen gelöscht werden. |
Klassen, die das Interface UrlFactory implementieren, müssen im Moduldeskriptor (siehe auch Modul- und Komponenten-Deskriptor) aufgeführt werden, um in FirstSpirit verwendbar zu sein. Hierbei wird in einer Public-Komponente immer der FirstSpirit-interne Container UrlCreatorSpecification als Klasse referenziert, während der vollständige Klassenname (inklusive Package-Pfad) der UrlFactory-Implementierung als Parameter im Block <configuration> angegeben wird. Weitere Parameter, die innerhalb der Implementierung ausgewertet werden, können ebenfalls im Konfigurationsblock definiert werden; diese weiteren Parameter werden der init(…)-Methode dann als Objekt settings übergeben.
Listing: Beispiel URL-Erzeugung – Moduldeskriptor mit Angabe einer UrlFactory-Implementierung
<module>
...
<components>
<public>
<name>{name}</name>
<class>de.espirit.firstspirit.generate.UrlCreatorSpecification</class>
<configuration>
<UrlFactory>{fully-qualified class name}</UrlFactory>
<!-- insert parameters for your implementation here,
see init(Map, PathLookup) -->
</configuration>
</public>
</components>
...
</module>