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

19
demandé sur panther 2014-07-15 13:33:24

6 réponses

selon le changement:

use Drupal\image\Entity\ImageStyle;

$path = 'public://images/image.jpg';
$url = ImageStyle::load('style_name')->buildUrl($path);
41
répondu Clive 2014-07-15 12:43:15

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);
12
répondu sagesolutions 2016-05-02 15:07:16

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
];
3
répondu zhilevan 2018-02-11 07:33:36

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);
1
répondu Undrrey 2014-10-05 15:29:39

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);
}
0
répondu pierre delaunay 2017-02-07 11:15:03

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'] }}"/>
0
répondu Brian Williams 2017-07-14 13:58:21