Gateway Community College (GWCC) wanted a new site built with the Drupal CMS and implemented using principles of responsive, mobile-friendly design. My colleagues and I worked closely with GWCC's Design and Web Technologies Manager to understand the requirements for their new site and to develop the features GWCC wanted, in the way that GWCC wanted them. These included:
- A faculty and staff directory.
- A calendar and event listing system.
- News articles.
- Content pages with flexible options for changing layouts (using Drupal's Panelizer module).
- A custom solution for displaying gainful employment data.
- Multiple options for navigating the site.
- A content moderation and approval workflow.
- A highly granular permissions for content editors and moderators.
This site turned out so well that it won the National Council for Marketing & Public Relations Silver Medallion Award.
Information Architecture, Menus, and Custom Menu Code
One of the notable solutions on this project was the implementation of navigation menus. As with other colleges and universities, GWCC's web site caters to multiple user types, including prospective students, current students, faculty and staff, alumni, and the community. GWCC wanted users to be able to browse the site based on what the site's content editors felt was relevant to them, as well as by browsing all topics on the site. After working with the client to develop a site map for the new site, we came up with a solution that involved two navigation menus: a main menu based on topic, and an additional menu based on target user type.
The user type menu has links to landing pages geared toward each user type, with content curated for each such user type. I suggested that we filter the news and event listing views on each landing page to show only news or events deemed relevant to the page's target audience. I implemented an Audience taxonomy vocabulary, added it to the news and events content types, and then added a contextual filter to the news view and events view to allow filtering them on a per-page basis for the landing pages.
The primary organizing mechanism of the site's content hierarchy was the topical navigation menu, which served as the main menu. This menu dictated Drupal's menu active trail for most pages. The menu active trail is Drupal's internal representation of where pages live in the menu hierarchy. It affects the breadcrumb trail that appears on each page, as well as the local navigation menu in the page sidebar column.
One of the challenges of this approach was that GWCC didn't want news article, event, or faculty/staff profile detail pages to have actual links in the menu system, but they did want such pages to have breadcrumbs and sidebar menus. I did some research into our options, and found the Power Menu module. This module allows, among other things, content types to be assigned to a particular menu item, so that each node of a particular content type is treated by Drupal as if it had a child menu link of the one selected for the content type, without there actually being a child menu link. For example, event nodes appeared as if they were children of the calendar page (in terms of their breadcrumbs and the local navigation menu in the sidebar), even though the events did not each have an actual menu item. Similarly, news articles were treated as if they were children of the news listing page, and faculty/staff profiles were treated as if they were children of the faculty/staff directory page.
Power Menu did not, however, work out of the box with our Drupal implementation. The issue was that we were using the Menu Block module to render the local menus in the sidebars. Due to the order in which various functions in Menu Block and Power Menu ran, Power Menu's changes to the menu active trail did not affect the Menu Block. I dug through the code of both modules, troubleshot the problem, and wrote some custom code to hook into both Power Menu and Menu Block, which solved the issue.
Gainful Employment Custom Module
GWCC needed its new site to display gainful employment data, which is information about the costs, credit requirements, and possible career outcomes of each certificate they offer. They had an existing system for doing this that another contractor had developed, but it had some flaws. Previously, they had been uploading data into a custom database through a convoluted process of massaging various spreadsheets before importing them into the database through PHPMyAdmin. The previous developer contacted me and asked if we could integrate his work into Drupal by dropping some PHP code into the body field of a page.
I got in touch with the client and we came up with a better solution that involved refactoring the code into a Drupal module, and creating a web-based user interface for GWCC staff to update the gainful employment data. I rewrote the custom gainful employment tool so that its database tables became tables in Drupal's database, and its queries used Drupal's database abstraction layer. I also organized the code into more granular, reusable functions, and took advantage of Drupal's API so I could use Drupal's theme functions, block system, user permissions system, and form API. I coded the form validation and submission functions with logic to prevent updates to the gainful employment data from corrupting the database, for example by leaving orphaned records in certain database tables. I made as many improvements as possible within the project's available hours and budget. The end result was a more easily-maintained solution, which better integrated into Drupal and followed best practices of Drupal development.
GWCC was the first project on which I was the development lead. I architected most of the development solutions for the project; created, estimated, and delegated tickets to other designers and developers on the project and to myself; assisted other developers on the project where necessary; and brought the project to a successful conclusion on budget. The client was so happy with us that they entered a large support contract with us, and gave us additional site redevelopment projects.