Vancouver Magazine Redesign

mellenger - February 10, 2009 - 22:30

Vancouver MagazineIn late August 2008 Grey Vancouver was awarded the contract to redesign the Vancouver Magazine website. Vancouver’s premier magazine covers the events, people and issues that make this city so vibrant. Mixing quality journalism with definitive service content, it reflects Vancouver’s emergence as a dynamic international urban centre.

Despite the amount of content published, Vancouver Magazine did not utilize a CMS system. All documents were authored and uploaded as static files using Dreamweaver, a process that involved manual tracking of files and updates in multiple locations. By leveraging a modern, scalable CMS they are able to make their web presence dynamic, mixing in social elements (comments, ability to share links) and giving their audience multiple ways to consume the content (location search, RSS, editor's picks).

Based on VanMag’s requirement of a solid content management system that could also foster an online community, Drupal was a natural choice. The precedent for Drupal based publishing websites for print magazines had already been demonstrated by Spin, PopSci and US Magazine. In addition, the client preferred Drupal’s open source license as there was no vendor lock-in to contend with.

The website needed to relaunch no later than October 30th, 2008. Given the tight two month timeline our team needed to hit the ground running. To help us meet this deadline we teamed with ImageX Media, a local Drupal shop, to assist with the initial CMS setup, module selection and some custom development. Also due to the timeline we decided to build on Drupal 5 as a number of key modules had yet to be completely ported over to D6. This was a particularly tough decision as we had just finished building a smaller site using Drupal 6 and have come to appreciate the improvements to workflow that version 6 contains. If we were to start this project now we would unquestionably built off of Drupal 6 as all the critical modules we needed (CCK, Views, Location and Gmap) are stable (and much improved!).

Our Process

Because of the short development schedule (less than 2 months) and the mass quantities of content that needed to be entered manually into the system, we began working in parallel once the new information architecture (sitemap, wireframes) and key user flows (shopper, foodie, clubber) had been approved. Sample user flow: The Foodie

Rapid Prototyping

Grey ThemeWhen we took a look at the content the first thing that was clear to us was that we needed to normalize, categorize and organize all of the content in a way that made the restaurant, retailer and venue information more readily available. Also, being a resource for local knowledge in Vancouver and the Lower Mainland of BC, we knew we needed to have a neighborhood taxonomy vocab added to each piece of content so we can group these different content types together in an intelligent way.

One of our main concerns with the short timeline was the quantity of content that needed to be entered into the CMS. Prototyping of the CMS configuration began in parallel with information architecture where we worked on the data structure and key user flows (shopper, foodie, clubber). One of the best things about working with tools such as CCK and Views is the speed that you can create a working prototype. Prototyping a complex publishing system during the information architecture process simply would not have been possible for us if it was not for these systems.

As our design team created templates for approval (about 10 screens in total) we were building out the Drupal site with a minimally styled, fast loading theme to aid in data entry. This site would eventually become the live site, and it allowed the data entry to happen while we were working on the final theme because we could force the data entry theme on the content creator’s user account.

We wanted the content entered as early as possible in the development cycle, partly because we wanted to work with real data rather than greeking and partly because when I would show a client a bulleted list of all of the fields that would be in the Article content type their eyes would glaze over and I wouldn’t get any sort of approval. By entering actual content early on we were able to collect feedback from the data entry team and the client on the CCK fields as well as a rough version of the node, and from there could reorganize, add or remove CCK fields.

We didn’t go with an automated scraping type application for the content because they were mostly multi-page articles and we would have to mess with trying to get that all organized programmatically. Cutting and pasting from the old live site to the new ended up being a good way to go because we could clean things up and at least a few eyeballs saw the content before it went live.

CCK/Views saved us here again, as naturally things would come up and we would need to add new fields or modify existing ones during development. Also, we had so many eyes on the content as it was being entered and tweaked and if there was a big omission in the data entry we could easily build views like “all the articles that don’t have article images” or something similar and have a few interns work on fixing or adding content to the nodes.

The data entry theme had a summary of the latest content being entered as the homepage so there was no debate about how the data entry was progressing and if we noticed articles or other content types being entered wrong they could be noted and processes modified right away.

Content Types, Specs for custom modules

We installed the modules we thought we would need (major ones listed below) and started with the Article content type so the data entry could start, then rolled out the other content types as we specced and designed them so the data entry could start on those sections as well. There was talk in the beginning about combining the restaurant, retailer (shopping search) and venues (bar and club search) content types together into one but we got spooked at one point that the content entry form would become too unwieldy once all the various edge cases were added in. In retrospect it was a good decisions because those different pieces of content would never be listed together, or searched for. Though they share a common search interface they are different user flows. At this point they are fairly similar, but in the future restaurants will have menus (food menus), retailers could have specials and venues could have other info listed that wouldn’t apply. Each of these content types can grow into their own now without worrying about creating some sort of form-zilla on the admin side (or page-zilla.tpl.php file).

Interface Design

Our UI designer was working on layouts while we were working on the wireframe version of the site. We work beside each other and it worked well as he could show me what he had mocked up and I could show him the modules, content and content types as they were coming together. It helped the design because he could browse through the wireframe site and see how much content was there, how big the decks were, images, etc. Both sides had to iterate, the comps changed to support some of more default ways that Drupal would print content out, and we worked on theming out the data and interface to fix some of the UI issues we were dealing with. I can’t say that we didn’t have to re-enter or modify anything, we made a lot of changes on things that we thought had been locked down and approved. Even with that feedback and iteration I believe that the hours we put in were less than if we had been handed user flows and UI and hadn’t had any input along the way. Plus having genius programmers involved earlier in the process makes a better product in the end.

Examples of the wireframes that were presented and approved by the client:

Examples of the finished comps

Hosting Environment

The live site is running on a fully managed SAMP (Solaris, Apache, MySQL, PHP) server run by Bell. This box is hosting all of the TransContinental websites. We are using ImageMagik as the graphics library, and although we did our development using SVN, we have no source control on the live server.

Front End Development

Front end development happened in a typical fashion, and it didn’t really start until all the archival content had been entered. Because we had actual approved content and images in the database, the client could see their content realized in the new design as we brought page and node templates online.

I would put together a wish list of the templates that we needed for theming and our UI designer would created the templates, get them approved by the client and we could start building out those content types. Once all the templates were complete I had a PSD which I could refer to for style guidelines for the various blocks and views on the site.

An example of the header comp, approved early on so I could get started.

Some design decisions we made:

  • Primary Menu. It isn’t part of the Drupal menu system. We did this because the top 6 menu items will never change, and if it does we would be involved to create the new graphic sprites for the menu item. The primary drop down menu items are editable HTML content blocks which are called from a special content area. This way they can be edited easily if new items need to be added using HTML or l().
  • Secondary Menu. Managed as a traditional Drupal menu, rendered with the help of Nice Menus and a jQuery hack so the primary menu drop down appears on top of it correctly.
  • EqualCols. We are using a jQuery script to make the columns on the multiple column layouts all the same length. This is to deal with the challenge in pure CSS layouts where you can’t set columns to the same height. It’s a bit hacky, but it loads last and saves me from having to create a pile of different background images (one col, 2 col, 3 col search, 3 col regular). It runs by looking for any div with class=”equal”, iterates through and sets the heights the same. In situations where the height changes, like on the restaurant search page where you can open and close the fieldsets on the node filter, you just run it again when it’s needed.
  • I love Block Class as a front end developer. It’s simple and cuts down on the mass amount of css.
  • Hidden check boxes. One fun thing we did was to hide the checkboxes and make new fake ones using CSS sprites and jQuery. This way they could be a bit more subdued than the standard ones, and are styled a bit more consistantly between browsers. The trick is to use display:hidden with them so the browser still treats them like they exist, the annoying part is that each browser pads and sizes them differently, so there is a bit of work there.

List of Key Contributed Modules (sorted alphabetically)

  • Block Class : Lets you add a CSS class to blocks from the Drupal admin.
  • Calendar : Generates calendar grid views of the event nodes
  • Date : Needed for the events
  • Default Filter : Every Drupal 5 site needs this if comments are turned on.
  • Gmap : Generates all of the embedded Google maps on the node view pages
  • Hierarchical Select : Categorize the articles when they are being created.
  • ImageCache : Always. Prevents the client from breaking the layout with images.
  • Imagefield : Modified for this project so we can store an expiry date, credits and a photographer URL with each image.
  • IMCE : Gives client ability to upload and manage some files through the admin interface.
  • Javascript Aggregator : combines and minifies the javascript includes.
  • Location : Stores address information for nodes, used for the retailer, restaurant and venue nodes.
  • Nice Menus : Easy drop down menus, used on the second level menu
  • Related Links : Adds fields for internal or external URL's which can be attached to nodes, as well as generating related links based on keywords, tags or content type.
  • Scheduler : Set publish dates on content.
  • Thickbox : Used this for additional images within articles, the list player and event viewer.
  • Tiny MCE : Makes adding page breaks and setting the drop cap in the articles a bit easier. We have most of the buttons disabled.
  • Views Fast Search : Used on the restaurant, shopping and venue search.
  • Views : What can I say about views that hasn't already been said.

Custom Modules

Frontpage Feature Queue

We developed a custom module for the hero article on the home page. On the admin side the content creator is presented with a list of 10 or so node reference fields with a date input field beside them. The content creator looks up the title of the article using a node reference field and sets a date for the article above it to be bumped off the list. That way when the date comes the displayed article is replaced by a new article. It operates outside of the Drupal publish/promote/sticky system so we could use those for other things. The client will publish all the articles in a month on the same day, but wanted to be able to feature a new hero article every few days during that month (edit: We just found out about Node Queue last week).
 
 
 
 
 

List Builder

Probably the most custom work of any feature on the site, the popup lists are outside of drupal’s node system, but can lookup and autofill from nodes if needed. On the admin side, the workflow for the content creator is to create a new list by giving it a name, and then add items to that list. A list item consists of an image, a title and a description, but there is also a node reference lookup if they are creating lists from content that already exists on the site (eg. top 10 mexican restaurants) to autofill these fields. Once the title, image and descriptions have been populated, any of the fields can be edited as needed before saving and moving on to the next item.

To add a list player to an article, there is a ‘list lookup block’ which appears when you are logged in as a content creator in the right column. From there you can check the list ID of the list you want to link to, and add the link to the article using a syntax like [123:Best Mexican Restaurants]. We are using a custom filter to convert that syntax to the thickbox code we need to launch the player as an inpage popup.

Restaurant/Retailer/Venue Search

The search is a combination of Views, Fast Search and custom AJAX overrides. We use Location and Gmaps to present an embedded google maps view of the results. We based some of the google maps API work, specifically talking back and forth between the list and the map, on the tutorials by Mike Williams (http://econym.org.uk/gmap/).

Calpop

Changes the default action on the calendar so clicking on an item in the calendar launches the node into a thickbox window rather than sending you to the node view.

The Future

We are working on adding some new features for phase 2, specifically turning on some of the related links blocks and some others to build up the stickiness of the site. There are some changes we will introduce so the list builder items can be searched and we are also working on a mobile experience and a custom tourist experience which we think will be really great.

Additional Links and Credits

Original vanmag.com : web archive

Grey Vancouver

ImageX Media

real value!

PlayfulWolf - February 2, 2009 - 12:08

Wow! Great writeup with real value. Have a question: how you made wireframes? With help of test Drupal theme (Zen...) or Dreamweaver (and likes) or both?
--
naslenas.com - personal Drupal blog experiment

We create wireframes with

mellenger - February 8, 2009 - 05:38

We create wireframes with Illustrator or Photoshop and usually present them printed out on boards to the client. They are used to show the hierarchy of the content on that specific page. To make the hierarchy clear we use minimally styled plain text and organize it in boxes on the page.

Once the wireframes are approved they are fleshed out into the actual comps that we will build out the site from.

Andrew

just wireframes are so good,

phd_hiren - February 11, 2009 - 04:32

just wireframes are so good, I looked layout/site afterwords..
great, congrats for wonderful clean site.

I want to know more about

adrianmak - February 10, 2009 - 23:38

I want to know more about the primary menu.

Beside creating a few special block area in the theme to hold the submenu block of primary menu,
To make them visible/invisible when hovering the primary menu, are you using jquery/javascript code snippet to did the job ?

Primary Menu

mellenger - February 11, 2009 - 17:22

Yup that's right, the drop down uses jQuery to hide and show the divs. The only thing a little bit different about it is that i also set the z-index of the secondary menu into the negatives because it was appearing on top of the drop down.

Also one thing you need to be careful of is that your ad server makes sure to set the flash rich media ads to wmode="transparent" so they respect z-index and the drop down appear properly. Flash 10 fixes this problem but it's important for older versions of Flash. I experimented with using jQuery to add the wmode attribute after the page had loaded as a safety measure but it really bogged things down.

Andrew Mellenger
http://twitter.com/mellenger

well well.

saltcod - February 11, 2009 - 13:13

well well.

a) the site is ridiculously awesomely nice. period.

b) how [the hell!] did you do the calendar? Just with the regular calendar module? Its awesome.

