web-dev-qa-db-fra.com

Impossible d'accéder aux champs de vues dans le bloc Twig template

Comment Drupal 8 utilise Twig, comment différentes données sont transférées du modèle général vers des modèles spécifiques?

Pour le bloc d'affichage, j'ai créé un modèle de bloc selon les suggestions de modèle par défaut. Dans mon nouveau modèle Twig si j'imprime {{ content }} Tout (afficher les champs de résultat) est rendu selon Drupal par défaut).

Comment puis-je accéder et appliquer mon balisage de thème à tous les champs d'affichage de mon modèle de bloc. {{ dump(_context|keys) }} affichage ci-dessous.

enter image description here

enter image description here

3
harish

Dans bloc - vues-bloc - page-champs-bloc-1.html.twig

Vous pouvez accéder aux champs d'affichage comme ceci:

{% for row in content['#view'].result %}

  {{ content['#view'].field['field_name'].value(row) }} 
  // change field_name to the actual field machine name. 

{% endfor %}

Personnellement, j'utilise plutôt views-view-fields - [view-name] -- [machine-name] . Html.twig

Dans votre cas, il devrait y avoir des vues-champs-vue - champs-page - bloc-1.html.twig

Ici, vous n'avez pas besoin de faire une boucle for et vous pouvez accéder facilement aux champs avec:

{{ fields.field_name.content }}
// change field_name to the actual field machine name. 
5
No Sssweat

Si vous souhaitez rendre le bloc dans votre modèle personnalisé:

  1. Créez votre fichier twig block--views-block-page-fields-block-1.html.twig dans le dossier templates de votre module personnalisé.

  2. mettre en place hook_theme comme suit:


    /**
     * Implements hook_theme().
     */
    function yourModuleName_theme($existing, $type, $theme, $path) {
      return [
        'block__views_block_page_fields_block-1'     => [
          'base hook' => 'block'
        ],
      ];
    }
  1. Vider le cache.
  2. Vous avez maintenant la variable content.

Si vous utilisez Twig Tweak vous pouvez utiliser drupal_view_result pour obtenir le résultat de la vue, afin que vous puissiez accéder aux champs comme:

{% for result in drupal_view_result(content['#view'].id, content['#view'].current_display) %}
  {{ result._entity.field_name.value }}
{% endfor %}
1
berramou