(Modifié le 28 oct. 2011 suite à un changement dans l'implémentation 7.9 -- la version actualisée devrait fonctionner pour toutes les version de Drupal 7. Voir aussi ce ticket sur Drupal.org)
Les styles d'image (image styles) sont à Drupal 7 ce que les préréglages imagecache sont à Drupal 6: une définition de comment une image doit apparaître. Par exemple, une "vignette" (thumbnail) pourrait être une image de 150 pixels de large. Ces préréglages peuvent ensuite être utilisés par les vues, les nodes, etc.
Cepedant, différents thèmes peuvent avoir différentes conceptions de ce qu'est une vignette.
Par exemple, vous utilisez un préréglage thumbnail pour des galeries d'images. La définion par défaut de Drupal pour les thumbnails peut fonctionner pour la majorité des thèmes, mais vous développez un thème, theme_one, et vous voulez que pour ce thème uniquement (mais pas tous), les thumbnails soient désaturés (presque en noir et blanc). Vous ne pouvez pas modifier le préréglage thumbnail par défaut car votre site est assez complexe et utilise plusieurs thèmes.
Intuitivement, les styles d'image sont relatifs aux thème et non au site.
Voici ma solution:
- Par défaut, un thème utilise le style d'image tel qu'il le ferait normalement. Exemple: thumbnail.
- Si votre thème (disons qu'il s'appelle mytheme) veut supplanter cette définition, créez un nouveau style d'image qui s'appelle thumbnail_mytheme.
Maintenant ajoutez ce code au fichier template.php de votre thème:
<?php /** * Suplanter theme_image_style. * Utiliser le style d'image requis, comme d'habitude, sauf s'il existe * un style nomdustyle_nomdutheme. */ function NOM_DE_VOTRE_THEME_ICI_image_style($variables) { global $theme; if (array_key_exists($variables['style_name'] . '_' . $theme, image_styles())) { $variables['style_name'] = $variables['style_name'] . '_' . $theme; } // Starting with Drupal 7.9, the width and height attributes are // added to the img tag. Adding the if clause to conserve // compatibility with Drupal < 7.9 if (function_exists('image_style_transform_dimensions')) { // Determine the dimensions of the styled image. $dimensions = array( 'width' => $variables['width'], 'height' => $variables['height'], ); image_style_transform_dimensions($variables['style_name'], $dimensions); $variables['width'] = $dimensions['width']; $variables['height'] = $dimensions['height']; } $variables['path'] = image_style_url($variables['style_name'], $variables['path']); return theme('image', $variables); } ?>
Remplacez NOM_DE_VOTRE_THEME_ICI par le nom machine de votre thème, videz votre cache et voilà.
MISE À JOUR (15 mai 2011): Voici une version pour Drupal 6: '; } ?>
Commentaires? Laissez-les ici.