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:
content
contiene 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 esvalue
para la mayoría de los tipos de campo, para referencias, puede usartarget_id
para el ID oentity
para 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.value
etc. También puedes recorrerlos.Todo esto se asigna directamente a PHP, también puede hacerlo
$block_content->field_tags->entity->name->value
en preprocesos y otros lugares donde tiene el contenido de bloque.fuente
block_content.field_name.value
Gracias 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