it-swarm-ko.tech

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

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

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

{{ node.field_my_link.uri }}

링크의 URL 내부에 외부 URL이있는 경우 (예 : http://example.com 잘 작동합니다.

그러나 링크의 URL 내부에 internal URL (예 : "/node/11", 나는 다음과 같은 값을 얻는다 :

"internal:/node/11"

접두사 "internal:".

valid URL을 어떻게 얻을 수 있습니까?

예를 들어, 링크의 URL이 "http://example.com"인 경우 "http://example.com"를 원합니다 (이미 작동 함). 링크의 URL이 "/node/11"인 경우 상대 URL을 원합니다. "/node/11", 링크의 URL이 "<front>"이면 URL "/"등을 원합니다.


편집

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

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

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

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

$variables['my_url'] = $url;

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

34
Andrea

당신의 PHP 최근 편집에서 twig 다음과 같이 번역) :

{{ node.field_my_link.0.url }}

0는 필드 항목 목록의 첫 번째 항목을 반환하고 url는 url 객체를 가져오고 twig는이 객체를 문자열로 캐스팅합니다. 이것은 마술 메소드 toString ()을 호출하고 URL을 문자열 값으로 출력합니다.

이름이 url 인 속성이없는 경우 twig는 getxyz()_ 메소드를 자동으로 찾기 때문에 xyz 만 사용해야합니다.

42
4k4

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

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

외부 및 내부 URL 모두를 다루어야합니다.

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

그렇지 않으면 internal 이면 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 %}
13
leymannx

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

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

나는 그것이 오래 된 게시물이라는 것을 알고 있지만 마지막 버전 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' }}"
6
AnTSaSk

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

{{ paragraph.field_link.get(0).getUrl().toString() }}
3
Israel Morales

단락에서 링크 URL과 링크 이름을 얻으려면-

<a href="{{ content.FIELD_LINK_NAME[0]['#url']|render }}">
   {{ content.FIELD_LINK_NAME[0]['#title']|render }}
</a>
1
Wasim Khan

나는 know 끔찍하지만 아무것도 작동하지 않으면 :

{{ link|replace({'internal:':''}) }}

내 상황 : 재정의 된 뷰 템플릿을 통해 링크 필드에 액세스 : views-view-fields.html.twig

변수를 다음에서 가져와야했습니다.

row._entity.field_machine_name.value.0.uri

(나는 fields 변수를 사용하려고 포기했다. 겉으로는 . content 속성을 얻을 수는 있지만 그다지 많지는 않다. )

… .field_machine_name.value 는 단지 평면 배열이며 uri 키, NOT url 및 다른 답변 (toString (), render 등)에서 언급 된 필터는 여기서 작동하지 않는 것 같습니다.

0
William Turrell