Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Remove static pages from cache on unpublish

Go to End

15 Posts   4364 Views


Forum Moderator, 1391 Posts

14 August 2009 at 1:18am

I'm using StaticPublisher for a couple of sites and all works well. I have a bit of a problem though: cached pages are not removed when they are unpublished or deleted, not even on rebuilding the whole cache. So if someone has a page bookmarked it will still be found. Can anyone confirm this, or is it me doing something wrong? Is there some way I can fix this?


Community Member, 253 Posts

14 August 2009 at 2:50am


I use the static publisher quite a bit and it does have quite a few limitations like the one you have outlined here.

I haven't had time to properly modify / customise the publisher but i would imagine creating a onBeforeDelete() method for the StaticPublisher class would be a good start.

Hope that helps.


Forum Moderator, 1391 Posts

14 August 2009 at 3:06am

Thanks - I admit I was secretly hoping that someone had already done the work :-) Anyway - maybe some SiteTree Decorator equivalent to FilesystemPublisher that has an onAfterUnpublish() method..?


Community Member, 253 Posts

14 August 2009 at 3:39am

Yes, i was hoping someone would have done lots of this too! (and i'm sure they have) - the only modificaltion i have made is adding '<!-- Cached '.date("l jS \of F Y h:i:s A").' -->' to the cached files so i know when i'm seeing cached and when I'm not.

There is quite a bit of work that could go on with the static publisher. Eg: if there is dynamic content on the home page (say latest news item) when a new news item is created, the home page doesn't get republished. Also, the fact that the buildcache routine doesnt actually delete the old cache [because the method is looking for a folder in /cms/ called cache. Highly frustrating as it means that I have to empty the cache folder for the site's users when they want a re-cache.

I did do some searching for an 'onAfterUnpublish()' method when i saw your question; but i couldn't find it [].

If you find a solution, please let me know!


Forum Moderator, 1391 Posts

14 August 2009 at 6:39am

Edited: 14/08/2009 6:40am

As for buildcache: '../cache' is hardcoded in cms/dev/RebuildStaticCacheTask.php - line 49 and further.

if($removeAll && file_exists("../cache")) {
	echo "Removing old cache... \n";
	Filesystem::removeFolder("../cache", true);
	echo "done.\n\n";

The real destination folder for the cache is stored in the $destFolder property of the FilesystemPublisher class, where it can't be reached(?). - line 29:

function __construct($destFolder, $fileExtension = null) {
	if(substr($destFolder, -1) == '/') $destFolder = substr($destFolder, 0, -1);
	$this->destFolder = $destFolder;

As a quick'n dirty fix, I edited existing code, doubled the destFolder as a public static $myDestFolder in FilesystemPublisher, and then requested it as FilesystemPublisher::$myDestFolder in RebuildCache(). This is obviously not the preferred way, but solves one problem for the time being :-)


Forum Moderator, 5523 Posts

14 August 2009 at 3:21pm

We are currently working on a few updates to the build cache tool to make it smarter. martimiz I think you are on the right track with cache folder being hardcoded, that shouldn't be like that (though we always use /cache/ as convention).


Forum Moderator, 1391 Posts

14 August 2009 at 8:06pm

Thanks willr, that would be great as this is great extension to the CMS :-)

By the way - I Remembered a temp fix for the problem of menus not properly highliting on static pages (see: - please ignore the problem I had with multiple posts)

@Pigeon: as for the issue with the homepage: this is something you could maybe address from your page's pagesAffectedByChanges() function, by always adding the homepage to the $urls...


Community Member, 253 Posts

14 August 2009 at 11:13pm

Ah, nice tip. I just haven't had time to implement the caching as affectively as i could.

I never really realised what pagesAffectedByChanges() did :P

So, if i add a pagesAffectedByChanges() method to my news article / holder code pages and say 'home', would that work?

@willr: the hard coded folder is /cms/cache/ i believe as i use /cache/ and it doesn't delete the files.

Go to Top