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.
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.
Oluşturma dizisi öğesine doğrudan sizin durumunuzdan erişebilirsiniz:
{{ node.field_my_link[0]['#url'] }}
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 %}
Bunu bir Bloktaki Bağlantı Alanında yapmak zorundaydım. Bu iyi çalıştı:
{{ content.field_my_link[0]['#url']|render }}
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' }}"
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() }}
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>
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.