2016-09-09 5 views
1

私は素晴らしいインライン応答イメージモジュールでDrupal 8を使用します。 <picture>要素がレンダリングされる前のimgフィールド(代替画像)を変更したい、具体的には、widthheightのパラメータを<img>フィールドに追加する必要があります。したがって私はpreprocess_imageフックを使用します。Drupalの前処理機能でイメージの高さを取得する8

このフックは、多くの変数を提供します。特に、$variables[attributes]です。 $variables[width],$variables[height]および$variables[uri]は何らかの理由ですべて空文字列です。幸運にも$variables[attributes]には、 $variables[attributes][data-entity-uuid]$variables[attributes][srcset]が含まれていますので、少なくとも私はスタイリングされたイメージへのパスと元のイメージへのパスを持っています。

私は(それがスタイルの画像をロードして、高さと幅を取得している)行きたい場所へ行くには、2つの方法があります考え出し:

  1. は、URIのパスを変換(またはそれはパスです) ?
  2. 私は仕事にオプション1を得ることができないUUIDからファイルIDを取得し、その後、何らかの形で(私が欲しいものを得るために迂回のように思える)スタイル画像

からURIを取得します。 /sites/default/files/styles/image_lightbox/public/inline-images/erf-2.jpg?itok=4_EU9Ttxと私はpublic://styles/image_lightbox/public/inline-images/erf-2.jpgにそれを変換する必要がなく、のようなもので捕まってしまったと思う::srcsetでのパスは、このようなものです

$parsed_url = parse_url($variables['attributes']['srcset']); 
$path = file_build_uri($parsed_url['path']); 

が、それはまだそこ

に/サイト/デフォルト/ファイルの一部を残しました

オプション2を使用することができません。これは私が答え任意のヘルプ

答えて

0

に非常に感謝される解決得ることに私の人生の8時間を無駄にした後これが何らかの理由

ため$file = File::load($file_id)で失敗

$file_array = \Drupal::entityTypeManager()->getStorage('file')->loadByProperties(['uuid' => $img_uuid]); 
$file_id = reset(array_keys($file_array)); 
$file = File::load($file_id); 
$image_uri = ImageStyle::load('image-lightbox')->buildUrl($file->getFileUri()); 
$image = \Drupal::service('image.factory')->get($image_uri); 

た:私はにこだわっています私が思ったよりずっと簡単です。

オプション1は、非常に簡単であることが判明: 代わりpublic://styles/image_lightbox/public/inline-images/erf-2.jpgに($variables[attributes][srcset]から)/sites/default/files/styles/image_lightbox/public/inline-images/erf-2.jpg?itok=4_EU9Ttxに変換します。私はこれを私がこのようにしたhttp://hostname/path-to-drupal-install/sites/default/files/styles/image_lightbox/public/inline-images/erf-2.jpg?itok=4_EU9Ttxに変換しなければならなかった:

global $base_url; 
$image_uri = $base_url.$variables['attributes']['srcset']; 
関連する問題