drupal 7では、関数image_style_url('style', uri)
を使用して、スタイル付きの新しい画像を生成し、画像のパスを返します。では、drupal 8の代わりに何をするのでしょうか。ありがとう
変更レコード ごと:
use Drupal\image\Entity\ImageStyle;
$path = 'public://images/image.jpg';
$url = ImageStyle::load('style_name')->buildUrl($path);
新しいDrupal関数を可能な限り使用するようにしてください。
代わりに、次を使用します。
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());
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);
コントローラと他のOOP Drupalの一部を使用できます:
use Drupal\image\Entity\ImageStyle;
$path = 'public://images/image.jpg';
$url = ImageStyle::load('style_name')->buildUrl($path);
そしてYOUR_THEME.theme
ファイルError: Class 'ImageStyle' not found in YOURTHEMENAME_preprocess_node
あなたは次のようにそれを行うことができます
$path = 'public://images/image.jpg';
$style = \Drupal::entityTypeManager()->getStorage('image_style')->load('thumbnail');
$url = $style->buildUrl($path);
別の方法は、レンダリング可能な配列を提供し、drupalレンダリングエンジンにレンダリングさせます。
$render = [
'#theme' => 'image_style',
'#style_name' => 'thumbnail',
'#uri' => $path,
// optional parameters
];
画像を前処理して、ノードまたは段落タイプの画像に画像スタイルを適用したいことがよくあります。多くの場合、画像の幅をパーセンテージで選択できる段落を作成しました。前処理では、幅の値を確認し、正しい画像スタイルを適用します。
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;
}
この例では、「basic_content」という名前の特定の段落タイプを前処理していますが、ノードの前処理でも同じことができます。私の例を続けると、その段落タイプの表示を処理するためにtwigという名前のテンプレートparagraph--basic_content.html.twigが必要です。
twigファイルでは、画像の表示は次のようになります。
<img class="img-responsive" src="{{basic_image_display['uri']}}" alt="{{ basic_image_display['alt'] }}" title="{{ basic_image_display['title'] }}"/>
古典的なDrupalデータベースクエリからの.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);
}