Eu tenho um campo Link chamado field_my_link
(nome da máquina).
Dentro de um modelo Twig, posso obter o valor da URL do link com este:
{{ node.field_my_link.uri }}
Se dentro do URL do link houver um URL externo , por exemplo, http://example.com
ele funcionará bem.
Mas, se dentro da URL do link houver uma URL interna armazenada , por exemplo "/node/11"
, recebo um valor como este:
"internal:/node/11"
com o internal:
prefixo " ".
Como posso obter o URL válido ?
Por exemplo, se o URL do link for " http://example.com
" Quero " http://example.com
" (isso já funciona), se o URL do link for " /node/11
" Quero o URL relativo " /node/11
", se o URL do link for " <front>
" Quero o URL " /
", etc. .
EDITAR
Posso obter o valor que desejo dentro de uma função de pré-processo PHP, usando este:
$url = $variables['node']->get('field_my_link')->first()->getUrl();
Como posso acessar o mesmo valor no modelo Twig?
Eu sei que posso fazer isso dentro da função pré-processo:
$variables['my_url'] = $url;
Em seguida, acesse o URL dentro do Twig usando {{ my_url }}
, mas evitaria escrever uma função de pré-processo toda vez que tiver um campo de link.
fonte
node.field_my_link.uri
for como um URL externohttp://www.example.com
?file_url(node.field_my_link.uri)
, e senode.field_my_link.uri
é"http://www.example.com"
ele funciona (ele deixa a url inalterado), mas senode.field_my_link.uri
é"internal:/"
a função retorna"/internal%3A/"
(em vez de"/"
) ..node.field_my_link.entity.uri.value
retorna um valor nulo. Alguma outra idéia?Você pode acessar o elemento da matriz de renderização diretamente, no seu caso:
fonte
Você precisa cobrir os dois casos: URLs externos e internos.
Primeiro vamos verificar se o URL é externo e simplesmente imprimi-lo
*.uri
.Caso contrário, se for interno , precisamos conectar seu nome e parâmetros de rota através da
path($name, $parameters, $options)
função do Drupal .fonte
{% set url = path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) %}
Então eu posso criar um link personalizado: `<a href="{{ url }}" class="mycustomclass">custom link text</a>
Nenhum pré-processo é necessário e não é necessário acessar content.field_link, portanto, não é necessário fazer nada em o 'Gerenciar exibição' para o campo do link apenas para obter o URL.Eu tive que fazer isso em um campo de link em um bloco. Isso funcionou bem:
fonte
{{ content.field_my_link[0]['#url'] }}
sem renderização , como no modelo de galho, a matriz de renderização é renderizada automaticamente quando impressa.Eu sei que é um post antigo, mas com a última versão do Drupal 8 (8.6), você pode exibir diretamente o URL da versão (externa e interna):
E se você precisar saber se o link é externo ou não (no meu caso, foi para o destino), você pode usar isso:
Exemplo:
fonte
você também pode usar algo como o seguinte, tudo depende do tipo de objeto que você está extraindo e do nome do campo. No meu caso, era um parágrafo com um campo chamado field_link e o seguinte funcionou:
fonte