получить высоту стиля изображения в функции предобработки в Drupal 8

Я использую Drupal 8 с потрясающим встроенным модулем отзывчивых изображений. Я хочу внести изменения в поле img (резервное изображение) до <picture> элемент отображается более конкретно: мне нужно добавить width а также height параметры к <img> поле. Поэтому я использую preprocess_image крюк.

Этот хук предоставляет мне кучу переменных, в первую очередь $variables[attributes],
$variables[width], $variables[height] а также $variables[uri] все пустые строки по какой-то причине. к счастью $variables[attributes] содержит:
$variables[attributes][data-entity-uuid] а также $variables[attributes][srcset] так что по крайней мере у меня есть путь к стилизованному изображению и uuid к исходному изображению.

Я подумал, что есть два способа попасть туда, куда я хочу (это загрузить стилизованное изображение и получить высоту и ширину):

  1. преобразовать путь в URI (или это путь)?
  2. Получить идентификатор файла из uuid, а затем каким-то образом получить URI из стилизованного изображения (что кажется обходным путем, чтобы получить то, что я хочу)

Я не могу заставить вариант 1 работать. Путь в 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 часов своей жизни на решение этой проблемы, я был бы очень благодарен за любую помощь

1

Решение

Ответ был намного проще, чем я думал.

Вариант 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'];
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]