Eu tenho um campo de lista para um tipo de bloco personalizado que se parece com isso:
left|Align left
right|Align right
Eu posso acessar a chave no Twig fazendo algo assim:
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
No entanto, se eu fizer uma comparação simples, ela gera FALSE
.
{{ kint(content.field_align == 'right') }}
O código a seguir retorna TRUE
.
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
Existe uma versão mais curta para obter a string "real" para que eu possa usar os filtros de string do Twigs e mantê-la arrumada?
Respostas:
content
contém as matrizes de renderização com base nos formatadores configurados.Se você deseja acessar os valores reais, deseja acessá-los através do objeto de entidade. Geralmente, isso já está disponível para o seu modelo, por exemplo
node
. Para o seu caso, é um pouco especial porque o block_content é renderizado no conteúdo do bloco sem seu próprio modelo, então você deve disponibilizá-lo dayourtheme_preprocess_block($variables)
seguinte maneira:Em seguida, você pode acessar um valor de campo com
block_content.field_name.property
. Então, no seu casoblock_content.field_align.value
. A propriedade évalue
para a maioria dos tipos de campos, para referências, você pode usartarget_id
para o ID ouentity
para o objeto de entidade referenciado. Sim, você pode acessar diretamente os campos sobre isso, mas verifique sempre se existe uma referência, caso contrário, poderá acabar com erros ou exceções fatais. Para acessar o rótulo de uma referência de termo, por exemplo, você pode acessá-lo comoblock_content.field_tags.entity.name.value
.Se você não especificar o delta do campo, o padrão será o primeiro. Se você deseja acessar um delta diferente, pode usar
entity.field_name.1.value
e assim por diante. Você também pode fazer um loop sobre eles.Isso tudo mapeia diretamente para o PHP, você também pode fazer
$block_content->field_tags->entity->name->value
no pré-processo e em outros lugares onde você tem o block_content.fonte
block_content.field_name.value
Obrigado por me ajudar a entender!Aqui está uma maneira alternativa, apenas de modelo, que permite renderizar uma matriz de renderização e verificar seu valor (permite verificar a variável como se você a estivesse imprimindo, porque a impressão no Drupal 8 Twig renderiza automaticamente variáveis que são matrizes de renderização):
Ou outra opção para salvar a renderização extra se você estiver imprimindo a variável posteriormente:
fonte
Você pode usar o módulo Twig Field Value neste caso. Permite obter dados parciais de matrizes de renderização de campo. Por ex. content.field_name | field_value -get valor do campo. Você pode usá-lo na instrução SE
fonte