Categories are now more customisable than ever before.
I <a href="http://www.scotlandsoftware.com/blog/?post=/meta/we_hates_blogs.html">said previously</a> that
three main improvements to the blogging metaphor would allow me to consider moving my entire site to a blog
format. They were:
- Static includes. Allow the inclusion of static content atop each dynamically-compiled page (and I mean “compiled” in the
blogging sense; aggregated from various chunks of content; rather than in the programming sense).
has this already, via its “category info” files - they can contain anything from a sentence of text to a full HTML page, or more.
- Per-category flavor overrides. Allow a category to specify a flavor which it prefers; its own “default” flavor.
Substitute “template” for “flavor” and this applies to any blogging software out there. This instantly solves the “where do I put my Contact
form?” problem - you just make a separate category for it, and make that category override the default flavor (template).
- Sticky posts. Allow a post to insist on being included in the list of most recent posts.
This is not at all complicated to implement; you just add a check for some appropriate flag or marker when constructing your
list of posts to display. It could readily be another metafile, or even specified in the post’s content.
Thistle <a href="http://www.scotlandsoftware.com/blog/?post=/dev/thistle/more_thistle_work.html">already has</a> static includes
(actually, they <a href="http://www.scotlandsoftware.com/blog/?post=/dev/thistle/thinking_about_thistle_architecture.html">can be dynamic</a> too).
I'm pleased to reveal that we now also have per-category flavor (type/template/whatever) overrides - and more besides. We have two new options:
$use_cat_prefs - whether or not to allow categories to override various global settings, including the default template.
$cat_prefs_file - name of an optional file in each directory which will be parsed as PHP, and can contain category-specific
overrides of essentially any of the global options.
Think about that for a minute. Each category can override what template is used to display it (by redefining <code>$default_type</code> in its
own category-specific prefs file). Each category can also override things like the blog's name and description (multiple blogs, with multiple
names, running within a single Thistle installation), <code>$cssURL</code>, <code>$num_entries</code>, <code>$defaultAuthor</code> and
<code>$defaultAuthorLink</code>, and so on.
That offers a great deal of flexibility - and it's completely optional. Those who just want a single
blog, with a unified set of templates and a single set of global preferences, get their wish by default. But those who need more customisation
can now significantly alter each category's behaviour on a case-by-case basis.
Incidentally, other minor improvements today include:
- The category list now displays hierarchically.
- Thistle now reads (and evaluates, if appropriate) a category-info file at the root level, as well as in each sub-directory.
This is useful for adding some static/dynamic content to the top of the main page of your blog, but not to any category page.
Hopefully we'll have a live demo of Thistle up here before long.