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 Publius Project

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

The Publius Project

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:
The Publius Project

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"

The Publius Project
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

The Publius Project
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

Comments

aac’s picture

Thanks for writing a systematic case study. Good work!!!

---~~~***~~~---
aac

thomastsang’s picture

Good case~ I can totally imagine how things work~

dalin’s picture

We created a module that allows the administrator to choose which clusters will appear in the home page block

Eiyaa. There's already several modules that could do this. NodeQueue and Flag are the first ones that come to mind.

________________________
Dave Hansen-Lange
Director of Technical Strategy, FourKitchens.com

dharmatech’s picture

Thanks for your comment dalin.

Flag would not have worked because it doesn't (yet) allow you to flag taxonomy vocabularies or terms. Nodequeue might have worked, but would have been overkill and wouldn't have addressed updating the primary menu.

The module we wrote for PP has a small memory footprint, provides a block to easily allow the non-technical PP staff person to control the vocabularies displayed on the homepage with a simple checkbox. This is something she would do once a year, if ever. Ordering is controlled through taxonomy weights. There is no dependency on any other modules, it only calls a few core APIs, and upgrading to D6 would be trivial. In addition, any changes to the vocabularies are reflected dynamically in the "thematic areas" drop down menu. Pretty simple and worked perfectly for us.

Hope this helps clarify our thinking at the time.
thanks
DharmaTech

David Naian’s picture

Very interesting, Thanks. The speed is impressive. I appreciate the Layout, very clean and well organized. Fantastic Work. Cheers

venkat-rk’s picture

Thank you for the detailed write up. Is there a reason for not using pathauto for the taxonomy terms?

dharmatech’s picture

Hi venkat-rk. I can't remember the details but I think we ran into some issues with views and arguments when using pathauto to create "clean" term paths. To be honest, we were in such a time crunch that we just pushed it aside and didn't have a chance to come back to it, unfortunately. We are hoping to come back to it in "phase 2."

Thanks for your comment
Tony
DharmaTech