Domain Access - define image styles per domain
Image Style Basics
Drupal offers the possibility to easily process images via image styles (formerly known as imagecache presets). In our current case of a photo heavy website we had to integrate a watermark image on all images supplied by the site. For this purpose we used the image style action Overlay (watermark).
The configuration of the style is really simple - but could be enriched with scaling and all other available actions.
A major advantage of using Drupal's built in image style is the fact that all images are only processed once and cached in Drupal's file system for later usage. In case of our image gallery the first call of the page would take a long time, because all thumbnails would be rendered for the first time. But on second call all images would be available immediately.
Domain Access Basics
With the help of the Domain Access module you are able to share configuration, content and users between different domains. Compared to the known Drupal multisite approach, which uses a single database per site, Domain Access shares all data in a single database.
In one of our latest projects we used the module for a German city website called ROW-People (row-people.de / hb-people.de). Besides sharing content and configuration between these two sites we had to ensure that all images get a unique watermark rendered via Drupal's image styles. For further information on using the Domain Access module we will write an extra blog post explaining the setup process and usage.
Our Domain Access configuration for testing:
- Domain 1 (machine_name: domain1) Default Domain
- Domain 2 (machine_name: domain2)
If you want to test the setup on your local machine, you will have to set up two virtual hosts pointing to the Drupal installation.
Problem and our solution
Due to the fact that image styles are only rendered once, all images on both domains would get the same watermark image. But as mentioned before, we want a unique watermark per domain.
In order to achieve this goal we had to create our own image style per domain (the original style name suffixed by the domains machine_name) that contained the desired watermark image.
- watermark (default-watermark)
- watermark_domain2 (suffix matches the machine_name of the domain)
For testing purposes we created a simple content type with the following fields
- Title (Standard)
- Image (Style watermark)
All further processing had to be done via a preprocess function supplied by the theming layer of drupal.
While configuring our domains we needed to set up a unique machine_name per domain that could be used in our template_preprocess_node().
Provide appropriate watermark image via preprocess functions
With the help of the template_preprocess_node() function you are able to rewrite the output of fields on node level. Whenever the page is called the preprocess function will rewrite the name of the image style name based on the machine_name of the actual domain.