2016-11-08 1 views
0

utilisant Drupal 8Brindille ajouter attribut avec la valeur dans une variable

Je veux imprimer le contenu d'un champ dans l'attribut src. Je le modèle suivant pour moi:

<div class="videoWrapperHD"> 
    <iframe width="560" height="315" src="{{ rows[0].content | raw }}" 
     frameborder="0" allowfullscreen> 
    </iframe> 
</div> 

Mais l'iframe est rempli avec mon propre site « Page Not Found » page au lieu de la vidéo Youtube car Brindille imprime beaucoup de commentaires de débogage avant et après l'impression de la variable rows[0].content.

Est-il possible de désactiver les commentaires de débogage pour un champ spécifique? Je ne veux pas avoir à désactiver/activer le débogage pour m'assurer qu'il fonctionne comme prévu.

J'ai également essayé d'utiliser {{ attributes.setAttribute('src', {{ rows[0].content }}) }}, mais pas de dés.

Une autre tentative a échoué était:

{% set iframe_src = rows[0].content %} 
<div class="videoWrapperHD"> 
    <iframe width="560" height="315" {{ attributes.setAttribute('src', iframe_src) }} 
    frameborder="0" allowfullscreen></iframe> 
</div> 

Ma dernière idée était la suivante:

{% set url = rows[0].content | raw %} 
{% set iframe_src = 'src=' ~ url %} 

<div class="videoWrapperHD"> 
    <iframe {{ iframe_src }} ></iframe> 
</div> 

Mais il imprime src = Array

Répondre

0

La réponse est dans another question, je colle ici dans le cas où on est supprimé. L'auteur de la réponse suivante est @4k4

field.content est le champ rendu. Et dans les vues cela signifie que ce n'est plus un tableau de rendu, mais le balisage rendu. Il est donc très problématique de l'utiliser comme nom de classe, pas seulement à cause du débogage de twig.

Mieux utiliser les données de ligne, où vous trouvez l'objet entité avec les données de champ de la base de données. Utilisez clean_class pour l'échapper afin de l'utiliser comme nom de classe:

{{ row._entity.field_myfield.value|clean_class }} 
0

Sonne comme quelque chose qui devrait être fait dans le préprocesseur. Si vous l'attrapez à partir de l'objet nœud, à la place du tableau de contenu, il ne devrait pas avoir toutes ces bêtises de débogage.

Vous devez également vous assurer que votre URL ne fait pas quelque chose de mal ... si vous attendez seulement des vidéos sur youtube, vous devriez faire quelques vérifications pour vous assurer que c'est ce que vous obtenez du contenu.

https://api.drupal.org/api/drupal/core%21modules%21node%21node.module/function/template_preprocess_node/8.2.x

Voir nœud $, trouver la valeur, désinfectez double/vérifiez sa valeur, rétablissez alors les variables $ [ « variable_name »] et vous devriez pouvoir l'utiliser dans brindille avec {{variable_name} }

1

essayer cette

dans votre .theme

function your_theme_preprocess_field(&$variables, $hook) { 
    switch ($variables['element']['#field_name']) { 
     case 'field_iframe_src': 
      $variables['iframe_src'] = $variables['items'][0]['content']['#context']['value']; 
      break; 
    } 
} 

dans votre branche

<iframe width="560" height="315" src="{{ iframe_src|raw}}" 
     frameborder="0" allowfullscreen> 
    </iframe>