McGill University Health Centre Case Study

The McGill University Health Centre (MUHC), is one of the most comprehensive university health centres in North America. It includes a network of five major hospitals and is both a patient and research-oriented organization.

Evolving Web launched the new MUHC website in Drupal in December 2009. We are currently working on contributing some of the custom code we wrote for the project. The Apache Solr AJAX module was written for a previous Evolving Web project, but was largely refactored as we implemented search for this website.

The new MUHC website provides the public with an understanding of the dynamic and diverse nature of the MUHC. Users can find everything from how to contact their doctor to news and videos about ground-breaking research. It was particularly exciting to use the Apache Solr Search module and the combination of Spaces, Context, and Features in building out this functionality.

Spaces, Context, and Features

MUHC DashboardThe MUHC consists of a network of organizations, each wanting some level of control over its online presence. The communications department also creates collections of articles which need to be managed independently. To achieve this, the site is organized into a set of Organic Group Spaces. Each OG Space can be managed by a group administrator, who can enable and disable features for that group. The site uses the Open Atrium dashboard module to allow administrators to enable and disable blocks on the group's homepage.

Every Spaces-enabled feature implements the hook_atrium_dashboard() function to expose a block to the homepage of the organic group. Features that can be enabled include a job board, store, FAQs, and events feed.

Newsletters are an example of a more customized feature. Each group can enable a form so users can sign up for the group's newsletter.

To accommodate both the francophone and anglophone communities in Montreal, the website is entirely bilingual. To reduce any duplication of group settings, a single organic group is created for each hospital or institute. The group's name and description are stored in an "Entity Profile" node instead of as part of the group node so they can be translated.

The site uses Taxonomy spaces to create special landing pages for "Trending Topics". Each topic has a customizable dashboard. For example, on the H1N1 landing page, the administrator could enable the "Alerts" block to show H1N1-related alerts.

Faceted Search

MUHC Faceted SearchOne of the most exciting features on the new MUHC website is faceted search. The first thing you'll notice is that the search interface includes a tab for each major content type. By changing the tab, the user not only changes the search results, they also change the available set of filters. Tabs make the search interface more visual and fun to use. It's a nice break from the long lists of checkboxes we usually see on advanced searches.

The ApacheSolr module provides a filter by organic group. Since there are several types of groups on the site, we added custom filters to provide filtering by either organization or collection. There are also custom filters for events, articles, and news.

The search interface also includes an RSS feed, so users can subscribe to the results of their search. Filtering by "Research Institute Careers" and subscribing to the corresponding RSS feed allows users to receive an update every time a new career is posted to the Research Institute. The Open Search Feed module allows the Drupal search results to be returned in an RSS format.

The interface for the directory tab was customized so that users could sort the content alphabetically.

Search Replaces Views

MUHC Search Views In building the site, our team got really excited about the possibilities of search. However, on the old site analytics showed that not many visitors were using the site's Google Search Appliance. One of our ideas for getting users into the search interface was to replace views with search pages.

Rather than having a link to "See All" at the bottom of a block, we replaced fullpage views with search pages and replaced "See All" with "Search All". For example, clicking on "Search All News" directs users to the news tab on the search page. Instead of having to browse through hundreds of news items, users can narrow down the results using search filters.

Directory Synchronization

MUHC Directory Every project involves some kind of database synchronization or import. One of the more eccentric data sources for this project was the MUHC's internal directory of clinics, departments, and doctors. The only authoritative source for up-to-date phone numbers and locations at the MUHC was the organization's telecommunications system. We wrote a script that pulls data from the telecommunications department's Access database on a weekly basis.

Content Management

MUHC Views Bulk Operations For any site with thousands of nodes, the Views Bulk Operations module is a must-have. During the content migration phase of the project, being able to assign large quantities of content to a particular group was an essential feature.

Post-launch content management is equally important, and the site includes several views for administrators to sort and manage content.

Front End Development

The MUHC theme is a sub-theme of Zen 6.2. While the site includes numerous views and content types, it was built with as few templates as possible to ensure maintainability.

The site allows content administrators to post content in French or English and configure views differently across numerous organic groups. In building the theme, the goal was to be flexible enough to allow site administrators to take control of the site without needing to adjust any CSS.

The theme uses Cufon, a JavaScript-based font-rendering tool, to display custom fonts for menus and titles. This avoids storing text on the site as images and eases the translation workflow since resaving images for multiple languages is cumbersome.

MUHC Tabs Interface Visually, the site is information-dense. We added a tabs interface to group blocks of content on cluttered landing pages. Our custom tabs module automatically creates a tabbed interface out of any blocks in the tabs region of the MUHC theme. This is useful for group dashboard pages which can display a variety of different blocks in the vertical tabs region depending on how the dashboard has been configured. Tabs are also used on the homepage of the site.

Performance Optimization

Performance was an important issue, since the site has thousands of nodes, and many views and features. Since MUHC sees a lot of traffic, we worked on the caching a fair amount. Most page views are anonymous, so we used the Boost module along with Nginx. Boost caches entire pages by writing them to HTML files. The gzip option was turned on so that Boost also saves a gzipped copy of the page. To speed up logged in users' browsing and initial page generation time, we use apc as an opcode cache, and through cacherouter, to cache calls which would have gone to the database otherwise.

To alleviate the load on Apache, we also use Nginx as a proxy. It is configured to serve the pages saved by Boost, as well as the static files. It has the static_gzipped option on, so that it checks whether a file with the .gz suffix exists first, and sends it if it can. Saving pre-gzipped files saves on the CPU load for pages in high demand. In order to reduce the number of requests and bandwidth, we are also aggregating the javascript and CSS, and using the javascript_aggregator module to also minify the javascript.

Replacing the default Drupal search with Apache Solr Search greatly improved the performance of serach on the website.

Finally, since there are many modules and features, the system requirements' check of update_N hooks was terribly slow. We back-ported a patch from Drupal 7 to drupal_get_schema_versions.

List of Contributed Modules

Here are some of the contributed modules we used to build the MUHC website:

Evolving Web would like to thank Cindie Bilodeau and Daniel O'Leary from the MUHC for all the hard work they've put into this project. Thier advocacy for using Drupal and dedication to the project helped to make it a success.

Comments

I noticed that the implementation of multi-lingual content of the website without using a language prefix in the path.

Are content is and must one-to-one language mapping. What's that mean is a piece of English content should have a French version ?

@Anonymous

It is the organization's policy that every piece of content is provided in both English and French.
To accomplish this, we use the core drupal module "Locale", which provides an option to select the current language based on the domain being accessed. http://muhc.ca is the English domain, and http://cusm.ca is the French domain.

Hope that answers your question!