Twig在变量

时间:2016-11-08 18:15:12

标签: drupal twig drupal-views drupal-8

使用Drupal 8

我想将字段的内容打印到src属性中。我的观点有以下模板:

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

但iframe充满了我自己的网站&#34; Page Not Found &#34;页面而不是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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

听起来像是必须在预处理器中完成的事情。如果你从节点对象中获取它,而不是内容数组,它就不应该得到所有调试废话。

你还应该确保你的网址没有做坏事...如果你只想要你的视频,你应该做一些检查,以确保这是你从内容中获得的。

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

请参阅$ node,找到值,清理/仔细检查它的值,然后将其设置为$ variables [&#39; variable_name&#39;]并且您应该能够在twig中使用它{ {变量名}}

答案 2 :(得分:0)

答案在another question,我在这里粘贴它以防被删除。以下答案的作者是@4k4

field.content是渲染字段。在视图中,这意味着它不再是渲染数组,而是最终渲染的标记。所以将它用作类名是非常有问题的,不仅仅是因为twig debug。

更好地使用行数据,您可以在其中找到包含数据库中字段数据的实体对象。使用clean_class转义它以将其用作类名:

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