www.bimminger.at

Tipps / Internet / Typo3

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.


Das vereinfachte Beispiel ohne RealURL

Das Beispiel etwas einfacher ohne RealURL.


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.