Twig 템플릿 내에서 링크 필드의 유효한 URL을 얻는 방법은 무엇입니까?


30

이름이 링크 필드입니다 field_my_link(컴퓨터 이름) 있습니다.

Twig 템플릿 내에서 다음과 같이 링크의 URL 값을 얻을 수 있습니다.

{{ node.field_my_link.uri }}

링크의 URL 안에 외부 가 있다면 URL이있는 경우, 예를 들어 http://example.com제대로 작동합니다.

그러나 링크의 URL 안에 내부 URL 이 저장되어 있으면 예를 들어 "/node/11"다음과 같은 값을 얻습니다.

"internal:/node/11"

와 더불어 "internal: "접두사로

유효한 방법은 무엇입니까? URL을 어떻게 있습니까?

예를 들어, 링크의 URL이 " http://example.com"I want " http://example.com"(이미 작동 함) 인 경우 링크의 URL이 /node/11" /node/11"인 경우 상대 URL " "을 원하거나 링크의 URL이 " <front>"인 경우 URL " /"을 원하는 경우 등 .


편집하다

다음을 사용하여 PHP 전처리 함수 내에서 원하는 값을 얻을 수 있습니다.

$url = $variables['node']->get('field_my_link')->first()->getUrl();

나뭇 가지 템플릿 내에서 동일한 값에 어떻게 액세스 할 수 있습니까?

전처리 기능 내 에서이 작업을 수행 할 수 있다는 것을 알고 있습니다.

$variables['my_url'] = $url;

그런 다음을 사용하여 Twig 내의 URL에 액세스 {{ my_url }}하지만 링크 필드가있을 때마다 전처리 기능을 작성하지 마십시오.

답변:


38

최신 편집 내용의 PHP는 다음과 같이 나뭇 가지로 변환됩니다.

{{ node.field_my_link.0.url }}

이것은 다음과 같이 작동 0하며 필드 항목 목록의 첫 번째 항목을 반환합니다.url url 객체를 가져옵니다. twig는이 객체를 문자열로 캐스팅하기 때문에 마술 메서드 toString ()을 호출하고 URL을 문자열 값으로 출력합니다.

당신은 사용할 필요가 url나뭇 가지 방법에 대해 자동으로 보이기 때문에, getxyz()그 이름을 가진 재산이없는 경우 xyz.


고맙습니다. 이제이 기능으로 테스트합니다. 링크의 URI에서도이 기능을 사용할 수 있는지 알고 있습니까? 경우 어떤 일이 node.field_my_link.uri외부 URL이 같다 http://www.example.com?
Andrea

1
나는 함께 노력 file_url(node.field_my_link.uri)하고, 경우 node.field_my_link.uri입니다 "http://www.example.com"작동 (이 변경되지 않은 URL을 잎),하지만 경우 node.field_my_link.uri입니다 "internal:/"함수가 반환 "/internal%3A/"(대신 "/") ..
안드레아

방금 편집 내용을 보았습니다. 안타깝게도 코드 node.field_my_link.entity.uri.value가 null 값을 반환합니다. 다른 아이디어가 있습니까?
Andrea

@Andrea, 나는 대답을 편집했다.
4k4

1
예, 잘 작동합니다. 구문은 약간 무섭지 만 그 역할을 수행합니다.
Andrea

17

다음과 같은 경우 렌더 배열 요소에 직접 액세스 할 수 있습니다.

{{ node.field_my_link[0]['#url'] }}

이것은 나를 위해 일했습니다.
esQmo_

10

외부 및 내부 URL 모두를 포함해야합니다.

먼저 URL이 외부 인지 확인 하고 간단히 인쇄하십시오*.uri .

내부에 있다면 Drupal의 path($name, $parameters, $options)기능을 통해 경로 이름과 매개 변수를 연결해야합니다 .

{% if node.field_link.0.url.external %}
  <a href="{{ node.field_link.uri }}">
    {{ node.field_link.title }}
  </a>
{% else %}
  <a href="{{ path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) }}">
    {{ node.field_link.title }}
  </a>
{% endif %}

2
감사합니다, 이것은 정확히 내가 필요한 것입니다 : 링크 필드에서 문자열을 URL로 가져 오십시오 : {% set url = path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) %}그런 다음 사용자 정의 링크를 만들 수 있습니다 :` <a href="{{ url }}" class="mycustomclass">custom link text</a>전처리가 필요없고 content.field_link를 거치지 않아도되므로 아무것도 할 필요가 없습니다. URL을 얻기 위해 링크 필드의 '표시 관리'.
user33560

8

블록의 링크 필드 에서이 작업을 수행해야했습니다. 이것은 잘 작동했습니다 :

{{ content.field_my_link[0]['#url']|render }}

4
게다가 미세도 {{ content.field_my_link[0]['#url'] }}없이 렌더링 나뭇 템플릿으로서, 인쇄시 배열을 자동으로 렌더링하는 렌더링된다.
eric.chenchao

5

오래된 게시물이지만 Drupal 8 (8.6)의 마지막 버전에서는 버전 (외부 및 내부)에 대한 URL을 직접 표시 할 수 있습니다.

node.field_link.0.url

링크가 외부인지 아닌지 알아야하는 경우 (내 경우에는 대상을위한 것입니다), 다음을 사용할 수 있습니다.

node.field_link.0.url.external

예:

<a href="{{ node.field_link.0.url }}" title="Title" target="{{ node.field_link.0.url.external ? '_blank' : '_self' }}"

1

당신은 또한 다음과 같은 것을 사용할 수 있습니다. 모두 추출하는 객체의 유형과 필드 이름에 달려 있습니다. 제 경우에는 field_link라는 필드가있는 단락이었고 다음이 효과가있었습니다.

{{ paragraph.field_link.get(0).getUrl().toString() }}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.