Koumbit.org

Pour un internet libre et solidaire

Styles d'images (equivalent de imagecache) spécifiques au thème dans Drupal 7

(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:

/**
* 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 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:
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 '' . check_plain($alt) . '';
}
?>

Commentaires? Laissez-les ici.

Ajouter un commentaire

Permanence téléphonique

☏ +1 514 907 9494
Lun: 10h à 12h et 13h à 16h
Mar: 10h à 12h
Mer: 10h à 12h et 13h à 16h
Jeu: 10h à 12h
Mon: 10am to 12pm and 1pm to 4pm
Tue: 10am to 12pm
Wed: 10am to 12pm and 1pm to 4pm
Thu: 10am to 12pm

Venez nous voir!

1883, rue Atateken,
Montréal (Québec) H2L 3L7, Canada
Veuillez noter que nos bureaux n'ont pas de stationnement attitré.
1883 Atateken Street,
Montreal, Quebec, H2L 3L7, Canada
Please note that you'll need to find on-street parking.

Écrivez-nous

Informations générales

Support technique

Pour une demande de devis, voir le formulaire à la page contact.

Nos clefs PGP

General inquiries

Technical support

For a free estimate, see the form on our contact page.

Our PGP keys

Suivez-nous

ktweb_menu_social