You've done very very well here. Thank you.

The Calendar

mellenger - February 11, 2009 - 17:13

I'm happy to say I was able to theme the calendar using the calendar module's themeable functions and a views filter to organize the filter options. We used hook_form_alter() to transform the multiple select list to checkboxes as we did on the restaurant, venue and retailer search. Ben did the custom modules and views filter and I did the front end development and would go in and tweak it to print things out how I needed them. Worked out well.

Glad you like it!

Andrew Mellenger
http://twitter.com/mellenger

wow!great

jinlong - February 11, 2009 - 13:32

wow!great work!

---------------------------------------------------------------------------
Drupaluser.org--I am the master of my Drupal

great work and explanations.

deepM - February 11, 2009 - 16:15

great work and explanations. thanx on sharing it with comm.

Without comparison, this is

David Henry - February 11, 2009 - 16:34

Without comparison, this is the best Drupal site I've seen.

I would love to know what powers the nav and the calendar?

Also, why Durpal 5x?

JB

...if u read post its

deepM - February 11, 2009 - 16:37

...if u read post its clearly explained

So it is...I'm new to Drupal

David Henry - February 25, 2009 - 19:12

So it is...I'm new to Drupal and not familiar with all terms yet...it's a big curve at the moment!

waaaaaah

Looks great! And cool to

