Typo3
Typo3: Eigene Extension mit Cache-Steuerung, Indexed Search und RealUrl
Dieser Tipp ist als Erweiterung des Tipps Eigene Extension mit Cache-Steuerung und Indexed Search gedacht.
Natürlich läßt sich das erste Beispiel der eigenen Extension mit Cache und indexed_search auch mit der Extension RealURL erweitern. Dazu sind ein paar zusätzliche Eingriffe notwendig.
1. Typo3 Core
Einstellungen im Typo3-Template der Seite (Setup):
config {
...
#RealUrl
simulateStaticDocuments = 0
tx_realurl_enable = 1
...
}
Einfach mal RealUrl generell aktivieren - Vorraussetzung ist natürlich die installierte Extension und die angepasste .htaccess-Datei.
2. RealURL Konfiguration
Erweiterung der RealURL-Einstellungen in der localconf.php um die Parameter der eigenen Extension:
$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array(
'_DEFAULT' => array(
'init' => array(
'enableCHashCache' => 1,
'appendMissingSlash' => 'ifNotFile',
'enableUrlDecodeCache' => 1,
'enableUrlEncodeCache' => 1,
),
...
'postVarSets' => array(
...
#Eigene Extension abnews am Schluss einfügen (hier auch zuerst der Dummytitel)
'abnews' => array(
array(
'GETvar' => 'abnews[dummyTitle]' ,
),
),
'bereich' => array(
array(
'GETvar' => 'abnews[bereich]' ,
),
),
'artikel' => array(
array(
'GETvar' => 'abnews[artikel]' ,
),
),
), #End of PostVarSets
...
)
);
Mit dieser Konfiguration sollten wir eine URL der Form:
/<Pfad zur Page>/abnews/<Dummy-Title>/bereich/<bereich-id>/artikel/<artikel-id>/
3. Die eigene Extension selbst
Bei der eigenen Extension erweitern wir um einen Titel der in der SEO optimierten URL vorkommen soll.
function createHashLink($bereich, $artikel, $dummyTitle) {
/* Parameter vordefinieren:
* - $bereich ... ist eine Hierarchische Ebene bei mir
* - $artikel ... ist eine
* - $dummyTitle ... übergebe ich für den Link-Text und für RealURL
*/
//Eventuell noch vorher den Dummy-Titel um Sonderzeichen bereinigen (äöüß...)!
$overrulePIvars = array("bereich" => $bereich, "artikel" => $artikel, "dummy" => $dummyTitle);
$cache = 1;
$clearAnyway = 1;
$pageID = 2; //In meinem Fall ist alles auf eine PAGE-ID gebunden
$link = $this->pi_linkTP_keepPIvars_url($overrulePIvars, $cache, $clearAnyway, $pageID);
return $link;
}
Also im Beispeil würde statt
/<Pfad zur Page>/abnews/<Dummy-Title>/bereich/<bereich-id>/artikel/<artikel-id>/
der Link
/<Pfad zur Page>/abnews/<Dummy-Title>/bereich/<bereich-id>/artikel/<artikel-id>/?cHash=<Typo3Hashwert>
generiert.
Nun zur Ausgabe, der Einfachheit halber gleich nur der Link eingebunden unter main()
function main($content, $conf) {
$this->pi_USER_INT_obj=0;
//Wenn kein cHash-Wert übergeben wurde, dann Cachen verhindern - dann können wir eine Startseite zur Extension genereieren:
$cHash = t3lib_div::_GP("cHash");
if(!$cHash) {
$GLOBALS['TSFE']->set_no_cache();
}
$bereich = 10;
$artikel = 13;
$linktext = "test";
//Link erstellen und einbauen
$link = $this->createHashLink($bereich, $artikel, $linktext);
$content = "<a href=\"".$link."\">".$linktext."</a>";
//Zurück an Typo3
return $this->pi_wrapInBaseClass($content);
}
Mit diesem Beispiel wird die aufgerufene Seite
/<Pfad zur Page>/
nicht gecached und nicht in den Index übernommen. Wenn aber auf den darin generierten Link
/<Pfad zur Page>/abnews/test/bereich/10/artikel/13/?cHash=<Typo3Hashwert>
geklickt wird, wird diese Seite hinter dem Link sowohl im Cache als auch im Index abgelegt.
Index regelmäßig leeren und neu aufbauen
Hier noch ein Hinweis zu einem Cron-Job um den Index regelmäßig zurück zu setzen und neu aufzubauen.