Recipe for building a Drupal-powered blogging community website

I worked with our Faculty of Education to build a community blogging website for use by after-degree student teachers as part of their personal/professional development, reflection, and collaboration process, as well as to collect materials for use in ePortfolios. They had a set of pretty simple constraints. Because the student teachers would be writing about activities in the K-12 classroom, and likely would be posting media (photos, videos, etc…) they needed to restrict access to the site – there could be no public access to this content. Additionally, they needed to control with a fairly fine granularity which individuals within the community would be able to see specific pieces of content. Because of these constraints, we couldn’t just load up WPMU and set them free, nor could we just point them to or What to do…

Drupal, of course. It’s got a blogging module available out of the box (it takes a checkbox to enable it). OK. Blogging is taken care of. Members just have to click “Create content” and select “Blog post”. Easy peasey.

Want to allow members of the community to create their own groups? Organic Groups. It’s amazingly flexible, and has an added bonus, in this case, of also enabling access control to content based on group membership (after enabling Organic Groups, go to the settings page for the module and enable “Access Control”). Meaning that the student teachers could create as many private group contexts as they like, and then grant access to their content to any of their groups (and only those groups) if desired. Very powerful stuff.

OK. So now we have a bunch of student teachers blogging their brains out. That’s a lot of content to keep track of. Their professors and practicum teachers need to keep up on all of the relevant posts, and provide feedback in a timely manner. How to provide tools to let individuals track content that they’re allowed to see, that they haven’t seen yet, and that they need to respond to… Views. Drupal’s Views module is killer for this. It’s basically a database query generator, where you can provide a set of criteria to filter content, and create a display on the website. So I created a couple of handy views to help people keep up.

The first view was a simple “all content that has been posted to any of your groups, sorted in reverse chronological order” – this is the “river of news” display, which meant that members didn’t have to go hunting through their various groups (some had over a dozen group memberships) to find new content. It’s all merged, sorted, and presented to them on the front page of the site. This let members keep their fingers on the pulse of the community – they could see at a glance what was being published in all of the groups they cared about. This view also displayed the number of comments (and any new comments were flagged) so people could easily follow up on conversations.

The second view was intended to help members keep up with new content – essentially an “inbox” to be used by professors and teachers. This view was a clone of the first “river of news” view, but only displayed unread items. As a professor viewed a blog post, it would get dropped out of this view for them.

We also used the Book module to create documentation on the site (how to use the site, as well as pages with links to other resources, an FAQ, etc…) and we enabled the Forum module to create a separate non-blog discussion board within the site (but this never really got used much…)

That’s really all there is to it – Drupal just handles the rest, and once it’s configured it takes very little care and feeding.

Here’s the stuff we used (the site was built a year ago on Drupal 4.7, but I’m listing what would be used as of the current Drupal 5.3):

I’ll try to revise this post to clarify stuff as needed, but this is the basic recipe. The best thing to do is just start downloading and playing…

3000km in 2007

I did it. I managed to ride my bike 3000km (so far) in 2007. Last year, I rode about 1500km. I estimated I might ride 2000-2500km this year. But this morning, after dropping Evan off at school, I pulled the bike out and rode along the Bow River Pathway. I’ve now ridden over 3000km this year, and hope to do even more in 2008.


The year’s riding started while on Maui, when I rode about 60 miles down Haleakala – starting at over 10,000′ and descending to near sea level. As I rode through the year, it’s like a switch got thrown – I wasn’t making myself ride my bike to work, it was just how I got around. I didn’t have to give it much thought. And, because I was riding on my commute, I was making far more time for exercise than I could have otherwise (with a family at home that needs attention as well) – but because I have to spend time getting to and from work, it was really simple to just convert that into some great exercise. I wound up losing almost 20 pounds of flab without really trying, and without paying any attention to what I was eating.

The season’s almost over for the year (never thought I’d be thinking the season wasn’t officially over at the end of November!) and I know I’m going to miss it during the deep winter months. I’ll try to ride earlier in the season – maybe starting in March 2008? All I need is a pair of waterproof riding pants, and I’m good to ride through the spring rainy season…

