(For more resources on Plone, see here.)
Blogs and forums have much to offer in a school setting. They help faculty and students communicate despite large class sizes. They engage students in conversations with each other. And they provide an easy way for instructors and staff members to build their personal reputations—and, thereby, the reputation of your institution. In this article, we consider how best to build blogs and forums in Plone. Along the way, we cite education-domain examples and point out tips for keeping your site stable and your users smiling.
Plone's blogging potential
Though Plone wasn't conceived as a blogging platform, its role as a full-fledged content management system gives it all the functionality of a blog and more. With a few well-placed tweaks, it can present an interface that puts users of other blogging packages right at home while letting you easily maintain ties between your blogs and the rest of your site.
Generally speaking, blog entries are…
- Prominently labeled by date and organized in reverse chronological order
- Tagged by subject
- Followed by reader comments
- Syndicated using RSS or other protocols
Plone provides all of these, with varying degrees of polish, out of the box:
- News items make good blog entries, and the built-in News portlet lists the most recent few, in reverse chronological order and with publication dates prominently shown. A more comprehensive, paginated list can easily be made using collections.
- Categories are a basic implementation of tags.
- Plone's built-in commenting can work on any content type, News Items included.
- Every collection has its own RSS feed.
Add-on products: free as in puppies
In addition to Plone's built-in tools, this article will explore the capabilities of several third-party add-ons. Open-source software is often called "free as in beer" or "free as in freedom". As typical of Plone add-ons, the products we will consider are both. However, they are also "free as in puppies".
Who can resist puppies? They are heart-meltingly cute and loads of fun, but it's easy to forget, when their wet little noses are in your face, that they come with responsibility. Likewise, add-ons are free to install and use, but they also bring hidden costs:
- Products can hold you back. If you depend on one that doesn't support a new version of Plone, you'll face a choice between the product and the Plone upgrade. This situation is most likely at major version boundaries: for example, upgrading from Plone 3.x to Plone 4. Minor upgrades, as from Plone 3.2 to 3.3, should be fairly uneventful. (This was not always true with Plone 2.x, but release numbering has since gotten a dose of sanity.)
- One place products often fall short is uninstallation. It takes care to craft a quality uninstallation routine; low-quality or prerelease products sometimes fail to uninstall cleanly, leaving bits of themselves scattered throughout your site. They can even prevent your site from displaying any pages at all (often due to leaving remnants in portal_actions), and you may have to repair things by hand through the ZMI or, failing that, through an afternoon of fun with the Python debugger. The moral: even trying a product can be a risk. Test installation and uninstallation on a copy of your site before committing to one, and back up your Data.fs file before installing or uninstalling on production servers.
- Pace of work varies widely. Reporting a bug against an actively developed product might get you a new release within the week. Hitting a bug in an abandoned one could leave you fixing it yourself or paying someone else to. (Fortunately, there are scads of Plone consultants for hire in the #plone IRC channel and on the plone-users mailing list.)
- In addition to the above, products that add new content types (like blog entries, for instance) bring a risk of lock-in proportional to the amount of content you create with them. If a product is abandoned by its maintainer or you decide to stop using it for some other reason, you will need to migrate its content into some other type, either by writing custom scripts or by copying and pasting.
These considerations are major drivers of this article's recommendations. For each of the top three Plone blogging strategies, we'll outline its capabilities, tick off its pros and cons, and estimate how high-maintenance a puppy it will be. Remember, even though puppies can be some work, a well-chosen and well-trained one becomes a best friend for life.
News Items: blogging for the hurried or risk-averse
Using news items as blog entries is, in true Extreme Programming style, "the simplest thing that could possibly work". Nonetheless, it's a surprisingly flexible practice and will disappoint only if you need features like pings, trackbacks, and remote editor integration. Here is an example front page of a Plone blog built using only news items, collections, and the built-in portlets:
Structure of a news-item blog
A blog in Plone can be as simple as a folder full of News Items, further organized into subfolders if necessary. Add a collection showing the most recent News Items to the top-level folder, and set it as its default page. As illustrated below, use an Item Type criterion for the collection to pull in the News Items, and use a Location criterion to exclude those created outside the blog folder:
To provide pagination—recommended once the length of listings starts to noticeably impact download or render timetime—use the Limit Search Results option on the collection. One inconsistency is that only the Summary and Tabular Views on collections support pagination; Standard View (which shows the same information) does not. This means that Summary View, which sports a Read more link and is a bit more familiar to most blog users, is typically a good choice.
Go easy on the pagination
More items displayed per page is better. User tests on prototypes of gap.com's online store have suggested that, at least when selling shirts, more get sold when all are on one big page. Perhaps it's because users are faced with a louder mental "Continue or leave?" when they reach the end of a page. Regardless, it's something to consider when setting page size using a collection's Number of Items setting; you may want to try several different numbers and see how it affects the frequency with which your listing pages show up as "exit pages" in a web analytics package like AWStats.
As a starting point, 50 is a sane choice, assuming your listings show only the title and description of each entry (as the built-in views do). The ideal number will be a trade-off between tempting visitors to leave with page breaks and keeping load and render times tolerable.
Finally, make sure to sort the entries by publication date. Set this up on the front-page collection's Criteria tab by selecting Effective Date and reversing the display order:
As with all solutions in this article, a blog built on raw News Items can easily handle either single- or multi-author scenarios; just assign rights appropriately on the Sharing tab of the blog folder.
News Item pros and cons
Unadorned News Items are a great way to get started fast and confer practically zero upgrade risk, since they are maintained as part of Plone itself. However, be aware of these pointy edges you might bang into when using them as blog entries:
- With the built-in views, logged-out users can't see the authors or the publication dates of entries. Even logged-in users see only the modification dates unless they go digging through the workflow history.
- Categories applied to a News Item appear on its page, but clicking them takes you to a search for all items (both blog-related and otherwise) having that category. This could be a bug or a feature, depending on your situation. However, the ordering of the search results is unpredictable, and that is definitely unhelpful.
The great thing about plain News Items is that there's a forward migration path. QuillsEnabled, which we'll explore later, can be layered atop an existing news-item-based blog with no migrations necessary and removed again if you decide to go back. Thus, a good strategy may be to start simple, with plain news items, and go after more features (and risk) as the need presents itself.
Scrawl: a blog with a view
One step up from plain News Items is Scrawl, a minimalist blog product that adds only two things:
- A custom Blog Entry type, which is actually just a copy of News Item.
- A purpose-built Blog view that can be applied to folders or collections, which are otherwise used just as with raw News Items.
- Here are both additions in action:
Scrawl's Blog Entry isn't quite a verbatim copy of News Item; Scrawl makes a few tweaks:
- Commenting is turned on for new Blog Entries, without which authors would have to enable it manually each time. The chances of that happening are slim, since it's buried on the Edit → Settings tab, and users seldom stray from the default tab when editing.
- Blog Entry's default view is a slightly modified version of News Item's: it shows the author's name and the posting date even to unauthenticated users—and in a friendly "Posted by Fred Finster" format. It also adds a Permalink link, lest you forfeit crosslinks from users who know no other way of finding an entry's address.
Calm your ringing phone by cloning types
Using a custom content type for blog entries—even if it's just a copy of an existing one—has considerable advantages. For one, you can match contributors' vocabulary: assuming contributors think of part of your site as a blog (which they probably will if the word "blog" appears anywhere onscreen), they won't find it obvious to add "news items" there. Adding a "blog entry," on the other hand, lines up naturally with their expectations. This little trick, combined with judicious use of the Add new… → Restrictions… feature to pare down their options, will save hours of your time in training and support calls.
A second advantage of a custom type is that it shows separately in Plone's advanced search. Visitors, like contributors, will identify better with the "blog entry" nomenclature. Plus, sometimes it's just plain handy to limit searches to only blogs.
This type-cloning technique isn't limited to blog entries; you can clone and rename any content type: just visit portal_types in the ZMI, copy and paste a type, rename it, and edit its Title and Description fields. One commonly cloned type is File. Many contributors, even experts in noncomputer domains, aren't familiar with the word file. Cloning it to create PDF File, Word Document, and so on can go a long way toward making them comfortable using Plone.
Pros and cons of scrawl
Scrawl's biggest risk is lock-in: since it uses its own Blog Entry content type to store your entries, uninstalling it leaves them inaccessible. However, because the Blog Entry type is really just the News Item type, a migration script is easy to write:
# Turn all Blog Entries in a Plone site into News Items.
# Run by adding a "Script (Python)" in the ZMI (it doesn't matter
where) and pasting this in.
from Products.CMFCore.utils import getToolByName
portal_catalog = getToolByName(context, 'portal_catalog')
for brain in portal_catalog(portal_type='Blog Entry'):
blog_entry = brain.getObject() # Get the actual blog entry from
# the catalog entry.
blog_entry.portal_type = 'News Item'
# Update the catalog so searches see the new info:
The reverse is also true: if you begin by using raw News Items and decide to switch to Scrawl, you'll need the reverse of the above script—just swap 'News Item' and 'Blog Entry'. If you have news items that shouldn't be converted to blog entries, your catalog query will have to be more specific, perhaps adding a path keyword argument, as in portal_catalog(portal_type='News Item', path='/my-plonesite/ blog-folder').
Aside from that, Scrawl is pretty risk-free. Its simplicity makes it unlikely to accumulate showstopping bugs or to break in future versions of Plone, and, if it does, you can always migrate back to news items or, if you have some programming skill, maintain it yourself—it's only 1,000 lines of code.
(For more resources on Plone, see here.)
QuillsEnabled: blogging bells and whistles
Once upon a time, there was a blogging product called Quills. It was the most feature-rich blogging package in all the Plone kingdom, with trackbacks, pings, support for remote editors, and more. But alas, it introduced its own blog entry content type very different from News Item, so webmasters were forced to bear a substantial lock-in risk to get those features.
Today, we are fortunate enough to have QuillsEnabled, a rethinking of Quills without the risk of lock-in. Using marker-interface cleverness, QuillsEnabled provides all the features of Quills but using standard News Items. In fact, you can use any content type you like as blog entries—even more than one type in a single blog—and their fully rendered representations show in listings:
With lock-in thus addressed, QuillsEnabled is an easy recommendation for blogs that need bells and whistles like…
- A monthly archive of past entries (and within each month, a day-by-day archive)
- Atom and RDF syndication in addition to Plone's built-in RSS support
- An assortment of blog-like portlets, including a tag cloud, a list of recent comments, and a list of authors
QuillsEnabled is also very configurable on a per-blog basis:
Pros and cons of QuillsEnabled
QuillsEnabled is slightly easier to set up than Scrawl or a plain-news-item blog, since you don't have to build your own structure using collections and portlets. Instead, you just create a folder and choose Activate blog from its Actions menu. Everything is taken care of: pagination, an assortment of portlets, and month- and day-based organization of entries.
The downside of QuillsEnabled is a lack of any particular support for comments: they aren't indicated on listing pages except by the Recent Comments portlet, which shows only the subject line and gives no hint which entry they are attached to. Further, commenting isn't even turned on by default for new blog entries, making one more thing for contributors to remember. However, all of this has a straightforward solution: a pairing of QuillsEnabled with Scrawl, combining the best attributes of each.
QuillsEnabled + Scrawl: the perfect pair
Since QuillsEnabled lets you use any content type as a blog entry, why not use the Scrawl Blog Entry type? This gets you the easy setup of Quills along with its powerful listing, navigation, and publishing features, but you still get to enjoy the nicer entry templates and comment integration of Scrawl. Here's how to set it up:
- Install both QuillsEnabled and Scrawl. The order of installation doesn't matter.
- Make a new folder, and activate it as a QuillsEnabled blog.
- Using the Add new menu, place restrictions on the folder so contributors can add only Scrawl blog entries.
- In the Weblog Admin portlet, click Configure Blog. Set the Default type to "Blog Entry" so that clicking Add Entry in the admin portlet adds a Scrawl blog entry.
This gives you the best of both worlds:
- QuillsEnabled manages the listings, complete with monthly and daily breakdowns.
- Scrawl takes care of enabling comments on each new entry, so you don't need to trust or train your contributors to do it.
- Listings show how many comments each entry has.
- Individual entries use Scrawl's more informative custom view, which shows author name and posting date.
- Blog entries have their own type, which makes advanced searches easy to limit and comforts users with familiar vocabulary.
Forums with Ploneboard
While a blog is geared toward having one person post the lion's share of content and then a larger community make relatively short comments, a forum tends to be more egalitarian: someone—not necessarily the owner of the forum system—makes an initial post and then steps back to participate in the conversation as an equal. The difference, in practice, is slight: both forums and blogs have been evolving for more than a decade, and they have each absorbed many features of the other.
Among the implementations considered here, the most significant distinguisher is the richness of comments. In all the blog strategies we investigated, comments were limited to plain text and were either allowed or disallowed—nothing in between. In our forum, they can be rich—including styled text and attached files—and they can take advantage of Plone's powerful workflow engine, giving you the ability to vet comments before they appear to the public.
While there were some choices to make among blog implementations, the Ploneboard add-on is the clear winner in the forum space. From one of the world's foremost Plone development companies, it delivers a good balance of power and simplicity and receives prompt compatibility updates for new versions of Plone.
For better or worse, Ploneboard prescribes a four-level organization of forum content: comments, conversations, forums, and message boards.
Comments and conversations
A comment is an individual post, like a student might make to ask a question about an assignment. They can be edited, deleted, or temporarily hidden ("retracted") by administrators.
Conversations are threaded discussions made up of comments. They have two available views in the Display menu: conversation_view, which hides the nested structure of the exchange, and threaded_conversation_view (strangely not the default), which uses indentation to signify replies.
Forums group related conversations together. In an educational context, you might want to make a forum for each class assignment or lecture. Individual forums can also be assigned a category (distinct from Plone's standard categories), such as "Class Assignment".
Message boards are top-level containers of forums. A message board keeps track of what categories can be assigned to the forums within. A message board's front page groups its forums by categories, which appear as headings over each group. Uncategorized forums appear under a "General forums" heading.
Harnessing Ploneboard's workflows
Ploneboard comes with an unusually thoughtful assortment of workflows:
- Conversations can be locked or open.
- Forums can be members-only, moderated, free-for-all, or private.
- Entire message boards can be shown or hidden.
These workflows are a handy way to control students' access without exposing less technically adept instructors to the potentially confusing Sharing tab. For some examples, read on.
Example 1: Moderated forums as drop boxes
How can we let students turn in work in a "drop box" fashion, so only the instructor can see it? The moderation workflow makes this easy:
- Make a moderated forum called, for example, "Assignments".
- Add a conversation named after a specific assignment: say, "Term Paper Drop Box".
- Have students post their completed assignments as replies.
Students' posts aren't visible to each other, but site administrators (and instructors, if you play your Sharing tab cards right) can see them all. Comments allow file attachments, so this can stretch beyond even rich-text answers. And, while a comment is waiting for moderation (which it does forever in this scenario), its author can delete it and put up an improved version.
Example 2: Open forums for homework help
Open a forum to field questions about each assignment. This allows more efficient dissemination of answers to common questions without having to spend class time broadcasting them. In addition, it gives students the opportunity to help each other. Both potentials have proved true in university science classes.
Example 3: Forums for group work collaboration
Another practice that works well is to give each group in a group assignment a forum for internal communication.
In this article, we've examined and weighed three and a half ways of building a blog with Plone. We've also introduced the foremost forum implementation. Finally, we suggested ways to use these tools inside and outside the classroom as starting points for your own explorations. Happy communicating!
- Plone 3 Theming [book]
- Plone 3 Multimedia [book]
- Plone 3.3 Products Development Cookbook [book]
- Practical Plone 3: A Beginner's Guide to Building Powerful Websites [book]
- Using Flowplayer in Plone 3 [article]
- Red5: A video-on-demand Flash Server [article]
- Audio Enhancements with p4a.ploneaudio in Plone 3.3 [article]