No Drupal 7 isso foi possível.
$link = array(
'#type' => 'link',
'#title' => t('My Title'),
'#href' => 'node/1',
);
drupal_render($link);
Mas eu tentei isso com o Drupal 8, e ele não produz nada.
$link = array(
'#type' => 'link',
'#title' => t('test'),
'#url' => 'node/1',
);
drupal_render($link);
Existe uma maneira de renderizar um link sem precisar chamar diretamente o plug-in Link ou criar minha própria função de tema?
Estou criando um formatador de grupo de campos, que deve gerar uma matriz de renderização.
O uso de drupal_render()
é preterido e não deve ser chamado diretamente; Estou usando-o aqui para tornar meu exemplo mais claro.
Respostas:
Eu acho que o problema com o seu código Drupal 8 é que '#url' precisa de um objeto de URL.
URL externo
URL interno de uma rota
No Drupal 8, você não deve se render. Ao portar código do Drupal 7, remova toda a renderização e retorne apenas matrizes de renderização.
fonte
drupal_render()
diretamente, foi apenas o exemplo.Como alternativa, você também pode usar
\Drupal\Core\Link::fromTextAndUrl()
ou\Drupal\Core\Link::createFromRoute()
.Twig pode imprimir como está, você também pode obter uma matriz de renderização chamando
\Drupal\Core\Link::toRenderable()
. A matriz de renderização resultante é a mesma do que construí-la manualmente.fonte
Aqui está um exemplo de como renderizar um link no Drupal 8 com uma classe personalizada. É um pouco estranho, mas as opções são passadas para o URL, não para a função de link.
Isso é útil em um formatador de campo, que espera a marcação retornada. Se você estiver fazendo isso em outro lugar, é melhor convertê-lo em um item de matriz de renderização de link.
fonte