¿Cómo tema un enlace?

8

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.

leon.nk
fuente
En realidad esto debería funcionar. ¿Qué significa no produce nada? ¿Dónde imprime este HTML renderizado? drupal_render () está en desuso. Llame al RenderService directamente: \ Drupal :: service ('renderer') -> render ($ elements, $ is_recursive_call) Solo para generar el enlace que también podría usar: Link :: fromTextAndUrl ($ text, Url $ url) Ver el enlace clase .
rémy
¿Qué quieres tema?
rémy
Gracias por la respuesta, pero como se indicó, no quiero llamar al complemento Link directamente. He actualizado mi pregunta con un poco más de información de fondo para comprender mi escenario.
leon.nk
He agregado información sobre lo que estoy haciendo a la pregunta.
leon.nk

Respuestas:

8

Creo que el problema con su código Drupal 8 es que '#url' necesita un objeto URL.

URL externa

'#url' => Url::fromUri('https://www.drupal.org'),

URL interna de una ruta

'#url' => Url::fromRoute('entity.node.canonical', ['node' => 1]),

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.

4k4
fuente
¡Muchas gracias, esto funciona! Sí, no estoy drupal_render()directamente, fue solo por el ejemplo.
leon.nk
1

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.

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$url = Url::fromUri('http://www.example.com', $options);
$markup = \Drupal::l(t('Link Text Goes Here!'), $url);

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.

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$build['examples_link'] = [
  '#title' => t('Link Text Goes Here!'),
  '#type' => 'link',
  '#url' => Url::fromUri('http://www.example.com', $options)
];
oknate
fuente