2016-11-08 9 views
0

Использование Drupal 8Twig добавить атрибут со значением в переменной

Я хочу, чтобы распечатать содержимое полевого в в атрибут src. У меня есть следующий шаблон для моего зрения:

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

Но IFrame наполняется «Страница не найдена» моего собственного сайта страница вместо Youtube видео, потому что Twig выводит целую массу отладочных комментариев до и после печати переменной rows[0].content.

Можно ли отключить отладочные комментарии для определенного поля? Я не хочу отключать/разрешать отладку, чтобы убедиться, что он работает так, как ожидалось.

Я также пробовал использовать {{ attributes.setAttribute('src', {{ rows[0].content }}) }}, но не кубики.

Другой неудачная попытка была:

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

Моя последняя идея была такова:

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

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

Но он печатает Src = Array

ответ

0

Ответ на вопрос: another question, я вставляю его здесь, если его удаляют. Автор следующего ответа: @4k4

field.content - реновированное поле. А в представлениях это означает, что он больше не является массивом рендеринга, а, наконец, рендеринговой разметкой. Поэтому это очень проблематично использовать его как имя класса, а не только из-за отладки twig.

Лучше использовать данные строки, где вы найдете объект сущности с данными поля из базы данных. Используйте clean_class, чтобы избежать его использования в качестве имени класса:

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

звучит как-то, что должно было бы быть сделано в препроцессоре. Если вы возьмете его из объекта узла, а не из массива содержимого, он не получит всю эту отладочную ошибку.

Вы также должны убедиться, что ваш URL-адрес не делает что-то злобное ... Если вы только ожидаете, что видео youtube вы должны сделать некоторую проверку, чтобы убедиться, что это то, что вы получаете от контента.

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

См $ узел, найти значение, дезинфицировать/двойную проверку этого значения, а затем установить его в $ переменных [ «имя_переменной»], и вы должны быть в состоянии использовать его в сучке с {{имя_переменным} }

1

попробовать этот

в вашем .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; 
    } 
} 

в вашей веточке

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