[TYPO3-german] Frühester Hook in TYPO3, redirect extension

Stephan Schuler Stephan.Schuler at netlogix.de
Fri Dec 20 15:54:14 CET 2013


Hi David.


Was du vor hast ist nicht so einfach.

Ein wesentliches Problem ist, dass du sowohl für das Repository als auch für den UriBuilder (bzw. letztenendes sogar schon für den Standard-Typolink) ein recht vollständiges TSFE mit aktueller PageID und geladenem TypoScript brauchst. Die Gründe sind jeweils unterschiedlich, das fängt bei config.linkVars und der config.baseUrl an, geht über Mountpoint-Konfiguration, Language-Fallback, irgend wann kommen StoragePids ins Spiel und die Sache endet bei ObjectManager-Konfiguration. Du brauchst auf so vielen unterschiedlichen Ebenen das vollständige TSFE inklusive TypoScript dass du tunlichst auch warten solltest bis das da ist.

Ich dachte auch anfangs, dass man für banale Sachen wie Redirects eigentlich recht früh einsteigen sollte. Das führt aber regelmäßig dazu, in einer frühen Pre-Extbase-Phase dann doch wieder diverse Extbase-Komponenten zu laden -- und wenn man selbst Klassen läd ohne den Extbase-Bootstrap abzuwarten produziert man sich recht unvorhersehbare Raceconditions, häufig dann sowas wie "der TypoScript-Cache ist in Situation XYZ falsch aufgebaut".

Deshalb: Nimm einen Hook der so spät ist dass dir Extbsae vollständig zur Verfügung stehen kann, alles andere führt ins Verderben -- und cache dir die Redirects wenn möglich, sodass ein zweiter, deutlich früherer Hook die Chance hat, Redirects aus deinem Cache zu verwenden und dann zu sterben.

Ich verwende für sowas gerne
* "connectToDB " aus dem tslib_fe bzw. seit 6.x aus \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController Redirects auszuführen die aus dem Cache komme
* sowie "checkDataSubmission" um den Cache zu füllen wenn er noch nicht da ist und ggf. hier nochmal einen zweiten Redirectversuch zu starten.

Du musst dir für deine Geschichte natürlich irgend eine gröbere Einheit ausdenken als "IP" und die IP dann "da hin casten". Ich würde z.B. das Land aus der IP ableiten, das kann z.B. die Maxmind-Lib, und das ist unabhängig von Extbase. Dann kann das Land als Cache-Identifier dienen und du brauchst keinen Cache der für alle 4294967296 IPv4-Adressen.

Mein Vorschlag also konkret:

1: Hook auf "tslib_fe::connectToDb" registrieren
2: tslib _fe::connectToDb => Land aus IP ableiten
2-a: Wenn Cacheeintrag für das Land vorhanden: Redirect
2-b: Wenn kein Cacheeintrag: Hook auf tslib_fe::checkDataSubmission registrieren
3: tslib_fe::checkDataSubmission => Redirect ermitteln
3-a: In den Cache schreiben ob der Redirect für dieses Land ausgeführt werden soll und wohin
3-b: Redirect durchführen

Weil tslib_fe immer recht störrisch ist wenn es um "Hooks nachträglich registrieren" geht, registriere ich beide Hooks in meiner ext_localconf, wobei ich für beide Hooks die gleiche Singleton-Hook-Klasse registrieren.
Die connectToDb-Methode kann sich dann ggf. "$this->enableLateHook=TRUE" merken und die checkDataSubmission-Methode kann mit  "if(!$this->enableLateHook) return;" früh aufgeben.


Gruß,


Stephan Schuler
Web-Entwickler

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Website: media.netlogix.de



--
netlogix GmbH & Co. KG
IT-Services | IT-Training | Media
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Internet: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Stefan Buchta, Matthias Schmidt



-----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von David Greiner
Gesendet: Mittwoch, 18. Dezember 2013 15:21
An: typo3-german at lists.typo3.org
Betreff: [TYPO3-german] Frühester Hook in TYPO3, redirect extension


Hallo Liste,

welcher Hook bietet sich für einen frühstmöglichen redirect an?

Hintergrund: Eine Seite existiert in mehreren Übersetzungen. Je nach IP soll das "LanguageRepository" befragt werden und anschließend auf die entsprechende Übersetzung weitergeleitet werden.

Momentan arbeite ich mit dem Hook unter $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_pagerenderer.php']['render-preProcess'][]. Doch hier habe ich das Gefühl zu spät einzugreifen. Auch werden hier bereits die Seiten aus dem Cache geladen, sodass der redirect durch meine Extension nur mit deaktiviertem Cache oder halt beim ersten ungecachten Aufruf funktioniert.

Über Tritte in die richtige Richtung freu ich mich ;) _______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german


More information about the TYPO3-german mailing list