我使用Drupal 8与令人敬畏的内联响应图像模块。我希望在呈现<picture>元素之前对img字段(回退图像)进行更改,更具体地说:我需要将width和height参数添加到<img>字段。因此,我使用preprocess_image钩子。
这个钩子为我提供了一堆变量,最显著的是$variables[attributes]。由于某种原因,$variables[width]、$variables[height]和$variables[uri]都是空字符串。幸运的是,$variables[attributes]包含:$variables[attributes][data-entity-uuid]和$variables[attributes][srcset],因此至少我有指向样式图像的路径,以及指向原始图像的uuid。
我想有两种方法可以到达我想去的地方(即加载样式的图像并获得高度和宽度):
我不能让第一选择去工作。srcset中的路径是这样的:/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,但是却陷入了这样的境地:
$parsed_url = parse_url($variables['attributes']['srcset']);
$path = file_build_uri($parsed_url['path']);但是,这仍然将/sites/default/files部分留在那里。
我不能让备选方案2开始工作。我被困在:
$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);由于某些原因,这在$file = File::load($file_id)失败了。
在浪费了我生命中的8个小时来解决这个问题之后,我将非常感谢你的帮助。
发布于 2016-09-10 20:05:28
答案比我想象的要简单得多。
结果证明,选项1非常容易:而不是将/sites/default/files/styles/image_lightbox/public/inline-images/erf-2.jpg?itok=4_EU9Ttx (从$variables[attributes][srcset])转换为public://styles/image_lightbox/public/inline-images/erf-2.jpg。我不得不把它转换成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'];https://stackoverflow.com/questions/39419297
复制相似问题