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.schu...@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: i...@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-boun...@lists.typo3.org 
[mailto:typo3-german-boun...@lists.typo3.org] Im Auftrag von David Greiner
Gesendet: Mittwoch, 18. Dezember 2013 15:21
An: typo3-german@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@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an