News
Alles was mich beschäftigt und bewegt
TYPO3 Sitemap mit TypoScript
Häufig ist es erforderlich, eine Webseite mit einer Sitemap auszustatten. Nun gibt es eine Vielzahl an Extensions, die dafür sorgen, dass eine Sitemap dynamisch aus den vorhandenen Seiten erzeugt wird.
Es ist nicht sinnvoll das gesamte System mit Extensions zu beladen, weil meist die Performance der Webseite darunter leidet. Mit etwas TypoScript und dem Wissen, wie eine XML-Sitemap aufgebaut ist, ist es möglich eine Sitemap ohne Extensions zu erstellen, die zudem noch die Möglichkeit bietet, andere Datensätze wie tt_news oder Datensätze aus eigenen Extensions darzustellen.
Das folgende Skript zeigt wie es geht:
sitemap = PAGE sitemap { typeNum = 200 config { no_cache = 1 disableAllHeaderCode = 1 additionalHeaders = Content-Type: text/xml; charset=utf-8 simulateStaticDocuments = 0 # Wie lautet die BaseUrl der Seite? absRefPrefix = {$baseUrlProtocol}://{$baseUrl}/ tx_realurl_enable = 1 } 10 = COA 10 { wrap ( <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 www.google.com/schemas/sitemap/0.84/sitemap.xsd" >|</urlset> ) 10 = HMENU 10 { special = directory # Ab welcher RootPage soll die Sitemap erstellt werden? special.value = 1 # Sollen "NotInMenu"-Seiten angezeigt werden? includeNotInMenu = 1 # Welche Seiten sollen nicht in der Sitemap erscheinen? excludeUidList = 24,28,34 1 = TMENU 1 { expAll = 1 NO { doNotLinkIt = 1 stdWrap { cObject = COA cObject { wrap = <url>|</url> 10 = TEXT 10 { typolink { parameter.field = uid returnLast = url } wrap = <loc>|</loc> } 20 = TEXT 20 { field = SYS_LASTCHANGED strftime = %Y-%m-%dT%H:%M:%SZ wrap = <lastmod>|</lastmod> } 30 = TEXT 30.value = <priority>1.0</priority><changefreq>weekly</changefreq> if.isFalse.field = shortcut } } } } 2 < .1 2.NO.stdWrap.cObject.30.value = <priority>0.9</priority><changefreq>weekly</changefreq> 3 < .1 3.NO.stdWrap.cObject.30.value = <priority>0.8</priority><changefreq>monthly</changefreq> 4 < .1 4.NO.stdWrap.cObject.30.value = <priority>0.7</priority><changefreq>monthly</changefreq> 5 < .1 5.NO.stdWrap.cObject.30.value = <priority>0.6</priority><changefreq>monthly</changefreq> 6 < .1 6.NO.stdWrap.cObject.30.value = <priority>0.5</priority><changefreq>monthly</changefreq> 7 < .6 8 < .6 9 < .6 10 < .6 } # news details 20 = CONTENT 20 { table = tt_news select { orderBy = title ASC languageField = sys_language_uid # Wo sind die News-Datensätze gespeichert? pidInList = 3 } renderObj = COA renderObj { stdWrap.wrap = <url>|</url> 10 = TEXT 10 { # Welche Seite enthält das News-Detail-Plugin? typolink { parameter = 24 additionalParams = &tx_ttnews[tt_news]={field:uid} additionalParams.insertData = 1 returnLast = url } wrap = <loc>|</loc> } 20 = TEXT 20 { field = date strftime = %Y-%m-%dT%H:%M:%SZ wrap = <lastmod>|</lastmod> } 30 = TEXT 30.value = <priority>0.7</priority><changefreq>weekly</changefreq> } } } }
Beschreibung
Zuerst wird das Seiten-Objekt und der Seiten-Typ definiert, damit die Sitemap über den URL-Parameter `type=200` aufgerufen werden kann. Mit Hilfe eines HMENU werden in einem COA-Objekt die Seiten aufgebaut. Dabei muss in `special.value =` die PageId der Root-Seite und in `excludeUidList =` die PageIds eingetragen werden, welche nicht in der XML-Sitemap dargestellt werden sollen.
Anschließend können weitere Daten an das COA-Objekt angehängt werden. Im Beispiel werden die Datensätze aus tt_news an die Sitemap angehängt. Es muss darauf geachtet werden, dass mittels `pidInList =` der System-Ordner angegeben wird, in dem die News-Datensätze gespeichert sind und in `parameter =` die PageId der Detail-Seite angegeben wird. Wenn es mehrere News-Ordner und/ oder Detail-Seiten gibt, so kann dies beliebig oft wiederholt werden.