Styles d'images (equivalent de imagecache) spécifiques au thème dans Drupal 7
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;
}
$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:
<?php
function NOM_DE_VOTRE_THEME_ICI_imagecache($namespace, $path, $alt = '', $title = '', $attributes = null) {
global $theme;
if (count(imagecache_preset_by_name($namespace . '_' . $theme))) {
$namespace = $namespace . '_' . $theme;
}
// check is_null so people can intentionally pass an empty array of attributes to override
// the defaults completely... if
if (is_null($attributes)) {
$attributes['class'] = 'imagecache imagecache-' . $namespace;
}
$attributes = drupal_attributes($attributes);
$imagecache_url = imagecache_create_url($namespace, $path);
return '<img src="' . $imagecache_url . '" alt="' . check_plain($alt) . '" title="' . check_plain($title) . '" ' . $attributes . ' />';
}
?>
Commentaires? Laissez-les ici.