About Eurocentres – Language Learning Worldwide

Eurocentres is one of the leading organizations within the language travel industry. Eurocentres is an international company with schools located on four continents and students coming from over 120 countries. Currently, Eurocentres teaches eight languages at 30 schools.

Thanks to a worldwide network of educational agents and own enrollment offices, Eurocentres welcomes over 13 000 students every year at its schools in Europe, the USA, Canada, Australia, New Zealand, South Africa and Japan.

As a quality leader, Eurocentres is committed to systematic and personalized language tuition, ensuring learning success and provide highly personalized services. Eurocentres has enjoyed consultative status with the Council of Europe for language learning since 1968 and has played a crucial role in the development of the Common European Framework of Reference for language teaching and learning. 

The Project

The previous website and other micro sites were outdated in terms of 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.

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 by utilizing the latest techniques to ensure a high-class ranking in search engines. Special attention had to be given to target specific markets, countries and languages.

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 phase and pitch, Eurocentres chose Cando Image GmbH (Cando) for this challenging project.

Cando was responsible for the entire project and developed the concept, user-experience design (UX- and IX), visual design, prototype, development and implementation.


  • Modern design with strong focus on user-experience (UX and IX)
  • Faceted Search for language courses with instant results
  • Online Booking for language courses at schools around the world
  • Booking of accommodations along with the 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, accommodations) 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 at one place
  • Agent intranet and media asset management
  • Multilanguage capability: 8 languages including Japanese and Korean
  • Migration and interface development for product, price, content and image import

Design and UX-/IX Process

Cando has a strong focus on design and user-experience. In terms of Eurocentres, users should be enthusiastic to search for language courses and finally guided 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 project stage.

Why Drupal 7


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 customize for the complex business logic we had to deal with in this project. The new entity concept of Drupal 7 looked very promising and turned out to be a key factor for our decision.


The new 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. Thanks to the new concept, 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.

Drupal Commerce

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 ecommerce) 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 it's 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 other fees are calculated and added by rules. Products like courses or accommodations are stored as commerce products, each representing a different product variation (e.g. accommodations with different meal plans: half-board, full-board).


The new concept of fieldable entities turned out to be very useful. Nevertheless, because every additional field creates two tables (one for data and one for revisions), we 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 even 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, with the custom field we ended up having 2 tabels without loosing any flexibility.

General Aspects

Drupal 7 core was not even in alpha stage either at that time, 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 of hard work 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!

Development and Deployment Process

For those of you interested on how we handle our development and release cycles at Cando, here is a small summary of the tools and processes we are using:

Our development team is using GIT for version control and code sharing as well as, Gitosis 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. Here we get to a topic where we hope, Drupal 8 will learn from other frameworks: Configuration Management. As some of you might imagine, 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. The next major version of Drupal looks promising related to that topic.

Some numbers

  • Multilanguage: 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:
    • 1h install duration incl. basic data migration (covers major part of the content)
    • 1h product pre-generation, where some complex date based price calculations (for price periods in travel market) take place
    • 1.5h product migration


Modules being used in this project are:



Cando Image GmbH (Cando)

Luke Bochsler, Managing Partner - Project Lead

Peter Philipp, Software Architect - Lead Developer

Cando Image GmbH

Else Züblinstrasse 115

CH-8404 Winterthur


Phone: +41 52 214 01 90

E-Mail: info (at)


Special thanks to

Shvets Group: Support on theming and markup
Commerce Guys: Consulting for shop related topics

About Cando Image

Cando Image GmbH (Cando) is a Swiss Web Agency with headquarters in Winterthur, Switzerland. From design to implementation, Cando is leading the way to unique internet-based solutions where user-experience plays a major role.

Cando takes care from start to finish of each project. We usually begin with a well defined concept phase including personas, scenarios, user-stories, wireframes and clickable prototypes. We complement this with state-of-the art visual design. Finally, each project is implemented by following an agile development process.

Cando was founded in 2006 and is a fast growing privately held company. The founders have a strong track record in establishing successful start-ups in the IT industry. The core team exists of experienced consultants and developers responsible for complex e-business solutions and portals for international clients. Amongst them are market leaders in Switzerland, Germany and Japan.


