At 2/28/2005 12:09 AM, Brion Vibber wrote:
Philipp Albig wrote:
That works for all the cache. Maybe it's too easy - but how or where is the cache for a article cleared, for example after editing? Sorry, I didn't find sth. about that.
When a page is updated directly or indirectly, the timestamp in the page_touched field (cur_touched on <= 1.4) is updated to the current time. Cached are checked against this timestamp at load time and discarded if the page_touched time is newer, forcing a re-rendering.
I posted some code in another thread, but maybe it will help you too. Here is what I'm using in my extensions to prevent a page from being "cached" and make the extension "useful".
global $wgTitle; if ($wgTitle) { $ts = mktime(); $now = gmdate("YmdHis", $ts + 60); $ns = $wgTitle->getNamespace(); $ti = wfStrencode($wgTitle->getDBkey()); $sql = "UPDATE cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'"; wfQuery($sql, DB_WRITE); }
Note that this code is slightly identical to Title::invalidateCache. The difference here is that if I call invalidateCache in my extension code, it sets cur_touched to 'now', *then* create the cache, so the cache is newer than cur_touched anyway. The trick here is that I set cur_touched in the future, something not too intrusive, let's say 'now' + 60 seconds, provided that I expect the cache to be created within 60 or 120 secs once my extension code has been executed (you can increase that of course). That way, cur_touched is always fresher than the cache, and the page always gets re-created. Am I missing something ?
-- Sebastien Barre