Twig'deki alan verilerine nasıl erişirim?


15

Aşağıdaki gibi özel bir blok türü için bir liste alanı var:

left|Align left
right|Align right

Twig'deki anahtara şöyle bir şey yaparak erişebilirim:

{% block content %}
  {{ content.field_align }}  {# outputs 'right' #}
{% endblock %}

Ancak, basit bir karşılaştırma yaparsam, çıktı alır FALSE.

{{ kint(content.field_align == 'right') }}

Aşağıdaki kod döndürülür TRUE.

{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}

"Gerçek" dize almak için daha kısa bir sürümü var mı, bu yüzden Twigs dize filtrelerini kullanabilir ve düzenli tutabilir miyim?


Yanıtlar:


16

content yapılandırılmış biçimlendiricileri temel alan oluşturma dizilerini içerir.

Gerçek değerlere erişmek istiyorsanız, onlara varlık nesnesi üzerinden erişmek istersiniz. Örneğin, bu zaten şablonunuz tarafından kullanılabilir node. Sizin durumunuz için, biraz özeldir, çünkü block_content, blok şablonunda kendi şablonu olmadan işlenir, bu nedenle bunu kendiniz yourtheme_preprocess_block($variables)böyle bir şekilde sunmanız gerekir :

if (isset($variables['elements']['content']['#block_content'])) {
  $variables['block_content'] = $variables['elements']['content']['#block_content'];
}

Ardından, bir alan değerine ile erişebilirsiniz block_content.field_name.property. Yani senin durumunda block_content.field_align.value. Özellik valueçoğu alan türü içindir, başvurular target_idiçin kimlik veya entitybaşvurulan varlık nesnesi için kullanabilirsiniz. Evet, bununla ilgili alanlara doğrudan erişebilirsiniz, ancak her zaman bir başvurunun var olup olmadığını kontrol ettiğinizden emin olun, aksi takdirde ölümcül hatalar veya istisnalarla karşılaşabilirsiniz. Örneğin bir terim referansının etiketine erişmek için, etikete şu şekilde erişebilirsiniz block_content.field_tags.entity.name.value.

Alan deltasını belirtmezseniz, varsayılan olarak birincisi olur. Farklı bir deltaya erişmek istiyorsanız, entity.field_name.1.valuevb. Kullanabilirsiniz . Bunların üzerinde de döngü yapabilirsiniz.

Tüm bunlar doğrudan PHP $block_content->field_tags->entity->name->valueile eşleşir , ayrıca önişlemede ve block_content'in bulunduğu diğer yerlerde de yapabilirsiniz.


Cevabınız için teşekkürler! Bunu düğüm nesnesinin kullanılamadığı blok dal şablonundan (alt tema "Classy") yaptığım gibi, değerleri önceden işlemek ve bir şekilde enjekte etmek gerekir mi?
estrar

Üzgünüm, block_content bölümünü kaçırdım. Yanıt güncellendi.
Berdir

Mükemmel! Bunu yaparak değerleri alabilirim: block_content.field_name.value Anlamama yardım ettiğin için teşekkürler!
estrar

6

Burada, bir oluşturma dizisi oluşturmanıza ve değerini kontrol etmenize olanak tanıyan alternatif, şablonun tek bir yolu vardır (Drupal 8 Twig'e yazdırmak, dizileri oluşturan değişkenleri otomatik olarak oluşturduğundan, değişkeni yazdırıyormuşsunuz gibi kontrol etmenize olanak tanır):

{{ kint(content.field_align|render == 'right') }}

Veya değişkeni daha sonra yazdırıyorsanız fazladan render'i kaydetmek için başka bir seçenek:

{% set field_align = content.field_align|render %}
{{ kint(field_align == 'right') }}

{{ field_align }}

Çok faydalı ve bilmek güzel! Giriş için teşekkürler.
estrar

2

Bu durumda Twig Field Value modülünü kullanabilirsiniz . Alan oluşturma dizilerinden kısmi veri almayı sağlar. Örn. content.field_name | field_value -alanın hedef değeri. IF deyiminde kullanabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.