Hallo,
cHash in Verbindung mit realURL und lib (MVC-Extensions) ist kein ganz einfaches Thema.
Bei einer Extension, die z.B. die ohne Parameterübergabe eine News-Übersicht anzeigt und mit Parametern entweder eine andere Übersichtsseite oder eine einzelne News anzeigt, ist es sinnvoll, die jeweiligen Seiten zu cachen.
Damit aber der Cache nicht überläuft, weil eine Seite von aussen mit den unterschiedlichsten Parametern "beschossen" wird, werden parametrisierte Seiten nur dann gecached, wenn die Parameter in Links erscheinen, die via typolink in der typo3 Installation erzeugt wurden.
Dafür ist cHash da. Damit eine Seite mit einem Set von $_GET-Variablen im Cache wiedergefunden werden kann, wird die die komplette URL in einen md5-hash + individuelles salt gepackt. 1)
Bei realURL ist dieser cHash Eintrag nicht sichtbar. 2)
In tx_realurl_chashcache wird ein Eintrag gemacht, wenn der Link in typo3 als typolink (mit aktiviertem cHash) erzeugt wird (encodeSpURL_doEncode -> encodeSpURL_cHashCache). 3)
Bei einer MVC-Extension, die unter der Verwendung der extension lib geschrieben wird, werden Links, die über tx_lib_link erzeugt werden, mit einem cHash versehen. (var $noCacheBoolean = false😉
Wird eine Seite mit Parametern aufgerufen, wird sie von realURL zerlegt (decodeSpURL_doDecode) und der cHash ermittelt. Ist kein passender Eintrag in der Tabelle tx_realurl_chashcache vorhanden, dann wird der Inhalt der Seite neu erzeugt, aber nicht in den Cache geschrieben. 4)
Sollen also Seiten mit Parametern in den cache geschrieben werden, ist der Aufruf einer Seite notwendig, auf der diese Seiten verlinkt sind.
Soweit meine Beschreibung. Berichtigungen oder Ergänzungen sind sehr erwünscht.
sunfish
----------------------------------------------------------------------
1) aus the myteries of chash:
"An easy solution to caching would be to simply identify a page by its URL. So when someone asks for “?id=123” and “?id=123&type=1” we will just md5-hash the URL and use that to look up the page next time."
aus class.tx_realurl.php comments
2) "The problem is: a cHash string is not "speaking" (and never will be!)"
3) "So; the only option we are left with if we want to remove the "?cHash=...:" remains in URLs and at the same time do not want to include it in the virtual path is; store it in the database!"
4) decodeSpURL_cHashCache:
Return no value (eg. if table has been cleared) even if there should be one! In this scenario it will look to the outside as if all parameters except cHash has been set.
Quellen zum Thema:
http://typo3.org/development/articles/the-mysteries-of-chash/
http://www.sk-typo3.de/Richtiges-Cachen-mit-pi_base.188.0.html
http://dmitry-dulepov.com/article/linking-properly-in-your-typo3-code.html
http://dmitry-dulepov.com/article/when-do-you-need-chash-in-typo3.html