In October 2008, NuMedia Advantage launched the new Just Racing UK website, a racing and Triathlon (running, cycling and swimming) event management website. The build process was relatively complicated, involving a lot of modules, some of which were dropped, some of which worked right out the box, and some of which required a good degree of hacking and customisation.
Requirements
Just Racing's first website was created by a different design company and offered the visitor the ability to view up and coming race events, and book races electronically through a third party. As well as bulking out the process for the visitor, Just Racing incurred very high processing fees.
We were asked to take inspiration from the exiting site, but add the ability to: -
- Promote and Process events
- Offer payment processing online
- Vary sponsorships
- Create and manage online start-lists (based upon age and swim-times)
- Display previous years race results
- Manage race-specific newsletter subscriptions
- Utilise an existing database
It went without saying, but a fresh new look was also required.
The Core Modules
With it's powerful, open framework and incredible array of modules, Drupal (version 5.x) was the first choice for a base platform (we did want Drupal 6, but at the time, Ubercart was not available for this release). The usual modules such as CCK, Views, FCKEditor and Webform were installed as standard.
The tricky part was finding an appropriate event booking and payment system, that could be developed into a larger database for the start-list tracking and newsletter subscriptions.
We looked at CiviCRM, Event, E-Commerce and Ubercart. After a lot of testing, trial and error, Ubercart was chosen as a base for the payment processing. We just needed to turn an event into a product taking into account product expiry (after the event date), single quantity (each user can only register once) and links to previous years' results and start-lists.
For a full list of modules we used, see the technical information at the bottom of this article.
Selling an Event with Ubercart
As with most Drupal concepts, there are many ways to achieve a task. Although there is an Ubercart Event module, after some testing we decided an integration with CCK Date was a better way to go. CCK works so well with views and allows for a much greater level of customisation on the date field that the Event module.
So, a Race Event CCK content type / Ubercart class was created using a combination of CCK Date, CCK Filefield (for results), CCK Imagefield as well as the standard CCK text fields.
By default, Ubercart has loads of physical product fields such as weight, stock level etc.. A custom module was created at this stage to hide these unnecessary inputs using the Form API. After all, an event needs to look like an event for the race editors as well as the visitors.
The final customisation for the race event was an expiry module. Once a race has occurred, we do not want visitors to be able to register for it, although they will revisit the node to view race results. This custom module simply hides the "Add-to-cart" button if a certain date has past and checks again upon payment (for saved carts from the past).
Race events have a different price depending upon UK club membership discounts as well as single / team registrations. For this reason, Ubercart's Fixed Price and AAC (Ajax Attribute Calculation) contributions were installed and several minor module and theme hacks were required to make it all work as required.
The Sponsors
Just Racing have a variety of sponsors for each event, as well as varying sponsors over time (which are displayed on the home page). A simple view was created to randomly vary the position of the sponsors. The sponsor nodes themselves use CCK Redirection and CCK Image to display a hyperlinked image to the sponsors' website.
Event-Specific Newsletter Subscriptions
Just Racing UK needed to manage E-mail lists of people who have entered a particular event. Most of the events repeat annually, and Just Racing did not need year-specific filtering for the newsletters. This made the task very simple - we just created roles for each race name and created an Ubercart product feature to automatically add purchasers of a race to its particular role.
The Simplenews with Simplenews Roles modules can be setup to send newsletters to the race-specific roles but this made it difficult to unsubscribe users from the list. At the time of writing, Simplenews Roles will automatically resubscribe users on the next CRON run.
We created a custom Workflow NG rule to subscribe users to newsletters when they complete the checkout with specific products. This works well, because they can manage their own subscriptions.
The Existing Database
One of the critical tasks was to import an existing database of over 5000 records. Essentially, the only information required was the name, E-mail address, date-of-birth and the races entered.

