entities – ¿Cómo accedo a los datos de campo en Twig?

Pregunta:

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, da como resultado FALSE .

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

El siguiente código devuelve TRUE .

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

¿Existe una versión más corta para obtener la cadena "real" para poder usar los filtros de cadena Twigs y mantenerla ordenada?

Respuesta:

content contiene las matrices de procesamiento 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 block_content se representa en el contenido del bloque sin su propia plantilla, por lo que debe hacer que esté disponible usted mismo en un yourtheme_preprocess_block($variables) como este:

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

Luego, puede acceder a un valor de campo con block_content.field_name.property . Entonces, en su caso, block_content.field_align.value . La propiedad es un value para la mayoría de los tipos de campo; para las referencias, puede usar target_id para el ID o entity para el objeto de entidad al que se hace referencia. Sí, puede acceder directamente a los campos sobre 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 como block_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 y así sucesivamente. También puede recorrerlos.

Todo esto se asigna directamente a PHP, también puede hacer $block_content->field_tags->entity->name->value en preproceso y otros lugares donde tiene el block_content.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım