Pregunta:
¿Hay alguna forma de imprimir el título de la página dentro de un paragraph.html.twig?
En Drupal 7, puedes hacer un drupal_get_title (); en un tpl.php y utilícelo como variable.
Esa función está depreciada y, por lo que leí sobre TWIG, no está en el espíritu de crear un tema en Drupal 8 ahora.
¿Cuál es la forma de Drupal 8 para hacer esto?
Respuesta:
Una estrategia alternativa para configurar el contexto de la caché es utilizar un marcador de posición. Este es un enfoque más complejo, pero nunca tendrá problemas con el llenado de la tabla de caché de la base de datos, como señala 4k4, esto puede ser un problema real.
Todo este código va en themename.theme.
Primero debemos definir una función de devolución de llamada que devuelva el título de la página al marcador de posición:
function _MyTheme_paragraphs_title_placeholder($page_title) {
// Must go here, if you attempt to pass in $page_title from preprocess it will
// be cached!
$request = \Drupal::request();
$route_match = \Drupal::routeMatch();
$page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
$title_array = array(
'#theme' => 'page_title',
'#title' => $page_title,
);
return $title_array;
}
A continuación, creamos el marcador de posición en preproceso, imprimiremos una variable en la plantilla, por lo que debemos completarla con el marcador de posición:
function MyTheme_preprocess_paragraph(&$variables) {
// Note: the first item in the #lazy_builder array is our callback.
$placeholder_title = array(
'#lazy_builder' => ['_MyTheme_paragraphs_title_placeholder', ['page_title']],
'#create_placeholder' => TRUE,
);
$variables['title'] = $placeholder_title;
}
Finalmente cree, copie la plantilla de párrafos y use la variable de título:
<div{{ attributes.addClass(classes) }}>
{{ title }}
{{ content }}
</div>
Así es como he implementado la función de título de ruta de navegación en Adaptivetheme (versión D8), para evitar la URL de contexto de caché cuando noté las entradas de la base de datos, creo que es un gran método y me encantaría recibir más comentarios si he hecho algo mal. Soy un tema, por supuesto, no un desarrollador incondicional 🙂