WorldFallz’s picture

Seems a little odd to post an 'enterprise booking' showcase item and not actually describe how the booking functionality was accomplished, lol. You're going to get a lot posts requesting this. ;-)

Care about the future of the forums? Please join our conversation and show support for improving the forums infrastructure.

luke_b’s picture

If you have a particular booking scenario which you would like to have described in detail, please ask. The project would probably fill a book if we lighted out every technical detail, but we will give our best to explain things on demand.

WorldFallz’s picture

I personally don't have any need for booking functionality atm. I do know that it's a pretty frequent request in the forums. I'm guessing, at minimum, people are going to want to know whether or not you integrated with a 3rd party service, or used contributed modules, or custom code, or x. Sorry, but this reads much more like a marketing brochure for a web design company than the typical drupal case study.

Don't get me wrong-- it's an impressive project and a well written post, it's just very light on the technical details. For example, it says 50 modules were used but only mentions a handful. Those are the typical things users on usually want to know.

Care about the future of the forums? Please join our conversation and show support for improving the forums infrastructure.

rszrama’s picture

This is a wonderful project, and the guys at Cando have been incredible community players. As very early adopters of Drupal Commerce, a lot of the work that went into Eurocentres to make it scalable, multilingual, and multicurrency has been contributed directly to Commerce in the form of patches and invaluable feedback. das-peter has been an excellent developer for Commerce and the other modules the project depends on.

Congratulations to the team on the launch and incredible results. This is one of the most impressive Drupal sites I've seen. : )

luke_b’s picture

Thanks Ryan! !

tebb’s picture

Very interesting project and thanks for the summary.

It's great to see that even a commercial organisation can have the faith that an alpha grade Drupal will come through in time for their needs.

I agree with WorldFallz that more technical detail of the booking system would be great. There are many requests for this on for multiple uses, but I have not found a great recipe anywhere yet. For example: Did you upgrade the bookings api to Drupal and if so, is it going to be contributed back? Did you write your own?

Because it is a new project, some expansion on how the D7 Commerce products work would be interesting. How did you end up with 175,000 of them? Is this because you need a product for each combination of options?

I would also be interested in whether you used a single install, multisites or multiple sites and how you handled the no doubt, complex permissions?

das-peter’s picture

We did not upgrade the bookings api.

The date-based prices are calculated by a custom module which makes use of the Drupal Commerce core. This module is about to be contributed, we currently work to get rid of the projec specific implementation to provide a more generic solution.

The 175k products are, like you guessed, a result of any valid product combination/option, e.g. one option would be the course Cambridge First (FCE) with duration 8 weeks on the 19th Sept 2011. We hope we can replace this approach by using the price-cache Drupal Commerce has built-in.

Due to the amount of variations for each product we had to replace the original generic variation builder code by our own, for this case optimized, one.

Currently we use a single-site installation - but there are plans to change that with the goal to provide franchise partners a way to promote themselves while still using the same core system.

Because of the single-site installation and the fact that the agents which processes the order only gets a notification mail with the order data, the permissions are quite easy. There are plans to connect to the ERP System the client is building up right now, to sync products and / or orders.

Currently we generate the products by using excel sheets the client provides us. These sheets contain all base data of the courses - the generator then uses this data to generate every allowed combination.

Cando Image GmbH
Else Züblinstrasse 115 :: CH-8404 Winterthur :: Switzerland

tebb’s picture

Thanks for taking the time to document this.

All very helpful.

Kojo Unsui’s picture

You said in #comment-4448320 :

We did not upgrade the bookings api.
The date-based prices are calculated by a custom module which makes use of the Drupal Commerce core. This module is about to be contributed, we currently work to get rid of the project specific implementation to provide a more generic solution.

About two years later, could you tell us if we can reasonably expect a contributed module ? Thank you very much.

xbrianx’s picture

I would love to see this module as well. I have been searching all over trying to find a system similar to yours.

m4olivei’s picture

How are you managing payment? I went through the process of booking something on the site to the review step and the Payment pane is missing. What Payment processors are you using, did you use any of the payment processors under development, eg.

Looks and sounds like a great site, truly showcasing the power that we will have using the new Drupal Commerce.


luke_b’s picture

