En Drupal 7 esto fue posible.
$link = array(
'#type' => 'link',
'#title' => t('My Title'),
'#href' => 'node/1',
);
drupal_render($link);
Pero he intentado esto con Drupal 8, y no genera nada.
$link = array(
'#type' => 'link',
'#title' => t('test'),
'#url' => 'node/1',
);
drupal_render($link);
¿Hay alguna manera de que pueda renderizar un enlace sin tener que llamar al complemento Link directamente o crear mi propia función de tema?
Estoy creando un formateador de grupo de campos, que debe generar una matriz de renderizado.
El uso de drupal_render()
está en desuso y no debe llamarse directamente; Lo estoy usando aquí para aclarar mi ejemplo.
Respuestas:
Creo que el problema con su código Drupal 8 es que '#url' necesita un objeto URL.
URL externa
URL interna de una ruta
En Drupal 8 se supone que no debes presentarte. Al portar código de Drupal 7, elimine toda la representación y devuelva solo las matrices de representación.
fuente
drupal_render()
directamente, fue solo por el ejemplo.Como alternativa, también puede usar
\Drupal\Core\Link::fromTextAndUrl()
o\Drupal\Core\Link::createFromRoute()
.Twig puede imprimirlo tal cual, también puede obtener una matriz de renderizado llamando
\Drupal\Core\Link::toRenderable()
. La matriz de renderización resultante es la misma que construirla a mano.fuente
Aquí hay un ejemplo de cómo representar un enlace en Drupal 8 con una clase personalizada. Es un poco extraño, pero las opciones se pasan a la URL, no a la función de enlace.
Esto es útil en un formateador de campo, que espera que se regrese el marcado. Si está haciendo esto en otro lugar, es mejor convertirlo en un elemento de matriz de representación de enlace.
fuente