Wim Leers - February 11, 2009 - 17:37

Looks great!

And cool to have another high-profile web site using Hierarchical Select! :) Please contact me if you'd like to be listed at http://wimleers.com/demo/hierarchical-select/live.

Great job

danboland - February 11, 2009 - 18:02

I really like the primary navigation, particularly the way it's split into two autonomous, functionally different sub-panels, for lack of a better word. I can't recall ever seeing that representation and it works really well.

list buillder

justageek - February 11, 2009 - 20:37

can you describe the list builder a little more, specifically why it is outside the node system?

List Builder

mellenger - February 12, 2009 - 21:43

It's outside the node system basically because we didn't want it to be searchable at the time (we are changing this in phase 2). In doing research on these slideshow type pieces of content there are basically 2 ways to go. You either run them in a popup and remove them from getting indexed (because you wouldn't want anyone to arrive from a SERP and land on a blank page with no site structure around it) or else you show them as full pages and index them ( like the book content type basically). The client originally didn't want it to be possible for someone to arrive in the middle of a list, so that's why it's built this way.

Andrew Mellenger
http://twitter.com/mellenger

Look nice

Tod27 - February 12, 2009 - 09:35

That cool design.
But how do you create navigation menu?
Is it some build-in Drupal menu, or some additiona script?

Really slick work guys!!!

thomjjames - February 12, 2009 - 14:27

Really slick work guys!!! Congratulations!!

Tom (James)

______________________________________________
What is DrupalSN.com? - http://drupalsn.com

Menus

mellenger - February 12, 2009 - 21:47

The Primary menu is HTML blocks printed out in divs in the template using something like <?php $out = module_invoke('block', 'block', 'view', 4); print $out['content'];?>.

The Secondary menu is a normal Drupal menu using the Nice Menus module.

Andrew Mellenger
http://twitter.com/mellenger

May I ask for what is the

adrianmak - February 14, 2009 - 22:23

May I ask for what is the 'view' and 4 arguments refer to in the module_invoke function ?

You have to use view to get

mellenger - February 23, 2009 - 23:01

You have to use view to get it to print, i guess 'edit' would be another option. 4 is the "id" of that html block. I usually get it from the edit URL (eg. /admin/build/block/configure/block/4). Here's some more examples: http://mydrupal.com/place_blocks_anywhere_on_site

It's probably bad form to load blocks this way but it's great to return only the contents of the blocks and not a bunch of extra divs.

Very nice looking web site

hectorplus - February 13, 2009 - 02:46

Very nice looking web site indeed, go Vancouver!

HectorPlus.com

Very cool

JubW - February 13, 2009 - 05:50

Very cool thanks for posting this case study

Web Hosting Coupons

nice writeup

seutje - February 13, 2009 - 08:17

Very well written and nicely illustrated with the images.

I still have a few questions though:

  • what convinced you to use D5 instead of D6? was it readiness of modules or because you had more experiences with D5 API?
  • will you be contributing any of your custom modules?
  • are you planning to upgrade to 5.15?

Drupal taking over the world!

great work and explanations.

phpsharma - February 13, 2009 - 13:55

great work and explanations.
sharma chelluri

Here's some answers:

rickvug - February 13, 2009 - 20:19
  • Drupal 5 was used because of the readiness of a few key modules like gmap, location and views. A number of months later the situation is very different. Drupal 6 is the way to go now, no question.
  • We'd like to contribute a number of the custom modules. We've been talking about abstracting some of the AJAX map searching stuff. Ben has used a similar technique on another project but needed to implement it slightly differently. As time allows the goal will be to make both sites use the same code in module form. From there it can be cleaned up to be released. There are no guarantees that is will happen so feel free to message Ben for the code if you'd like to take a stab at it.
  • 5.15 is in the 5.x line so it is not an update line moving from 5.x - 6.x. Like any production site we'll need to keep up with security updates for core and the contrib modules.

-------------------------------------------------------------------
Rick Vugteveen | ImageX Media (work) | Blog (personal)

I keep coming back to this

saltcod - February 13, 2009 - 14:09

I keep coming back to this site - its really really good.

A few more questions:

1. how are you doing the article pagination?

2. any rough ideas about traffic? Hits per day/week?

Thanks!

two questions

mellenger - February 14, 2009 - 01:41

Thanks so much, glad you like it.

1. we are using pager, which I should have mentioned above. In the theme's page-article.tpl.php file there is a switch to look for the page variable in the URL and treat the title and deck differently if it exists.

2. Not positive on numbers, but the site stickness (how long a user stays on the site) went up about 300% with the new design.

Andrew Mellenger
http://twitter.com/mellenger

nice! I like

Konstantin_by - February 17, 2009 - 15:34

nice! I like it

http://daadaa.net - my drupal
http://antresol.by - my vbulletin

nice!

arianek - February 13, 2009 - 22:33

Really nice work guys, I especially like your wireframes, but I've got total PM head right now ;-) You should totally cross-post this to the Vancouver group so everyone can see it!

Wonderful website and.. wireframes! :)

