Vielen Dank für die ausführliche Erklärung. Hat mir gerade weitergeholfen.
Gruss René
domain.com/index.phpid=37&tx_eventmgmt_list[action]=filter&tx_eventmgmt_list[controller]=Event&x_eventmgmt_list[type]=groß&cHash=15287741c8e2739a53f74b098b940e22
Damit weiß TYPO3, dass die aktuellen Parameter dieser Seite zu dem cHash gehören und die Seite abhängig von diesem gecacht wird. Fehlt der cHash, werden die Parameter zwar ausgewertet, aber das Caching System weiß von diesen nichts. Wenn der Cache gelöscht wird, und der erste Aufruf der Seite mit Parametern, aber ohne cHash geschieht, dann wird diese Seite im Cache abgelegt. Sprich, entweder ist ein Filter aktiv, oder eine Einzelansicht ist aktiv im Cache.
domain.com/index.phpid=37&tx_eventmgmt_list[action]=filter&tx_eventmgmt_list[controller]=Event&x_eventmgmt_list[type]=groß
Es verschieden Möglichkeiten, dieses Problem zu steuern: 1. Möglichkeit Seit TYPO3 6.x gibt es die Einstellung: [FE][cHashRequiredParameters] = Trägt man dort die Parameter ein, werden diese bei URLs ohne cHash ignoriert. Zum Beispiel: tx_bestpractice_list[bestPractice],tx_bestpractice_list[action],tx_bestpractice_list[controller] 2. Möglichkeit$GLOBALS['TSFE']→reqCHash();
Zu allen betroffenen Actions hinzufügen. Wenn im Install Tool [pageNotFoundOnCHashError] = 1 eingestellt ist, führt reqCHash() zu einer "Page Not Found"-Fehlermeldung im Frontend, sonst wird der Aufruf einfach nicht gecacht. Allerdings möchte man ja vielleicht auch wissen, woher diese Links ohne cHash eigentlich stammen. Dazu habe ich einen BaseController geschrieben, von dem ein Controller erben kann. Dieser beinhaltet die Funktion requireCacheHash.
class BaseController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
*/
protected $typoScriptFrontendController;
/**
* Requires CHash for the current action
* log to devLog if no CHash was given
*
* @return void
*/
protected function requireCacheHash() {
if (is_null($this->typoScriptFrontendController)) {
$this->typoScriptFrontendController = $GLOBALS['TSFE'];
}
$this->typoScriptFrontendController->reqCHash();
if(!$this->typoScriptFrontendController->cHash) {
GeneralUtility::devLog(
"There was no cHash given to this action, 1410970141",
$this->extensionName,
GeneralUtility::SYSLOG_SEVERITY_NOTICE,
array(
'referrer' => GeneralUtility::getIndpEnv('HTTP_REFERER'),
'requestUri' => GeneralUtility::getIndpEnv('REQUEST_URI'),
'controller' => $this->controllerContext->getRequest()->getControllerName(),
'action' => $this->controllerContext->getRequest()->getControllerActionName(),
)
);
}
}
}
Die Funktion erzwingt einen cHash beim Aufruf der Action und schreibt bei fehlendem cHash den Referer und die request Uri in das devLog. Weiterführende Links:http://forum.typo3.org/index.php/t/200447/Vielen Dank für die ausführliche Erklärung. Hat mir gerade weitergeholfen.
Gruss René