As the primary purpose of this database was for the newsletters mentioned above, a simple User Import was all that was required. The User Import module does not support varying roles out-the-box, but modifying the module allowed us to map role based columns from the CSV to roles on the user account.
Finally, users were notified on their new account on the website which greatly promoted the site and resulted in a phenomenal increase of event registrations.
The Theme
The theme itself was the usual two and three column CSS / XHTML using a PHP template.
As a varying two / three column theme was required, some of the CSS positioning is dependent on the visibility of the sidebars. To make the columns fill to the bottom, we used the overflowing margin trick with a solid back-colour.
The only other point worth mentioning is the primary-links. We wanted to vary the links depending upon whether we have a logged in user, but make sure that they are justified on both sides. We simply set the overflow of the primary-link container to hidden, and positioned the varying items towards the end. This navigation is actually perfect and required no further modifications.
Automated Start-Lists
The start list is the positioning of people at the beginning of the race. These are usually grouped by age and estimated swim time, but can vary upon other factors.
Collecting the information is tricky in itself because people will want to register races for themselves as well as their friends. Also, there are team entries which further complicates things. It is critical that this information is correct as t-shirt ordering and race positioning is calculated from this data.
Upon registration, users are asked for their personal details including swim times, t-shirt size and British Triathlon membership numbers.
An Ubercart "order pane" module was written to collect the start list information. By default, this information is taken from the user's profile fields but the module allows for this information to be edited if for example, the order is for a friend.
To display the start-list information another custom module was required, using Drupal's theme table functions as a display mechanism. Each race event has a custom SQL order clause which can be applied to a SELECT query which generates the list. Certain fields can be exluded, and these are passed as URL arguments.
The automated start list is used as a guide until the final Excel based version is released just before the race.
Drupal 6
Eventually, we want the site running on Drupal 6. At the time we created the site, Ubercart was not production-ready for Drupal 6 and most of the Ubercart contributions were for Drupal 5 only.
Drupal 6 and version 6 modules offer a lot of the functionality we were looking for out of the box, which will make things much easier to maintain. Drupal 6's AJAX admin area (including views) is so much better than Drupal 5, and we look forward to the end of "weight" settings!
Now that Ubercart is ready for Drupal 6, we are keeping an eye on the contributions. It is critical that the site functions correctly as the traffic is very high. For this reason, we expect an upgrade will take place at the end of the race season. At the same time, a new theme will also be designed making the site fresh for the next season's races.
And finally...
The site is doing extremely well attracting a large number of visitors and registrations, and we will continue to promote and optimise the site. Just Racing have plans to include social networking features on the site taking advantage of forums, chat and personalised user home pages which is exciting.
So far the site has over 7000 registered users and race registrations are up by 400% compared to last year which is an unexpected surprise considering the current financial climate - a great success for Just Racing and a great success for Drupal and Ubercart.
Technical Details
Contributed Module List
- Administration Menu - a must for all sites! This makes navigating the admin system so much easier. It also means the theme does not need to include the naviagtion menu block so we get a similar view to the visitors.
- CCK field modules - including fieldgroup, download dropdown, redirection, file field, imagefield
- CCK Blocks and Node Reference - used to display and link to sponsor information on the races.
- Date / Time - Calendar, Date and Date Popups
- Devel - helps a lot with debugging!
- Mail / Newsletter - Mime Mail, Simplenews, Simplenews Template and Simplenews Action for Workflow-NG integration
- Usernode - views integration for users and searching
- FCKEditor / IMCE - the WYSIWYG choice for most of our sites
- Pathauto - automatic URL creation
- Secure Pages - the admin and order pages are SSL protected
- String Overrides - the easiest way to make some of the Ubercart text UK friendly - ugly, but it works!
- Update Status - again, absolutely essential
- Webform - another must-have module
- Ubercart - including attributes, legal aspects, roles, taxes, ajax attribute calculations, fixed price, importer, product kit, restrict quantity, payment method adjustments (covers PayPal fees), PayPal, store coupons
- Views - including the bonus pack
- Workflow NG - An Ubercart requirement, but also used with SimpleNews to automatically subscribe customers
- Google Analytics and XML Sitemap - submits nodes only
Custom Module List
- Start List - creates an extra order pane both for customers and administrators as well as displaying start lists generated from race order information
- Ubercart Availability- makes a product expire after a certain date and time. The node is still visible to allow for result sheets to be published
- Ubercart Custom Product Form - hides certain fields from the product node view using FormsAPI
- Order Export - exports a detailed list or order information including attributes, profile fields, start list data etc..
About NuMedia Advantage
NuMedia Advantage are a website design and development company based in the UK specialising in Drupal and PHP development.
Comments
URL?
I just skimmed the writeup but I don't see a link in there anywhere...
Michelle
--------------------------------------
See my Drupal articles and tutorials or come check out life in the Coulee Region.
Links
Hi Michelle,
You're absolutely right. The URLs are http://www.justracinguk.com and our website can be found at http://www.numediawebdesign.co.uk.
Thanks for pointing it out...
David
Looks very good, very
Looks very good, very professional!
Great site with a very
Great site with a very innovative combination of CCK + Ubercart for event management. I'm glad you were able to figure out the custom "glue" module development. : )
----------------------
Drupal by Wombats | Current Drupal project: http://www.ubercart.org
~
Very nice layout and also great write up!
great work! up up!
great work! up up! ;)
---------------------------------------------------------------------------
Drupaluser.org---Sea water droplets together
Nice work. Thanks for the
Nice work.
Thanks for the article.
---
Drupal Theme Garden
Congratulations
Congratulations on getting the website up...
The features are clear and communicative too. Here is my 2cents
a. The red color font for the #sidebar right is jarring to the eyes, you might consider changing it to "Azure" or some other color where the text is readable
Thanks,
Nutrix
simplicity in solutions
www.nutrixtech.com
Colour on the sidebar
Thanks Nitrix for you comments. The client particularly wants red links, but a few people have mentioned this. The other option is to lighten the grey box. Maybe I should run this by him again.
Great website!
Fantastic work.
I'm curious as to how you handle two things.
1. Registering different people for the same event.
eg, If I want to sign up myself and my friend in the one transaction, can that be handled?
2. Registering a team for an event.
How do you handle gathering all the different details for all individuals?
Regards
Alan
Drupal development and themeing, Galway, Ireland
Registering Different People
Hi Alan,
Currently, Teams are handled on the order-pane. You just put your team information in there - all we need is a name right now (although this is going to change as each member needs a T-Shirt). Teams are raced separately and don't need to take swim times into account (AFAIK). However, this is something that needs to be looked at as a clone of this site may be required for a similar job and they will want to register family tickets etc...
For multiple entries for different people I expect attributes would be a suitable mechanism but we'll see when we get to it. Like all things Drupal, there's lots of ways to accomplish most tasks!
Ubercart for Event Handling
Ubercart is a great way for selling events and the solution I've been using for a new site I've been working on for a few months now.
Nice work. Site seems pretty
Nice work. Site seems pretty snappy for a high traffic site. Seems well optimized.
One note on the theming: the red text on the grey background in the right nav blocks is extremely hard to read. It almost flashes to my eyes.
----------
SunriseWebDevelopment.com
Red Text
OK, the red text is gone now! I'll flush it through the theme cache when the site's a bit quieter.
MUCH better, nice
MUCH better, nice work.
----------
SunriseWebDevelopment.com
Congrats that's a good job
Congrats that's a good job especially for the events part if there's area to be improved i think it will be on the design part.
Write-ups like these are
Write-ups like these are fantastic - just what Drupal users need
Press Release 001 | Do Follow 001
Ooh very nice site! And
Ooh very nice site! And great writeup too (though I guess that's to be expected if you're a webdev company :P)
works at bekandloz | plays at technonaturalist
Congrats
Congrats on a nice site.
I recently also had to hide a bunch of Ubercart fields. The ones that had to be conditional I created a custom module but for the rest I used the Formfilter module and it all worked out fine.
http://drupal.org/project/formfilter
and Ubercart seems to indorse this module.
http://projects.ubercart.org/faq/6737
Thanks for the form filter
Thanks for the form filter tip - that could have saved some time! Always good to know for the future.
Excellent...
+1 on doing a really nice write-up here Dubs.
It was insightful to see how you went about tackling the challenges you were presented with. Keep up the good work!
Dave
Mediacurrent
Thanks for the write-up. I'm
Thanks for the write-up.
I'm interested in the process you went through to auto-register a few thousand folk (from a mailing list?)
I'm being asked to do the same, and am concerned about 'signing up' people who didn't really intend to be interacting with a website, and [providing them with/requiring them to have] a password and profile...
I guess I'm worrying too much, but can you describe how that went for you? Did you create a custom notification of new account email and trigger that?
The tweak to map user-import to roles sounds like a useful contrib.
.dan.
if you are asking a question you think should be documented, please provide a link to the handbook where you think the answer should be found.
| http://www.coders.co.nz/ |
.dan. is the New Zealand Drupal Developer working on Government Web Standards
Hi Dan, Thanks for
Hi Dan,
Thanks for reading....
To get the users in, I used to User Import module (http://drupal.org/project/user_import). There are options in there to specify whether to E-mail the user or not.
On the plus side, E-mailing all of Just Racing's previous user was probably a huge boost to the site, getting people interested in racing this year that may not have otherwise. If you write your E-mail well, you can make people feel included and then they should be happy. We offered the option for people to reply and have their details removed / unsubscirbed too so that should help.
And yes, I should get round to feeding back some of the code soon to the modules. I think we are getting close, but some of the code is rushed and works on our very specific setup.
David
Thanks. I guess that for
Thanks. I guess that for genuine target audience, such an inclusion IS a positive thing. Your story shows that it can be done successfully.
I'm just to jaded and paranoid about sign-ups and spam etc... Just because *I* don't want someone submitting my contact deatails into yet another database doesn't mean everyone else feels the same...
.dan. is the New Zealand Drupal Developer working on Government Web Standards
nice work! I have a question
I just entered drupal.org to find some guidance, I'm new to Drupal and I'm doing my second site for a client and made a sponsors block similar to yours. I can't theme the images inside divs to give them some margin, can you tell me how you did yours? I'm using CCK, CCK Image and views to make the block. Thanks and keep up the good work!
Regards,
Eduardo Domínguez do Amaral
www.simonline.com.ar
----------------------------------------
Very nice site i must say
Very nice site i must say .
I see how customized is you user registration page .
If you dont mind telling me how you achieved that .
i seen you mentioned the webform module in the list of modules that you have used , but not mention of the content profile module.
Was the webform module use for user registration ?
Thanks for reading the
Thanks for reading the article....
The user registration page works with simple profile fields using the core profile module. You can configure it at /admin/user/profile once the module is enabled.
We also use User Node (http://drupal.org/project/usernode) to make the profiles visible to views, but I wish we didn't have to as it makes thousands of nodes! Still, it's a really useful module for us.
very nice. Thanks for
very nice. Thanks for sharing your work and modules/steps involved.
+1 for writeup.
--
I am available for drupal customization work.
A timing question
Great workout of all the modules and how they work together to create the site.
Can you share a ballpark figure how many man-hours have been spent to reach the completed project? (including the trial and testing)
Thanks and congratulations again!
Tom Steenhuysen
justcallmetom.com
-
I do not see things the way they are - I see them the way I am
Hi Tom, It's really hard to
Hi Tom,
It's really hard to even give you a ballpark figure. I would say it probably took about three months or so, but not all of that was solidly on this project - probably between 250 and 350 hours perhaps, but I'm honestly not sure!
Initially, I put a lot of my own time into the project (i.e. in the evenings) researching CIVICRM etc. because I knew this would be a package we can reuse with other event management companies.
David
DRUBERTASTIC!
A perfect example of what can be achieved with Drupal, Ubercart, some imagination and (I expect) a large dose of hard work!
Drupal
I want learn basics of drupal, Please suggest me a site.
send flowers
http://www.usingdrupal.com
http://www.usingdrupal.com and http://www.doitwithdrupal.com ; )
----------------------
Drupal by Wombats | Current Drupal project: http://www.ubercart.org
check out
check out http://www.venturacottage.com/tutorials/ubercart-running-straight-out-box
Hi Dubs, small world! Having
Hi Dubs, small world!
Having raced a few times last year in their events I saw the Just Racing Site a few weeks after relaunch and thought hmmmm.... this looks Drupalish :-), looked and saw it was! I was very impressed then.
I did the Team MK (www.teammk.com) website in Drupal 5 so its nice to see another triathlon site using it too. You've done a way more professional job than me though although Team MK was my first web site ever! Maybe BigCow should have got you in when they did their rewrite! Their loss I think. :-)
Andy
Has anybody good manual how
Has anybody good manual how to make prof. site on drupal6?
http://daadaa.net - my drupal
http://antresol.by - my vbulletin
Mind blowing work
Hi Dubs,
Really it is nice work.
I have one doubt about the registration page. How you integrate the password and confirm password in the registration page. Please reply me as soon as possible. I need that requirement in my site.
Thank you
Sorry I missed this one!
Hi Pooja,
Sorry I missed this comment, and by now I'm sure you've figured it out....
To integrate the password and confirm password option on the register screen, there is a user settings page in the admin area which is default to Drupal. You can specify that users can create accounts without approval, and also that E-mail verification is not required....
Glad you like the site!
Dubs
How to learn the basics of this?
from where i learn the basics of this?
Edited by WorldFallz - link spam removed.That's a hard question...
The best place is probably the documentation pages, and then for me, it was purely experience, trial and error. You could also get a Drupal book which can help especially with theming and module basics - sometimes a hard copy is better than reading on screen!
There is usually a documentation link on the specific module you're interested in. As far as knowing which module to use, well that's a matter or reading the long list and deciding for yourself.
Finally, don't be afraid to ask (as long as you've already read and tried the documentation first!) in the forums. There's lots of willing and able people there, but like I say - make sure you read and try the documentation first.
_
sorry you bothered to answer this-- more than likely it was just link spam. ;-(