Publius Project - Harvard University Case Study
The Publius Project is an effort of Harvard University's Berkman Center for Internet & Society. The mission of the Publius Project is to foster public dialogue and create a durable public record on the question of how the Internet should be controlled, and by whom. The project brings together a distinguished collection of Internet observers, scholars, innovators, entrepreneurs, activists, technologists, and other experts to write short essays on this topic. The Publius Project approached DharmaTech because its existing WordPress site was too limited and "blog-centric." The Publius Project needed an easy-to-use website that effectively created a forum for discussing the pressing issues revolving around how cyberspace is governed.
Mia Moran of Emtype provided the graphic design for the project. Caroline Nolan of the Berkman Center served as project coordinator for the Publius Project. Jason Hill of DharmaTech was the lead programmer and Tony Guzman of DharmaTech was the project manager.
Information Architecture
The Publius Project website serves as a forum for knowledge sharing. A large number of authors contribute essays to the website that spark responses, comments, and conversations on a variety of topics. The goal of this project was for DharmaTech to effectively architect the Publius Project website so readers could easily follow those topics and be engaged in their debates.
Contributed essays are organized into nine clusters of topics with each cluster having its own sub-clusters. Furthermore, many essays are grouped together in conversations where several authors respond to one lead essay.
The architectural elements include:
- Clusters: General topics of knowledge (vocabularies).
- Sub-clusters: Specific sub-topics of a cluster (terms).
- Conversations: A grouping of essays in a cluster.
- Essay: A node where readers can post short comments in response. An essay can be a part of multiple sub-clusters but can only be in one cluster.
Theming and Development
The theme itself presented significant challenges because of the type of information displayed within different pages and sections of the site. We quickly encountered limitations on how contributed modules display information. The following describes some of the key challenges we faced and our approach in solving them.
Home Page
The home page serves as the starting point for all clusters. The nine clusters listed on the home page within a block allow visitors to start down the path of their choice. DharmaTech wanted to give the Publius Project the power to control which clusters appeared as the top nine, in the event that the top nine clusters changed. This was not a requirement but we felt it was necessary to provide sufficient flexibility. We created a module that allows the administrator to choose which clusters will appear in the home page block. It also handles updating the menu items under the Thematic Areas menu when the clusters change.
Conversations
Drupal core does not have an elegant way of grouping nodes together. Contributed modules such as CCK are great but were not robust enough for the needs of this project. We needed to have the ability to indicate that one essay is in response to another and display information about that response essay. The use case is an administrator adds Essay A and later adds Essay B as a response, Essay A needs to list all of the responses (other nodes referencing it). This is visually represented as (#1, #2, and #3).
Furthermore, the connection between essays needs to be two-way: essay B needs to display that it is in response to Essay A, represented here:
From a technical perspective, we used the CCK node reference field to allow the Publius Project to indicate that Essay B is in response to Essay A. Using the node referrer and Views modules, we created a view that passed in the node id of Essay A as an argument. This generates a list of all node ids referring to Essay A. In template.php we wrote some helper functions for finding all the related node information (authors, terms, posted dates, titles, paths, etc.).
Related Essays
The right sidebar (#4) represents to readers their "place" within a cluster as they navigate through various essays and conversations. It lists all other essays within that essay's cluster grouped together by sub-cluster with links to the essays and their authors. Significant custom theming using the Views module was necessary to implement this seemingly simple feature. For every essay, we had to query for the cluster (vocabulary) it belonged to and list all other published essays in that cluster, including their authors and their paths. In the theme, we organized the list by sub-cluster, while limiting the list to the three most recent essays for each sub-cluster.
"You May Also Like"
In addition to displaying a list of essays within a cluster on the sidebar, the Publius Project also wanted to be able to tell readers of other essays they might be interested in reading (#5). The other essays may or may not be in the same cluster. The CCK module, once again, worked well. When the administrator adds an essay, they refer to the essay(s) they think readers may also like using the CCK node reference field. The same helper function mentioned above is used to find the title, terms, author(s), and posted date, and displays this information in a block in the right sidebar.
Authors
Another important feature was to allow visitors to view every essay by a particular author. We could not use the actual node author because the Publius Project had only one staff person using the site and an essay could have multiple authors. The easy fix for this was to create a vocabulary of authors, allowing the staff person to enter the author's name as a tag. When a reader clicks on an author's name on any page, he/she will be taken to a list of all essays by that author in chronological order. This example lists all essays by the author "Anonymous."
For a list of all authors we created a list view of every published essay. The only field we display is the author (term) sorted in alphabetical order. Since Views 1 is node-centric, multiple nodes could have the same author so we did a theme override to the view to show only distinct authors.
Miscellaneous Custom Theming
For a view of all essays in a cluster, we wrote code to query the essay node id and comment count and display it in the header, as well as query for any responses it may have. If an essay has responses, the theme lists the authors with links to the authors' essays. This task was surprisingly tricky, but fortunately the Drupal framework/API allowed us to pull it off.
Another tricky bit of theming involved displaying all of the authors of an essay's response essays in the essays header. If an essay has no responses to it, the header will be blank.
Modules Used
Admin Menu
Great module overall for site administrators. Since the Publius theme did not create a natural space for a navigation menu, the Admin Menu worked perfectly.CCK
Essential! The CCK node reference field and node referrer module made grouping nodes much easier.
Taxonomy and Taxonomy Manager
Simply amazing and taxonomy manager is a nice utility module for adding/removing terms.
Views
We could not have built Publius Project or any of our other Drupal sites without it.
Comment, Comment Mail, Comment RSS
Allows the community to take part in discussions.
Forward and Print
Speaks for itself.
FCKeditor and IMCE
Our favorite WYSIWYG editor combined with easy file uploading.
Path Auto
Great for easily controlling aliases and being search engine friendly.
External Links
Easily controls external link behavior and adds arrows for external links.
Masquerade
Great for development and testing permissions.
Form Filter
Easy way to clean up and simplify forms such as the add node form.
Drush
Easy installation of modules for site administrators via the command line.
Google Analytics
This module allows for tracking by role, among other features.
DharmaTech/Publius
Manage homepage clusters, updates primary menu items.
Drupal Version: 5 or 6?
The Berkman Center, Publius Project's host, required us to build the site in Drupal 5.x because of their multi-site installation. This didn't give us the option of building this site in Drupal 6 but was not an issue because the contributed modules we needed were stable for Drupal 5 at the time. Drupal 6 would have definitely made things easier but the custom code and theming work we did would not have been that much different or easier in Drupal 6, in our opinion.
Conclusion
Incredibly, we were able to complete this project in just over a month from about the end of October 2008 to the beginning of December 2008. We are proud of this, considering the amount of custom code, the complexity of the theme and information architecture. This is testament to the Drupal API and its effectiveness as a CMS for developers and end-users alike. It also shows how solid the contributed modules are and well established the Drupal community is. Doing things "the Drupal way" will ensure that the Publius Project website can continue to grow and function through upgrades and/or improvements to expand its features.
The Publius Project can now fully leverage its website to create the necessary space for its important work.
About DharmaTech
DharmaTech is a nonprofit technology provider based in Salt Lake City, Utah. Our mission is to strengthen nonprofit organizations by implementing affordable and appropriate technology solutions. We help social and environmental nonprofits further their missions by harnessing the full power of technology. Our services include website and database development, custom software development, strategic technology planning, and technology infrastructure.
To learn more, visit us at: http://dharmatech.org
Drupal version: Drupal 5.x