Credit card payments are not implemented yet and the payments are handled by the backoffice after the order has been placed. Because the amounts are quite high for such courses and the number of orders rather low compared to a shop with many low-value items, this process is a reasonable temporary solution. It is planned to use Datatrans as a Payment Provider in the future with the next release.


j0rd’s picture

Could you let me know what you used to create the faceted search functionality.

luke_b’s picture

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: #982272: Result grouping #992300: Relations and Result Grouping Support

latulipeblanche’s picture

Thank you a lot for this post.

There is one thing that I don't understand:

Thanks to the new concept, 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.

I'm building a site with e.g. lipsticks in French and Dutch. The translations are done on product and product display pages. So every product is made, out of 4 "pages" (2x product page, 2x product display)

That's why I don't see what you mean with the quote.

Or do you mean the fact that we can sync images e.g. ?

das-peter’s picture

The earlier concept of translation would indeed have lead to a product and a node (display page) for every language. The i18n module did then take care of managing such a translation set.
The new concept needs only one product and one node (display page) and that independent from the number of languages.
This since the translation is managed on field level and not on entity (product / node) level.
If the product / node is displayed the field handler takes care which language has to be displayed.
This also means there's no more need to sync untranslatable content between the different products / nodes of a translation set.
I'd suggest you take a look into the modules that bring the "buried" core features to the surface ;):

Cando Image GmbH
Else Züblinstrasse 115 :: CH-8404 Winterthur :: Switzerland

BeaPower’s picture

This is a really great site, you're inspiring me in my own drupal 7 project!

Dipo’s picture

I really would like some tips on the check-out process you used.I need to add fields to my checkout process that with be validated along with the billing information. how would I go about this?

kourosh.afsari’s picture

Hi, Nice job! I was wondering what theme did you guys use for that Website?

mmariott’s picture

Congratulations! Very interesting implementatation of Drupal Commerce.

In particular we're interested in the multilingual implementation, because we are facing some issues related to product title translation. Here is the scenario:

1) Product type "jacket", with variations "color" and "size"
2) Product display "jacket-display"
3) I create 2 products of type "jacket", with the following titles: "jacket red small" and "jacket red large"
4) I create a node of type "jacket-display", with title "Sport Jacket"
5) I associate this node to the products "jacket red small" and "jacket red large"
6) I translate this node into Italian, with title "Giacca Sportiva"
7) I navigate the site to the node "Sport Jacket", and I add to cart the product "jacket red small"

The problem is that I cannot translate the product titles created in the step 3)
so if switch to italian language and I go to my shopping cart I always see displayed "jacket red small".

Instead, the node page "Sport Jacket" is correctly translated into "Giacca Sportiva".

So, how did you achieve the translation of product titles in the shopping cart of your site?

Thank you,

das-peter’s picture

Hi Marco,

if this issue still exists please contact me:


Cando Image GmbH
Else Züblinstrasse 115 :: CH-8404 Winterthur :: Switzerland

Tmanagement’s picture

Amazing site. Well done.

I was wondering, are course options also handled by the Drupal commerce core attribute handling? I noticed that it does not matter where you start selecting options, previous selected options remain active as they do not default to the default state wherever you start selecting.

I am working on a website with 5 attributes with on the first, second and third 4 options, the fourth and five have 3 options. In total this will give 576 products in order to cover each and every possible combination. The problem is that once you want to select options, you have to start at the first category working to the last. And if you have done so, selecting the default option of attribute 1, will set all other attribute options back to default as well.

Have you done something custom here?

Drupaltarzen’s picture

I am new at drupal, was amazed at this layout well done.

can i get an idea / direction on to how page layout is achieved at

I mean there is so much going on in one page.

A] Starting off from Quick Tabs ( Language , City , Accommodation ,Leisure Image )

B] Followed by Course option selection on the right side it has a map + address Followed by other information partition is done via line here

C] Followed by picture block and again followed by another quick tab showing 1) map & 2 ) A typical day at Eurocenter Lausanne

So much of above going on in a single layout ?:O ? how was it achieved ?


j.b’s picture

Great site,

I am wondering how did you managed to show the school on which the booking were made on the cart /checkout page.

Could you advise. thanks