Drupal 8 images avec le style d'image
Dans drupal 7, j'utilise la fonction image_style_url('style', uri)
pour générer une nouvelle image avec style et retourner le chemin de l'image. alors qu'est-ce qui sera à la place de cela dans drupal 8? merci
6 réponses
selon le changement:
use Drupal\image\Entity\ImageStyle;
$path = 'public://images/image.jpg';
$url = ImageStyle::load('style_name')->buildUrl($path);
vous devriez essayer d'utiliser les nouvelles fonctions Drupal dans la mesure du possible.
au Lieu de cela, utilisez:
use Drupal\file\Entity\File;
use Drupal\image\Entity\ImageStyle;
$fid = 123;
$file = File::load($fid);
$image_uri = ImageStyle::load('your_style-name')->buildUrl($file->getFileUri());
Édité par https://www.drupal.org/node/2050669:
$original_image = 'public://images/image.jpg';
// Load the image style configuration entity
use Drupal\image\Entity\ImageStyle;
$style = ImageStyle::load('thumbnail');
$uri = $style->buildUri($original_image);
$url = $style->buildUrl($original_image);
dans vos Controllers et autres parties de Drupal que vous pouvez utiliser:
use Drupal\image\Entity\ImageStyle;
$path = 'public://images/image.jpg';
$url = ImageStyle::load('style_name')->buildUrl($path);
Et YOUR_THEME.theme
le fichier while Error: Class 'ImageStyle' not found in YOURTHEMENAME_preprocess_node
vous pouvez le faire avec le follwing
$path = 'public://images/image.jpg';
$style = \Drupal::entityTypeManager()->getStorage('image_style')->load('thumbnail');
$url = $style->buildUrl($path);
une autre méthode est de fournir un tableau renderable et de laisser le moteur de rendu drupal le rendre.
$render = [
'#theme' => 'image_style',
'#style_name' => 'thumbnail',
'#uri' => $path,
// optional parameters
];
J'ai utilisé dans Drupal 8 ce code. Ça fonctionne très bien.
$fid = 374; //get your file id, this value just for example
$fname = db_select('file_managed', 'f')->fields('f', array('filename'))->condition('f.fid', $fid)->execute()->fetchField();
$url = entity_load('image_style', 'YOUR_STYLE_NAME')->buildUrl($fname);
fonctionne pour moi à partir d'une interrogation Classique De La base de données Drupal .le fichier du module :
$query = \Drupal::database()->select('file_managed', 'f' );
$query->addField('f', 'uri');
$pictures = $query->execute()->fetchAll();
foreach ($pictures as $key => $picture) {
$largePictureUri = entity_load('image_style', 'large')->buildUrl($picture->uri);
}
j'ai trouvé que j'ai souvent envie de prétraitement de l'image pour appliquer un style d'image d'une image sur un nœud ou d'un paragraphe. Dans de nombreux cas, j'ai créé un paragraphe qui permet à l'utilisateur de choisir la largeur de l'image en tant que pourcentage. Dans le préprocessus je vérifierais la valeur de la largeur et appliquerais le style d'image correct.
use Drupal\image\Entity\ImageStyle;
function THEME_preprocess_paragraph__basic_content(&$vars) {
//get the paragraph
$paragraph = $vars['paragraph'];
//get the image
$images = $paragraph->get('field_para_image');
//get the images value, in my case I only have one required image, but if you have unlimited image, you could loop thru $images
$uri = $images[0]->entity->uri->value;
//This is my field that determines the width the user wants for the image and is used to determine the image style
$preset = $paragraph->get('field_column_width')->value;
$properties = array();
$properties['title'] = $images[0]->getValue()['title'];
$properties['alt'] = $images[0]->getValue()['alt'];
//this is where the Image style is applied
switch($preset) {
case 'image-20':
$properties['uri'] = ImageStyle::load('width_20_percent')->buildUrl($uri);
break;
case 'image-45':
$properties['uri'] = ImageStyle::load('width_45_percent')->buildUrl($uri);
break;
case 'image-55':
$properties['uri'] = ImageStyle::load('width_55_percent')->buildUrl($uri);
break;
case 'image-100':
$properties['uri'] = ImageStyle::load('width_100_percent')->buildUrl($uri);
break;
}
//assign to a variable that the twig template can use
$vars['basic_image_display'] = $properties;
}
dans cet exemple, je prétraite un type de paragraphe spécifique appelé "basic_content" mais vous pouvez faire la même chose avec un préprocessus de noeud. En continuant mon exemple, j'aurais un modèle de brindille nommé paragraphe--basic_content.HTML.brindille pour gérer l'affichage de ce type de paragraphe.
afficher l'image serait quelque chose comme ça dans le fichier de brindilles.
<img class="img-responsive" src="{{basic_image_display['uri']}}" alt="{{ basic_image_display['alt'] }}" title="{{ basic_image_display['title'] }}"/>