web-dev-qa-db-fra.com

Obtenir l'ID de paragraphe dans le modèle de champ

J'ai un modèle de paragraphe où j'imprime un champ, par exemple:

{{ content.field_products }}

Dans ce modèle, je peux obtenir l'ID de paragraphe avec:

paragraph.id()

J'ai besoin de passer cet identifiant de paragraphe dans le modèle de champ. Quelle est la manière la plus simple et la plus propre de procéder? J'ai trouvé une solution comme celle-ci:

{{ content.field_products|merge({666:paragraph.id()}) }}

puis j'obtiens la valeur dans le modèle de champ comme ceci:

{% set paragraphId = items[items|length-1].content %}

Mais c'est sale et génère un avertissement "Message d'erreurUser error:" 4 "est une clé de tableau de rendu invalide dans Drupal\Core\Render\Element :: children () (ligne 99 de core/lib/Drupal/Core/Render /Element.php). " que je peux comprendre étant donné que c'est un hack sale et drupal essayez de rendre mon tableau "666".

Je vais probablement obtenir le tableau avec la clé "666" que j'ai ajoutée dans un préprocess_field (), créer une nouvelle variable pour le modèle de champ et supprimer ce hack diabolique de $ variables pour supprimer l'avertissement en raison d'une tentative de rendre ce faux tableau , mais je suppose qu'il y a une meilleure façon de faire? Je veux simplement passer une variable d'un modèle à son enfant ...

merci !

4
Charles Dexter Ward

La solution propre est le prétraitement des modèles: dans yourtheme.theme créer quelque chose comme

function yourtheme_preprocess_field(&$variables, $hook) {
  $element = $variables['element'];
  $parentEntity = $element['#object'];
  //might be useful for if-clause: $variables['field_name'] and $variables['field_type']
  if ($parentEntity && $parentEntity->getEntityTypeId() == 'paragraph' ) {
    //whatever logic you need goes here, e.g. something like
    //$variables['attributes']['data-from-parent-paragraph'] = $parentEntity->getYourStuff();
  }
}
4
Hudri