Ok, ich habe es nun letztendlich, nach ein wenig hacking hinbekommen. Und das Ganze, ohne den Core anfassen zu müssen. Es ist also wunderbar Update-Kompatibel.
Das Zauberwort meines letztendlichen Erfolgs lautet 'IProcFunc'.
Wie ich oben ja bereits erwähnt habe, enthalten die, durch das TMENU (oder besser gesagt HMENU) generierten Links den korrekten Pfad, da diese den MP-Parameter enthalten, welcher dann beispielsweise von RealURL zum richtigen Pfad umgewandelt wird.
HMENU besitzt die Typoscript-Option IProcFunc. Hier kann man eine Funktion angeben, welche den von HMENU generierten Link bearbeiten kann, bevor dieser gerendert wird. Letztendlich ging ich soweit, dass meine IProcFunc nichts weiter macht, als den öffnenden sowie den schließenden a-Tag entfernt und den Linktitel durch das href-Attribut ersetzt.
<?php
class UserFuncUtils {
/**
* Modifies sitemap links. Whith this modification, a menu will only generate a plain url instead of an <a>-Tag
*
* This is an IProcFunc for a HMENU. The only parameter supplied by this method call is $this->I from the
* Menu ContentObject. The function call expects a modified $I array to be returned.
*/
function IProcFunc_plainURL($I) {
// Show what $I has to offer
// print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($I, NULL, 8, FALSE, FALSE, FALSE, array(), array());
// Remove opening and closing tags and replace title with href attribute. This results in a plain URL being rendered by the menu
$I['parts']['ATag_begin'] = '';
$I['parts']['ATag_end'] = '';
$I['parts']['title'] = $I['linkHREF']['HREF'];
return $I;
}
}
?>
Und so sieht dann letztendlich mein Typoscript Code zum Generieren der Sitemap aus. Diesen Code habe ich mir aus verschiedenen Quellen zusammengesucht und nachträglich für meine Bedürfnisse etwas angepasst:
includeLibs.userFuncUtils = fileadmin/ratec/libs/class.userFuncUtils.php
temp.cr = TEXT
temp.cr.char = 10
temp.tab = TEXT
temp.tab.char = 9
sitemap = PAGE
sitemap {
typeNum = 101
config {
no_cache = 1
disableAllHeaderCode = 1
additionalHeaders = Content-Type: application/xml
}
wrap (
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">|
</urlset>
)
4 < temp.cr
# Home
9 = LOAD_REGISTER
9 {
# 6 = ID of home page
datum.data = DB : pages:6:lastUpdated // DB : pages:6:SYS_LASTCHANGED // DB : pages:6:tstamp // DB : pages:6:crdate
datum.date = c
}
10 = TEXT
10 {
value (
<url>
<loc>{$BASEURL}</loc>
<lastmod>{register:datum}</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
)
insertData = 1
}
11 = RESTORE_REGISTER
12 < temp.cr
# The MENU
30 = HMENU
30 {
special = directory
special.value = 6
# Hide Upcrete Shortcut
excludeUidList = 19
1 = TMENU
1 {
expAll = 1
noBlur = 1
IProcFunc = UserFuncUtils->IProcFunc_plainURL
NO = 1
NO {
before.cObject = COA
before.cObject {
10 = TEXT
10.noTrimWrap = | <url>|
20 < temp.cr
30 = TEXT
30.noTrimWrap = | <loc>|
}
after.cObject = COA
after.cObject {
10 = TEXT
10.value = </loc>
20 < temp.cr
30 = TEXT
30 {
noTrimWrap = | <lastmod>|</lastmod>
data = field:lastUpdated // field:SYS_LASTCHANGED // field:tstamp // field:crdate
date = c
}
40 < temp.cr
50 = TEXT
50 {
noTrimWrap = | <changefreq>|</changefreq>
# always / hourly / daily / weekly / monthly / yearly / never
value = weekly
}
60 < temp.cr
70 = TEXT
70 {
noTrimWrap = | <priority>|</priority>
# 0.1 - 1.0
value = 1.0
}
80 < temp.cr
90 = TEXT
90.noTrimWrap = | </url>|
100 < temp.cr
}
}
}
2 < .1
2.NO.after.cObject.70.value = 0.9
3 < .1
3.NO.after.cObject.70.value = 0.8
4 < .1
4.NO.after.cObject.70.value = 0.7
5 < .1
5.NO.after.cObject.70.value = 0.6
}
40 < .30
40.special.value = 40
40.excludeUidList >
50 < .40
50.special.value = 45
60 < .40
60.special.value = 35
}
Wie man sehen kann nutze ich also keine typolinks mehr sondern lediglich den Link, der von dem Menu generiert wird und schleuse diesen vor dem Rendern durch meine eigene Funktion.
Ich hoffe, ich konnte damit ein bischen weiterhelfen.
Schöne Grüße und gebt mal Bescheid, ob's geklappt hat.