web-dev-qa-db-fra.com

Comment accéder aux données brutes dans le modèle twig en utilisant le format de table des vues

J'utilise une vue sous forme de tableau pour afficher une liste d'articles article-list en utilisant des vues déplaçables pour permettre aux éditeurs de classer la liste. Je personnalise le contenu des lignes en fonction d'un champ booléen is_header et un champ de texte formaté title_override. J'ai sous-thème views-view-table--article-list.html.twig pour y parvenir. Cela fonctionne assez bien.

Dans le modèle, je teste la vérité de is_header et le non-vide de title_override comme suit:

    {% if row.columns.field_is_header|render|striptags|trim %}

et

    {% if row.columns.field_title_override|render|striptags|trim %}

Ces tests donnent les bons résultats, mais ils rendent le modèle très lent! Rien de moins que render|striptags|trim ne fonctionne pas.

QUESTION:

Existe-t-il un moyen d'accéder directement aux valeurs de données brutes de ces variables pour éviter le render|striptags|trim les frais généraux?

J'ai vu des suggestions pour utiliser quelque chose comme row._entity.field_is_header, mais cette façon d'utiliser _entity semble fonctionner uniquement dans les modèles pour les styles de vue HTML ou non formatés. Il semble qu'il devrait y avoir un moyen facile de le faire.

Remarque: le passage à l'utilisation d'un style HTML ou non formaté ne semble pas possible car les vues déplaçables AFAIK ne peuvent être configurées qu'avec le format de tableau.

RÉPONSE:

Merci à 4k4 pour la réponse à cette question (voir ci-dessous). Pour appliquer sa réponse générale à ma question spécifique, voici un extrait du script twig avec lequel je me suis retrouvé:

{% for key, row in rows %}
  {% if view.field.field_is_header.value(view.result[key]) %}
    <conditional stuff>
  {% endif %}
  {% if view.field.field_title_override.value(view.result[key]) %}
    <stuff when the override is non-empty>
  {% else %}
    <stuff when the override is empty>
  {% endif %}
{% endfor %}

Notez que rows est un tableau normalement transmis au modèle views-view-table.html.twig, comme indiqué dans les commentaires d'en-tête du modèle d'origine. Notez également que la disponibilité du tableau view n'est PAS documentée dans les commentaires d'en-tête du modèle d'origine (pas qu'il m'aurait sauvé sans l'aide de 4k4).

2
Marshall Morrise

Vous pouvez essayer d'appliquer getValue () du gestionnaire de champ sur la ligne de résultat, par exemple:

{% if view.field.field_name.value(view.result[key]) %}

Éditer:

Dans un modèle de table de vues row n'est pas du type ResultRow, vous devez donc l'obtenir directement à partir de l'objet view en utilisant key de la boucle {% for key, row in rows %}.

Voir ces questions pour différents modèles de vues: Comment puis-je obtenir des données de l'objet ResultRow dans le modèle de vues et Comment prétraiter le champ de vue?

2
4k4