Most of my site uses blosxom in static mode. Because of this, I wanted to be able to generate my entire web directory by running blosxom, rather than having to copy files over by hand. So wrote
copyfiles while, in static mode only, will look for files called
fileslist in each directory, and copy the files or directories specified therein to the appropriate place in blosxom’s destination directory.
I learned a couple of painful lessons while writing this plugin. Don’t call perl’s
File::Find re-entrantly. Things go horribly wrong. Also, if you use
File::Copy to copy a file to itself, you’ll end up with an empty file.
Controlling depth for static blogs in blosxom is an issue I had a lot of trouble with.
For most of my static side, I wanted the equivalent of
0 = 1.
However, just setting this in
config files (for use by the
config plugion) doesn’t work, because blosxom in static mode doesn’t work like it does in dynamic mode.
In dynamic mode, when you load a directory via blosxom.cgi, blosxom trawls through that directory and its children (consulting
0), building its list of entries. Any plugins that implement per-load calls (like
filter) get run, and can change the list of entries. Then
generate() is called, which does sorting, and then, for each entry, calls the per-story plugin subroutines (like
So far so good. In dynamic mode, we’re all fine.
But in static mode, things work a little differently. Blosxom still only calls
filter once, this time for the entire site. It’s too early to play with
0, because if you do, blosxom will ignore half your pages.
generate() is called for each directory that you want HTML files for. It is only from subroutines called from within
generate() that we get a chance to control depth on a per-directory basis.
This is why
prunesort exists: it override the default
sort subroutine, and does something evil; it prunes the list of files being sorted according to the current depth, and returns the remainder sorted in the default manner.
Having plugins that mess with sorting is annoying, since only one plugin gets to do the final sort; blosxom will call upon the first-found plugin that implements sort. Others will be ignored (obviously, since you can’t sensibly chain sorts).
config plugin by Rael Dornfest is cool, in that it allows you to replace or define settings for sub-hierarchies of your blog. However, it didn’t really work the way I wanted to for a static blog.
config reads config files from the directory being loaded towards the root (i.e. from the top down, if your directory tree is growing upwards). It was more useful to me to allow config files in subdirectories to override those in their parent, so I wrote
bottomupconfig which does just that.
absolute plugin didn’t work for me when fixing up relative image links when the images lived in a directory that was relative to the blog entry, so I hacked on it.
I probably broke RSS-related stuff.