simsim - February 15, 2009 - 23:58

I like the layout that resembles a paper magazine; really good use of white space and contrast. The only caveat I see is a bit of inconsistency in typography. Sometimes sans fonts are used albeit the whole design seems more sans-serif oriented. Would be more charming to stick with sans-serif because of the magazine's logo and website's header, but that's just my opinion.

Also, and like some others have pointed out, the wireframes are uniquely interesting. While it might be off topic here, it would be nice if you could shed some more light on how you conduct designing and implementing them. Forget about my signature for a moment. :-p
________________________
"Creativity is knowing how to hide your resources" - Albert Einstein.

Awesome insider look

samperez - February 21, 2009 - 10:56

Thanks for the inside look into your website development work.

Great writeup, keep up the good work.

--
Travel to Peru

--
Samir Perez
Sumaq Peru Travel SAC
Peruvian Travel Agency and Tour Operator

May I ask some jquery

adrianmak - February 24, 2009 - 13:34

May I ask some jquery hovering problem on IE ?
I simulate the same menu effect on my testing drupal.
It work smooth on firefox, the popup submenu can hide and unhide while hovering the menu.
As I knew that IE 6 doesn't support hover on element except anchor

Then I write a small jquery javascript on page.tpl.php
something like that

$(document).ready(function() {
$("#primary-menu2 li.restaurant").hover(
function () {
$(this).addClass('over')},
function () {
$(this).removeClass('over')}
);
});

however it doesn't work at all.

Nice site

skullcap - February 26, 2009 - 14:42

Nice site and good read, probably the niceset news site I have seen.

Great site

Imre Gmelig Meijling - March 23, 2009 - 21:17

What a work went in there. I think it's great you posted the process with the wireframes and all. It helps us get some insight in how we could upscale the development process further in terms of techniques and methodologies.

Thanx for sharing!
Imre Gmelig Meijling
Internet Unlimited

"Good is the enemy of great" -Jim Collins
internetunlimited.nl

 
 

Drupal is a registered trademark of Dries Buytaert.