Captain Obvious works for Dell’s Internet Team

I just went to the Dell website to look something up, and was rewarded by this incredible bit of sleuthery on the part of Dell’s crack team of internet designers:

You are in Canada.

Thank you, Captain Obvious.

The web designers didn’t indicate if my being in Canada somehow altered the behaviour of the website, or if the selections were somehow tuned to my location. Just to brag that they were clever enough to detect where I’m located. It might have been more useful to have the message read something like “You are currently viewing the Canadian Dell Store.” It’s a little less braggish, as opposed to “Dude! We TOTALLY located your IP address! We are teh kool! You’re in CANADA. Dude…”

Simple Tags – Tag Autocompletion in WordPress

When I switched from Drupal to WordPress as the software that runs my blog, one of the things I missed was tag autocompletion while writing posts. Drupal has a great freetext tag field, including an AJAX utility that automatically checks with the server for tags that match what you’ve started to type in the tags field.

And now, WordPress has that too! With the Simple Tags plugin. It has some other features, too (but I haven’t tried them yet) but the tag autocompletion is killer. Why isn’t that included in a stock WP install?

Here’s what the autocompletion offered as I entered the tags for this post:

SimpleTags Autocompletion

WPMU Blogs Directory?

I’ve been trying to figure out how to build an effective directory of blogs hosted by a WPMU service. There’s the list-all mu-plugin widget, and it has a handy dandy list_all_wpmu_blogs() method. I’ve created a page template for my theme, and added this code to dump the list of public blogs:

<!-- directory stuff goes here -->
<?php list_all_wpmu_blogs("","","<li>","</li>","updated"); ?>
<!-- end of directory stuff -->

Create a new Page, call it something creative like “Directory” and select the template that contains the above code. That works, technically, but doesn’t produce the most effective directory once the service grows to more than a dozen or so blogs.

WPMU List-all Directory

But, once a service gets a bunch of blogs, say a hundred or so, a directory needs to be a bit more powerful. Sorting. Filtering. Searching. Categorizing. Letting people find blogs by activity (number of posts, number of comments, number of recent posts…) At the bare minimum, it’d be something like the great directories used by UMass and UTA. I haven’t been able to find out any detailed technical information about how either of those directories are built, but they appear to be static HTML files, probably generated by a separate script triggered by a cron job. They appear to run external to WordPress, but I could be wrong on that.

It should be relatively straightforward to build a WPMU blogs directory function, with the wp_blogs table containing basic metadata about each blog, and info about the owner and last post just a join away. Anyone have any cool code to share? Any ideas of how best to implement this?

Blog Readability Test

Following Paul’s post about the Blog Readability Test, I pumped in my own URL just for kicks. Here’s the result:

I take that as a compliment, and it’s probably pretty easily explained by the algorithm. I tend to write short, active-tense sentences with not many long words. The readability test doesn’t take the actual content into account, just the lengths of words, sentences and paragraphs. And, if there are any elementary school kids reading this blog, I apologize for the potty mouth in the last post. Actually, the blog is probably filtered in your school, so no worries…

ps. if you take the test and post the results on your blog, beware the sneaky, sneaky person who runs the service. The HTML snippet they provide includes a spam ad hyperlink. Not cool. So just be sure to remove that before posting. Play safe, kids. And knowing is half the battle. is on the air

I just set up a copy of WordPress Multiuser, running at It’s an open and free blogging service. I won’t be running ads, or charging for individuals to use it. My only goal is to get more people publishing content online, and if yet another blogging service will help, then so be it.

It’s configured to serve subdomains, meaning you can easily set up a blog at “” and treat it like it’s your own server.

I don’t have a “policiy” or usage agreement or anything yet, but for now, the only rule is “don’t be evil.” – so, I guess that means anything goes, except for spam splogs and link farms.

I’m probably a little crazy to set this up as a free service, but this stuff shouldn’t cost money for people to use. I’ll start things off sharing my Dreamhost account. If it outgrows that (and hopefully it will) then I’ll investigate other hosting options.