Voting starts in March for the Drupal Association Board election.
About Eurocentres – Language Learning Worldwide
Eurocentres is one of the leading organizations within the language travel industry, with schools located in more than 120 countries over four continents. Currently, Eurocentres teaches eight languages at 30 schools.
The previous website and related micro-sites needed improved usability and design. It was hard to find the relevant information and to enroll online. The content administration of the worldwide websites in the multi-cultural, multi-language and multi-currency environment was becoming too complicated and took too much time.
Eurocentres was looking for an experienced web agency, able to handle complex development tasks combined with great user experience and design competence. After an intensive RFQ (Request for Quotation) phase and pitch, Eurocentres chose Cando for this challenging project.
Cando was responsible for the entire project and developed the concept, user-experience design (UI/UX), visual design, prototyping, development and implementation.
The Drupal framework provides a lot of common CMS functionality 'out-of-the-box' and these functionalities were important requirements for our client. In addition, we also had to make sure that the chosen framework was flexible enough to fully accommodate the complex business logic we had to deal with in this project. The entity concept of Drupal 7 looked very promising and turned out to be a key factor in our decision.
The entity translation concept worked out really well for us. With the earlier concept of node translations in Drupal 6 we would have had a node for each translation. Now, the translation is obviously done at the right place now and there is no need to sync content between several nodes just for the sake of translation.
Another key factor was the e-commerce topic. We noticed that several people involved in e-commerce projects with Drupal 6 and earlier (in particular Ubercart and e-Commerce) started working together on a new project called Drupal Commerce (which is based on Drupal 7). That means a lot of e-commerce knowledge was brought into one single project. Drupal Commerce was in a very early stage (pre-alpha) when we decided to use it for our project but its architecture turned out to be very flexible.
Even though we wrote quite a few lines of custom code for the shop, especially to create date-based behavior, we were able to do a lot of customization by using Rules and Views thanks to the seamless integration of Drupal Commerce with those modules. For example: The shopping basket consists of views. Additional fees such as high season, enrollment and many others are calculated and added by Rules. Courses and accommodations are stored as commerce products, each representing a different product variation (e.g. accommodations with different meal plans: half-board, full-board).
The concept of fieldable entities turned out to be very useful too, but because every additional field creates two tables (one for data and one for revisions), we still had to be careful not to end up with too many tables. Therefore we were glad to see that creating custom fields with multiple values was a good choice in many cases, and surprisingly easy to achieve. This way we could significantly reduce the amount of tables being created. One example of a custom field with multiple values in our project is the nationality mix information available for a school. Without a custom field we would have had 5 separate fields resulting in 10 tables, whereas with the custom field we ended up having 2 tables without losing any flexibility.
The goal of the project was to implement a state-of-the-art web experience, which fulfills the needs of the Eurocentres target groups. The new website had to be user-friendly and cross-cultural, utilizing the latest trends in the Internet industry (e.g. mashups, Ajax, social media).
The major need was to increase the online sales. Therefore, the new online booking solution had to be intuitive, featuring faceted search and seamless integration of a multi-currency web shop. One-stop shopping was another key element. Eurocentres wanted to encourage prospective clients not only to buy the language course but also appropriate accommodations, private lessons, insurance and airport transfers.
Another requirement was the extranet for language travel agents. They had to be able to easily download media files such as documents and images. Finally, integration of a media asset management system with role and time-restricted access had to be implemented.
Thinking about SEO and SEM, the new website had to be optimized to use the latest techniques for high ranking in search engines. Special attention had to be given to target specific markets, countries and languages.
- Modern design with strong focus on user-experience (UX and UI).
- Faceted search for language courses with instant results.
- Online booking for language courses at schools around the world.
- Booking of accommodation to tie in with a chosen course.
- Multi-currency handling without currency conversion but fixed prices in multiple currencies per product.
- Currency detection for certain client/country and school/location combinations.
- Sophisticated business logic for date-based products (courses, accommodation) similar to travel systems/shops; such as handling of price periods, high season and other fees depending on the course-date, duration and destination.
- Ajax-based shopping cart with convenient basket overview and possibility to change/update the cart content in-place.
- Agent intranet and media asset management.
- Multi-language capability: 8 languages, including Japanese and Korean.
- Migration and interface development for product, price, content and image import.
Development and Deployment Process
Our development team is using Git for version control and code sharing as well as, Gitolite for fine granular permission control. The deployment process is handled by a Hudson environment using Phing (PHP project build system or build tool based on Apache Ant). When a specific version is being deployed to a desired environment (e.g. test, pre-production, production), the code for that version is cloned from the repository, unit tests are triggered and afterwards the code is being synced to the environment. In case of Drupal, most configurations are stored in code. Therefore we spent quite some time on patching the Features module. Configuration deployment across multiple environments has always been a crucial factor to us when working on larger enterprise level applications. However, the Features module enabled us to have more or less, a clean way to achieve our goals. Actually, Drupal 8 looks quite promising related to that topic.
Products are exported to .csv-files from an ERP system. The exported files contain all base data of the courses. A custom generator-script then uses this data to generate every allowed combination which in the next step is imported by Migrate, creating a commerce product. In the same process more than 1000 Rules for fees are created based on the data provided in the .csv-files.
Performance and Caching
To maintain the performance we use the full power of the panels- and page-cache as well as Varnish to further reduce the Apache load.
To reach a cache hit rate as good as it gets we use Cache Actions to flush caches only when really necessary e.g. whenever a node is updated the related cache entries are flushed and nothing else.
Further, we tuned the core page and form caching for being able to use relative times as cache lifetime (see https://github.com/das-peter/enhanced_page_cache and/or http://drupal.org/node/1286154). This works perfectly for eurocentres.com as the prices are always valid for the current day.
To optimize the memory usage and hit rate on https (where Varnish isn't hit) we use the same page cache ids for http and https - this works nicely as we use protocol relative paths everywhere on the page.
We used Searchlight for the faceted search functionality. However, we patched a lot of additional code to support relations in the datastore backend and result grouping for grouping the product variants (courses) into schools on the search result page:. Meanwhile all our search related features in other projects are implemented using Search-API.
Base-theme used and extended in the project: Fusion.
- Multi-language: 8 Languages incl. Japanese and Korean with some advanced encoding challenges.
- Commerce product entities: ~175,000
- Nodes: ~1000 (Compared to D6 without entity/field translation this would mean ~8000 nodes since most nodes are translated).
- Whole site can be built running an install profile:
- One-hour install duration, including basic data migration (covers major part of the content).
- One-hour product pre-generation, where some complex date-based price calculations (for price periods in travel market) take place.
- Ninety-minute product migration.
Design and UX/UI Process
Cando has a strong focus on design and user-experience. In terms of Eurocentres, users should be enthused to search for language courses and finally guided to and through the enrollment process. Therefore, the concept phase included a clickable prototype (done with Axure RP) and many different visual design samples.
To ensure an outstanding user-experience, end-users and all stakeholders of Eurocentres including sales, marketing and the enrollment office, were involved from the beginning. For example, holding workshops with students in the UK brought valuable feedback at an early stage of the project.
A lot of community work was done with Commerce, Features, Media, Media Browser Plus and many other modules. More about our community work: http://drupal.org/node/1916224
Drupal 7 core was not even in alpha stage when the project was started, but looking back, we have to say it was the right choice to go with the next major release. What followed was almost nine months hard work of patching and porting modules to Drupal 7, while at the same time, writing custom codes for our specific complex business cases. With the help of many developers in the community, we were finally able to complete this challenging project and were among the first companies to launch a big Drupal 7 based enterprise website!
- Luke Bochsler, Managing Partner - Project Lead
- Chris Bochsler, Managing Partner - Marketing Concept
- Peter Philipp, Software Architect - Lead Developer
- Kai Jauslin, Head of User Experience Design