twig_render_template($template_file, array $variables)
Implements hook_render_template().
Renders a Twig template.
If the Twig debug setting is enabled, HTML comments including the theme hook and template file name suggestions will surround the template markup.
Parameters
string $template_file: The file name of the template to render.
array $variables: A keyed array of variables that will appear in the output.
Return value
string|\Drupal\Component\Render\MarkupInterface The output generated by the template, plus any debug information.
File
- core/themes/engines/twig/twig.engine, line 54
- Handles integration of Twig templates with the Drupal theme system.
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 | function twig_render_template( $template_file , array $variables ) { /** @var \Twig_Environment $twig_service */ $twig_service = \Drupal::service( 'twig' ); $output = [ 'debug_prefix' => '' , 'debug_info' => '' , 'rendered_markup' => '' , 'debug_suffix' => '' , ]; try { $output [ 'rendered_markup' ] = $twig_service ->loadTemplate( $template_file )->render( $variables ); } catch (\Twig_Error_Runtime $e ) { // In case there is a previous exception, re-throw the previous exception, // so that the original exception is shown, rather than // \Twig_Template::displayWithErrorHandling()'s exception. $previous_exception = $e ->getPrevious(); if ( $previous_exception ) { throw $previous_exception ; } throw $e ; } if ( $twig_service ->isDebug()) { $output [ 'debug_prefix' ] .= "\n\n<!-- THEME DEBUG -->" ; $output [ 'debug_prefix' ] .= "\n<!-- THEME HOOK: '" . Html::escape( $variables ['theme_hook_original ']) . "' -->"; // If there are theme suggestions, reverse the array so more specific // suggestions are shown first. if (! empty ( $variables [ 'theme_hook_suggestions' ])) { $variables [ 'theme_hook_suggestions' ] = array_reverse ( $variables [ 'theme_hook_suggestions' ]); } // Add debug output for directly called suggestions like // '#theme' => 'comment__node__article'. if ( strpos ( $variables [ 'theme_hook_original' ], '__' ) !== FALSE) { $derived_suggestions [] = $hook = $variables [ 'theme_hook_original' ]; while ( $pos = strrpos ( $hook , '__' )) { $hook = substr ( $hook , 0, $pos ); $derived_suggestions [] = $hook ; } // Get the value of the base hook (last derived suggestion) and append it // to the end of all theme suggestions. $base_hook = array_pop ( $derived_suggestions ); $variables [ 'theme_hook_suggestions' ] = array_merge ( $derived_suggestions , $variables [ 'theme_hook_suggestions' ]); $variables [ 'theme_hook_suggestions' ][] = $base_hook ; } if (! empty ( $variables [ 'theme_hook_suggestions' ])) { $extension = twig_extension(); $current_template = basename ( $template_file ); $suggestions = $variables [ 'theme_hook_suggestions' ]; // Only add the original theme hook if it wasn't a directly called // suggestion. if ( strpos ( $variables [ 'theme_hook_original' ], '__' ) === FALSE) { $suggestions [] = $variables [ 'theme_hook_original' ]; } foreach ( $suggestions as & $suggestion ) { $template = strtr ( $suggestion , '_' , '-' ) . $extension ; $prefix = ( $template == $current_template ) ? 'x' : '*' ; $suggestion = $prefix . ' ' . $template ; } $output [ 'debug_info' ] .= "\n<!-- FILE NAME SUGGESTIONS:\n " . Html::escape(implode( "\n " , $suggestions )) . "\n-->" ; } $output [ 'debug_info' ] .= "\n<!-- BEGIN OUTPUT from '" . Html::escape( $template_file ) . "' -->\n" ; $output [ 'debug_suffix' ] .= "\n<!-- END OUTPUT from '" . Html::escape( $template_file ) . "' -->\n\n" ; } // This output has already been rendered and is therefore considered safe. return Markup::create(implode( '' , $output )); } |
Please login to continue.