Tengo un campo de lista para un tipo de bloque personalizado que se ve así:
left|Align left
right|Align right
Puedo acceder a la clave en Twig haciendo algo como esto:
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
Sin embargo, si hago una comparación simple, sale FALSE.
{{ kint(content.field_align == 'right') }}
El siguiente código vuelve TRUE.
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
¿Existe una versión más corta para obtener la cadena "real" para que pueda usar los filtros de cadena Twigs y mantenerlo ordenado?

Respuestas:
contentcontiene las matrices de renderizado basadas en los formateadores configurados.Si desea acceder a los valores reales, desea acceder a ellos a través del objeto de entidad. Por lo general, eso ya está disponible para su plantilla, por ejemplo
node. Para su caso, es un poco especial porque el contenido de bloque se representa en el contenido del bloque sin su propia plantilla, por lo que debe ponerlo a su disposición de layourtheme_preprocess_block($variables)siguiente manera:Luego, puede acceder a un valor de campo con
block_content.field_name.property. Entonces en tu casoblock_content.field_align.value,. La propiedad esvaluepara la mayoría de los tipos de campo, para referencias, puede usartarget_idpara el ID oentitypara el objeto de entidad referenciado. Sí, puede acceder directamente a los campos en eso, pero asegúrese de verificar siempre que exista una referencia; de lo contrario, puede terminar con errores fatales o excepciones. Para acceder a la etiqueta de una referencia de término, por ejemplo, puede acceder a ella comoblock_content.field_tags.entity.name.value.Si no especifica el campo delta, el valor predeterminado es el primero. Si desea acceder a un delta diferente, puede usar,
entity.field_name.1.valueetc. También puedes recorrerlos.Todo esto se asigna directamente a PHP, también puede hacerlo
$block_content->field_tags->entity->name->valueen preprocesos y otros lugares donde tiene el contenido de bloque.fuente
block_content.field_name.valueGracias por ayudarme a entender!Aquí hay una forma alternativa de plantilla que le permite renderizar una matriz de renderizado y verificar su valor (permite verificar la variable como si la estuviera imprimiendo, porque imprimir en Drupal 8 Twig renderiza automáticamente las variables que son matrices de renderizado):
O otra opción para guardar el render extra si está imprimiendo la variable más tarde:
fuente
Puede usar el módulo Twig Field Value en este caso. Permite obtener datos parciales de matrices de renderizado de campo. Por ej. content.field_name | field_value -get valor del campo. Puede usarlo en la declaración IF
fuente