Case Study: Augusta Chronicle
The Augusta Chronicle, the flagship newspaper of Morris Publishing Group, recently relaunched its website on the outstanding Drupal framework.
Morris first began using Drupal in 2005 with the launch of BlufftonToday.com, a blog-centric community website coupled with a free daily newspaper. In 2006 it adopted Drupal for both news and blogs at SavannahNow.com, the website of the Savannah Morning News. Both newspapers won Digital Edge awards for innovation in user participation.
Since then, the digital media arm of Morris Communications, Morris DigitalWorks, has developed a robust digital newspaper platform built on Drupal 6, to eventually power all 13 of its daily newspapers. Morris also uses Drupal for its radio stations and Skirt.com, a national specialty site for women.
Reader Participation
Morris has made a commitment to make their online platform a dynamic arena for reader participation and contributions. Readers are encouraged to comment on stories and blogs, and, on some papers, are encouraged to create their own blogs on the site. Journalists are expected to post news online immediately and to interact with the public, and they need to be able to do it without learning HTML or tools such as FTP. These requirements made Drupal a natural choice.
Front Page and Section Fronts
The front page and section fronts (local news, sports, opinion, etc.) make extensive use of Panels and Views for layout. Stories are promoted based on a mixture of automatic sorts (by date/time and priority fields) and manual sorts (using Nodequeue). The views blocks make extensive use of arguments, limits and offsets, allowing a small number of views to be reused throughout the site.
Some minor sections get a simpler treatment with taxonomy view pages that have received minor tweaks using Panels overrides.
Sources of News Stories
Most routine stories are created by staff writers using an internal database system designed for print production. Each night those stories are imported into Drupal through an XML feed. The loader process is custom code. It accommodates images as well as text.
Typically, breaking news items and story updates throughout the day are written directly in the Drupal UI. The Drupal system allows any reporter to post news without having to learn any technology skills.
In addition to Drupal's normal RSS output, the site provides iAtom feeds to the Associated Press and NewsML feeds to Yahoo for content enrichment and syndication.
Like most newspapers, parts of the Chronicle's website are hosted by specialty vendors on external servers. To manage the provision of theme-dependent headers and footers for those external pages, a Drupal "third party wrappers" module was created.
The Anatomy of an Editorial Node
There are more than two dozen content types in the system, but the most important is the "editorial node" — the not-so-simple news story that is at the core of the publishing platform.
The editorial node may contain a breaking new story, an opinion piece or just a single image or video. Taxonomy data and other factors are used in the theme layer to make decisions about how a particular editorial item is displayed.
The content type implements more than two dozen fields with the use of CCK and other modules. Publishing a story can be a simple task of completing just a few required fields (headline, body, section) or can be as elaborate as desired (multiple images and videos of varying sizes, breakout boxes, related-item lists, etc.)
Media: We made use of the Imagefield and Emfield modules to add photos and video to editorial content. Multiple images and video are grouped into a tabbed media box near the top of each story. A bit of custom code was used to add caption fields for each photo and video. Clicking on the media box opens large-format versions via Lightbox2. All necessary image sizes are created automatically through Imagecache — a luxury greatly appreciated by the journalists.
Related Content: News stories can be linked to other stories through a multi-value node reference field or by adding custom HTML content to a simple text field.
Authorship: Because the author of a published item may not always be a registered user of the site, a vocabulary of authors is used to contain byline information. This also supports multiple authors per story, a common practice in journalism. The theming layer formats the byline appropriately.
Topics Pages
Topics pages allow news, opinion, blog posts, Web links and other content types on a topic to be aggregated into a single page. A Topic content type allows for an editorially crafted summary of each topic, while all other content types are grouped into several river-of-news type formats. A great example for Augusta is the James Brown topic page.
Multi-user Blogs
One of the unique requirements for blogging was the ability for a single user to contribute to multiple blogs and for a blog to allow multiple contributors. For example, several sportswriters might collaborate on a football blog. One of them might blog separately about bowling.
To accomplish this, we created a custom module based loosely on Organic Groups that defines a blog container node and a blog post node. A single user can create multiple blogs (containers) and add blog posts to any of the blogs to which he has access. Integration with Views allows lists filtered by blogs and contributors.
Blogs also can have titles, images and descriptions.
User Profiles
All users are given the opportunity to personalize their profiles and network with other users on the site. The Flag module is used to support a Twitter-style "follower" model.
Each profile page aggregates a user's comments and blog posts.
Staff members get some additional fields for contact information, and staff writers' stories are listed and linked from their user profiles. A custom module associates staff user accounts with author taxonomy terms. A mini-profile is embedded on each author's taxonomy term page.
Mobile
Most newspapers have mobile sites that are disconnected from their main websites. Using Drupal, the Chronicle has a companion mobile-optimized site for smartphones. This is straightforward for a small site, but not so easy for a high-volume news site that interoperates with a caching server.
If you visit a Chronicle story link using a mobile device — a Blackberry, iPhone, Droid, etc. — your browser will be detected and you'll be redirected to the same relative path on a mobile-optimized domain (m.chronicle.augusta.com). This redirection is instantaneous and from the user's perspective, the site "just works." Since it's running from the same database as the main site, it's fully interactive and supports posting of nodes and comments.
The mobile functionality was built using the Domain Access module, Browscap for browser detection and a unique mobile theme. Domain Access originated as a Morris project for Skirt.com and was contributed to Drupal.org in 2006. For the Chronicle, its primary use is to redefine the theme and override section fronts, replacing Panels pages with simpler lists on the mobile site.
Data Migration
Migration of legacy data for the Chronicle has been the largest to date. Content dating back to 1996 was migrated to the new site including users, stories, blog posts, comments and images. There were more than 400,000 stories and 600,000 comments migrated. Most source content had been stored in a proprietary PostgreSQL database, while blog content come from a Drupal 5 blogging site.
The migration process included creating a custom script (built as a module using the Batch API) that connected to the source data, built content objects ($node, $user, $comment) and used internal Drupal save functions to store the data into the new database. The biggest hurdles included:
- relating source data to it's new destination in Drupal
- cleansing, splitting and/or merging data as it was migrated
- maintaining a record of source IDs to destination IDs so that content related in the source data could also be related in the destination (ie. comments related to users and nodes).
Performance
The Chronicle gets around 7-8 million page views per month and spikes up to 1.7 million page views per day during the Masters Tournament. The site runs the Pressflow variant of Drupal on a LAMP cluster that is shared with other Morris newspapers. A Squid reverse proxy cache protects Drupal from most anonymous traffic. Drupal cache tables have been moved into Memcache. The Authcache module helps accelerate authenticated-user performance. APC accelerates PHP performance.
Because of the unusually large dataset, a few Views-related performance issues cropped up that needed to be addressed.
By writing some code to alter the Views queries, removing some MySQL date functions and moving some WHERE clauses into subqueries, we were able to sufficiently minimize these performance issues.
Developers and Contributors
Augusta Chronicle
Jonathan Dozier
Morris Digitalworks
Steve Yelvington, Duane Jennings, Tim Bell, Geoff Maxey, Rick Havill, David Plutado Fugate, Nathan Rambeck, Chris Johnson, Dante Taylor, Roger Soper, Steven Jackson, Ben Holmes, Cameron Guill
Drupal version: Drupal 6.x