Tengo un campo de enlace llamado field_my_link
(nombre de la máquina).
Dentro de una plantilla Twig puedo obtener el valor de URL del enlace con esto:
{{ node.field_my_link.uri }}
Si dentro de la URL del enlace hay una URL externa , por ejemplo http://example.com
, funciona bien.
Pero, si dentro de la URL del enlace se almacena una URL interna , por ejemplo "/node/11"
, obtengo un valor como este:
"internal:/node/11"
con el internal:
prefijo " ".
¿Cómo puedo obtener la URL válida ?
Por ejemplo, si la URL del enlace es " http://example.com
" Quiero " http://example.com
" (esto ya funciona), si la URL del enlace es " /node/11
" Quiero la URL relativa " /node/11
", si la URL del enlace es " <front>
" Quiero la URL " /
", etc. .
EDITAR
Puedo obtener el valor que quiero dentro de una función de preproceso de PHP, usando esto:
$url = $variables['node']->get('field_my_link')->first()->getUrl();
¿Cómo puedo acceder al mismo valor dentro de la plantilla Twig?
Sé que puedo hacer esto dentro de la función de preproceso:
$variables['my_url'] = $url;
Luego acceda a la URL dentro de Twig usando {{ my_url }}
, pero evitaría escribir una función de preproceso cada vez que tenga un campo de enlace.
fuente
node.field_my_link.uri
es como una url externahttp://www.example.com
?file_url(node.field_my_link.uri)
, y sinode.field_my_link.uri
es"http://www.example.com"
que funciona (que deja la url sin cambios), pero sinode.field_my_link.uri
es"internal:/"
la función devuelve"/internal%3A/"
(en lugar de"/"
) ..node.field_my_link.entity.uri.value
devuelve un valor nulo ... ¿Alguna otra idea?Puede acceder directamente al elemento de la matriz de representación, en su caso:
fuente
Debe cubrir ambos casos: URL externas e internas.
Primero verifiquemos si la URL es externa y simplemente imprima su
*.uri
.De lo contrario, si es interno , tenemos que conectar su nombre de ruta y parámetros a través de la
path($name, $parameters, $options)
función de Drupal .fuente
{% set url = path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) %}
Entonces puedo crear un enlace personalizado: `<a href="{{ url }}" class="mycustomclass">custom link text</a>
No se necesita preproceso y no es necesario ir a través de content.field_link, así que no es necesario hacer nada en 'Administrar pantalla' para el campo de enlace solo para obtener la URL.Tenía que hacer esto en un campo de enlace en un bloque. Esto funcionó bien:
fuente
{{ content.field_my_link[0]['#url'] }}
sin renderizar , ya que en la plantilla de ramita, la matriz de renderizado se renderiza automáticamente cuando se imprime.Sé que es una publicación anterior, pero con la última versión de Drupal 8 (8.6) puede mostrar directamente la URL de ambas versiones (externa e interna):
Y si necesita saber si el enlace es externo o no (en mi caso fue para el objetivo), puede usar eso:
Ejemplo:
fuente
También puede usar algo como lo siguiente, todo depende del tipo de objeto que está extrayendo y el nombre del campo. En mi caso, era un párrafo con un campo llamado field_link y lo siguiente funcionó:
fuente