template_preprocess_responsive_image(&$variables)
Prepares variables for a responsive image.
Default template: responsive-image.html.twig.
Parameters
$variables: An associative array containing:
- uri: The URI of the image.
- width: The width of the image (if known).
- height: The height of the image (if known).
- attributes: Associative array of attributes to be placed in the img tag.
- responsive_image_style_id: The ID of the responsive image style.
File
- core/modules/responsive_image/responsive_image.module, line 148
- Responsive image display formatter for image fields.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | function template_preprocess_responsive_image(& $variables ) { // Make sure that width and height are proper values // If they exists we'll output them if (isset( $variables [ 'width' ]) && empty ( $variables [ 'width' ])) { unset( $variables [ 'width' ]); unset( $variables [ 'height' ]); } elseif (isset( $variables [ 'height' ]) && empty ( $variables [ 'height' ])) { unset( $variables [ 'width' ]); unset( $variables [ 'height' ]); } $image = \Drupal::service( 'image.factory' )->get( $variables [ 'uri' ]); $responsive_image_style = ResponsiveImageStyle::load( $variables [ 'responsive_image_style_id' ]); // If a responsive image style is not selected, log the error and stop // execution. if (! $responsive_image_style ) { $variables [ 'img_element' ] = []; \Drupal::logger( 'responsive_image' )->log(RfcLogLevel::ERROR, 'Failed to load responsive image style: “@style“ while displaying responsive image.' , [ '@style' => $variables [ 'responsive_image_style_id' ]]); return ; } // Retrieve all breakpoints and multipliers and reverse order of breakpoints. // By default, breakpoints are ordered from smallest weight to largest: // the smallest weight is expected to have the smallest breakpoint width, // while the largest weight is expected to have the largest breakpoint // width. For responsive images, we need largest breakpoint widths first, so // we need to reverse the order of these breakpoints. $breakpoints = array_reverse (\Drupal::service( 'breakpoint.manager' )->getBreakpointsByGroup( $responsive_image_style ->getBreakpointGroup())); foreach ( $responsive_image_style ->getKeyedImageStyleMappings() as $breakpoint_id => $multipliers ) { if (isset( $breakpoints [ $breakpoint_id ])) { $variables [ 'sources' ][] = responsive_image_build_source_attributes( $image , $variables , $breakpoints [ $breakpoint_id ], $multipliers ); } } if (isset( $variables [ 'sources' ]) && count ( $variables [ 'sources' ]) === 1 && !isset( $variables [ 'sources' ][0][ 'media' ])) { // There is only one source tag with an empty media attribute. This means // we can output an image tag with the srcset attribute instead of a // picture tag. $variables [ 'output_image_tag' ] = TRUE; foreach ( $variables [ 'sources' ][0] as $attribute => $value ) { if ( $attribute != 'type' ) { $variables [ 'attributes' ][ $attribute ] = $value ; } } $variables [ 'img_element' ] = array ( '#theme' => 'image' , '#uri' => _responsive_image_image_style_url( $responsive_image_style ->getFallbackImageStyle(), $image ->getSource()), ); } else { $variables [ 'output_image_tag' ] = FALSE; // Prepare the fallback image. Use srcset in the fallback image to avoid // unnecessary preloading of images in older browsers. See // http://scottjehl.github.io/picturefill/#using-picture and // http://scottjehl.github.io/picturefill/#gotchas for more information. $variables [ 'img_element' ] = array ( '#theme' => 'image' , '#srcset' => array ( array ( 'uri' => _responsive_image_image_style_url( $responsive_image_style ->getFallbackImageStyle(), $image ->getSource()), ), ), ); } if (isset( $variables [ 'attributes' ])) { if (isset( $variables [ 'attributes' ][ 'alt' ])) { $variables [ 'img_element' ][ '#alt' ] = $variables [ 'attributes' ][ 'alt' ]; unset( $variables [ 'attributes' ][ 'alt' ]); } if (isset( $variables [ 'attributes' ][ 'title' ])) { $variables [ 'img_element' ][ '#title' ] = $variables [ 'attributes' ][ 'title' ]; unset( $variables [ 'attributes' ][ 'title' ]); } $variables [ 'img_element' ][ '#attributes' ] = $variables [ 'attributes' ]; } } |
Please login to continue.