web-gelistirme-sc.com

Bir Bağlantı alanının geçerli URL'sini bir Twig şablonu) içinden nasıl alabilirim?

field_my_link (Makine adı) adında bir Bağlantı alanım var.

Twig şablonu içinde, bağlantının URL değerini şu şekilde elde edebilirim:

{{ node.field_my_link.uri }}

Bağlantının URL'sinin içinde bir harici URL varsa, ör. http://example.com İyi çalışıyor.

Ancak, Bağlantının URL'sinin içinde bir dahili URL varsa, ör. "/node/11", Şöyle bir değer alıyorum:

"internal:/node/11"

"internal:" önekiyle.

geçerli URL'yi nasıl edinebilirim?

Örneğin, bağlantının URL'si "http://example.com" İstiyorum "http://example.com" (Bu zaten çalışıyor), bağlantının URL'si "/node/11" İse göreli URL istiyorum "/node/11", Bağlantının URL'si "<front>" İse "/" URL'sini istiyorum, vb.


DÜZENLEMEK

Bunu kullanarak bir PHP önişleme fonksiyonu içinde istediğim değeri alabilirsiniz:

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

Twig şablonu içinde aynı değere nasıl erişebilirim?

Bunu önişleme işlevi içinde yapabileceğimi biliyorum:

$variables['my_url'] = $url;

Daha sonra {{ my_url }} Kullanarak Twig içindeki url'ye erişin, ancak her bağlantı alanım olduğunda bir önişleme işlevi yazmaktan kaçınırım.

34
Andrea

PHP = twig şu şekilde tercüme edilecektir:

{{ node.field_my_link.0.url }}

Bu böyle çalışır, 0 Alan öğesi listesinin ilk öğesini döndürür, url url nesnesini alır ve twig bu nesneyi bir dize olarak yayınlayacaktır) bu sihirli yöntemi toString () olarak çağırır ve url değerini dize değeri olarak verir.

Sadece url kullanmanız gerekir, çünkü twig getxyz() yöntemini otomatik olarak ararsa xyz adında bir özellik yoksa.

42
4k4

Oluşturma dizisi öğesine doğrudan sizin durumunuzdan erişebilirsiniz:

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

Her iki durumu da kapsamalısınız: harici ve dahili URL'ler.

Önce URL'nin harici olup olmadığını kontrol edelim ve *.uri Yazdıralım.

Başka dahili ise, yol adını ve parametrelerini Drupal'ın path($name, $parameters, $options) işlevi aracılığıyla kablolamak zorundayız.

{% 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

Bunu bir Bloktaki Bağlantı Alanında yapmak zorundaydım. Bu iyi çalıştı:

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

Eski bir yazı olduğunu biliyorum ama Drupal 8 (8.6) son sürümü ile doğrudan her iki sürüm (dış ve iç) için url görüntüleyebilirsiniz:

node.field_link.0.url

Ve bağlantının harici olup olmadığını bilmeniz gerekiyorsa (benim durumum için hedef içindi), bunu kullanabilirsiniz:

node.field_link.0.url.external

Misal:

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

ayrıca aşağıdaki gibi bir şey kullanabilirsiniz, hepsi ayıkladığınız nesnenin türüne ve alan adına bağlıdır, Benim durumumda field_link adlı bir alana sahip bir paragraftı ve aşağıdakiler çalıştı:

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

Paragrafta, bağlantı URL'sini ve bağlantı adını almak için -

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

Ben biliyorum korkunç, ama başka bir şey işe yaramazsa:

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

Durumum: Geçersiz kılınan görünümler şablonuyla bir Bağlantı alanına erişme: views-view-fields.html.twig

Değişkeni almak zorunda kaldım:

row._entity.field_machine_name.value.0.uri

(fields değişkenini kullanmaya çalışırken vazgeçtim, görünüşe göre bir . İçerik özelliği alabilirsiniz, ama çok fazla değil )

… .field_machine_name.value sadece uri anahtarı olan düz bir dizidir, NOT url ve diğer yanıtlarda (toString (), render vb.) belirtilen filtreler burada işe yaramıyor gibi görünüyor.

0
William Turrell