2016-01-19 60 views
1

我有一个字段添加到基本页面的内容类型。它是一个选择框,根据页面是否是“入门”类型,该框可以选中或取消选中。如果页面是入门页面,即希望检查该框,我想将该类别的“入门”添加到html中的body元素。我想在.theme文件中执行此操作。所以基本上我想检查一下,看看这个字段是否为空,以及它是否将这个类添加到body元素中。任何帮助将非常感激。如何检查drupal 8中的字段是否为空?

回答

0

您可以使用template_preprocess_node(https://api.drupal.org/api/drupal/core%21modules%21node%21node.module/function/template_preprocess_node/8)函数来选取正在加载的节点的可用变量。

在此功能中,你可以像这样访问节点的字段:

$variables['content']['field_some_name'] 

如果检查通过,你可以添加一些自定义变量在树枝模板中使用:

$variables['something'] = true; 

OR:您直接在节点树枝模板中检查该字段的值。问题是,如果真的有必要将所需的类添加到body元素。也许将它添加到节点的文章标签中可以完成这项工作,至少可以更容易地检查。

如果你真的需要把它添加到body元素,我想你需要使用template_preprocess_page功能,首先检查是否正在加载的页面是一个节点,然后找出哪些节点等

+0

不幸的是,我不得不将该类添加到body元素,因为我需要根据我检查的字段的值更改页面标题的颜色。我熟悉在'template_preprocess_page'函数中向主体添加类的过程,但我不熟悉在响应的后半部分中描述的方式和原因,“首先检查页面被加载的是一个节点,然后找出哪个节点等“。 – ljolz

+0

我不能只是检查字段是否设置了上面取样的代码,然后将所有类应用于预处理页面函数中? – ljolz

+0

“问题”是在所有页面上调用template_preprocess_page,而不仅仅是节点,例如,在分类页面,头版或任何其他自定义实体页面上。所以$变量变量并不总是相同的。这就是我的意思,“首先检查被加载的页面是否为节点,然后找出哪个节点等。” –

4

要检查字段是否为空,可以使用内置方法isEmpty()

例如为:

if (!$entity->get('category')->isEmpty()) { 
    /** @var EntityInterface $category */ 
    $category = $entity->get('category')->entity; 
    $row['category']['data'] = [ 
    '#type' => 'link', 
    '#title' => $category->get('name')->value, 
    '#url' => $category->toUrl(), 
    ]; 
} 
else { 
    $row['category'] = NULL; 
} 
0

以下方法可以检查该字段为空或不TWIG模板。

{% if node.field_date.value %} 
    <div class="my-field-wrapper"> 
    {{ content.field_date }} 
    </div> 
{% endif %} 

{% if node.field_date.value is not empty %} 
    {{ content.field_date }} 
{% endif %} 
0

该解决方案为我工作,在field_poster现在没有或最高值1。

{% if content.field_poster[0] is not empty %}