D8如何在字段 - entity-reference.html.twig文件的词汇术语中检索自定义字段的值?

时间:2018-04-30 23:22:03

标签: entity drupal-8 preprocessor vocabulary twig-filter

我的目标是根据我添加到词汇表中的field_topic_colour对代码词汇表术语进行着色。还有其他词汇表没有此字段。因此,我需要检查并查看某个术语是否存在然后获取值,以便我可以创建我的类并使按钮具有正确的颜色。

使用kint我可以看到值,但我无法弄清楚如何在树枝中或通过预处理向下钻取它。我发现所有Qs都在节点中处理词汇术语,而不是在术语本身中。

这是我的kint屏幕截图: enter image description here

我正试图在field_topic_colour下找到“primary”(这是告诉我的Bootstrap subtheme使用什么颜色的关键字)。

我必须在预处理功能中写什么?

function MYTHEME_preprocess_field__entity_reference($variable) {
  //I need code to return a string like this (I think) where "primary"
  //is the value from my custom field in the term.
  $color = ????? (primary)
  $mytag = 'class="btn- . $color . ">TERM-NAME...TERM_URL...
}

我可以自己清理php,在上面的例子中没有担心它。我只需要获得我的领域的价值......

我在这里检查了备忘单:https://wizzlern.nl/sites/wizzlern.nl/files/artikel/drupal-content-entity-8.0.pdf但似乎我真的需要一些具体的例子和说明为什么有效的方法,所以我希望下次能够开始逻辑地弄清楚它。

2 个答案:

答案 0 :(得分:0)

你可以访问像$term->field_topic_colour->value这样的变量,因为它在一个数组中,它应该可以像$term->field_topic_colour[0]->value

那样访问
function MYTHEME_preprocess_field__entity_reference($variable) {
  $term = \Drupal::routeMatch()->getParameter('taxonomy_term');
  $color = NULL;
  if(isset($term->field_topic_colour[0]->value) {
    $color = $term->field_topic_colour[0]->value;
  }
  $mytag = 'class="btn- . $color . ">TERM-NAME...TERM_URL...
}

答案 1 :(得分:0)

立即添加答案。我在该字段中的最终代码 - entity-reference.html.twig文件:

{% for item in items %}
  {% set mylabel %}
    {{ item.content }}
  {% endset %}
  {% set myclass %}
    {{ item.content['#options'].entity.vid.0.value['target_id'] }}
  {% endset %}
  {% set myclass = myclass|replace({'_':'-'}) %}
    <div{{ item.attributes.addClass('taxonomy--item') }}>
      <a class="btn-small btn-primary tag-{{ myclass|trim }}" href="{{ item.content['#url'] }}" role="button">{{ mylabel|striptags }}</a>
    </div>
{% endfor %}

HERE是节点中访问节点中分类术语的父词汇表所需的代码。 (即内容类型节点上的各个标签)。

item.content['#options'].entity.vid.0.value['target_id']

注意:这是在Drupal 8.5.3上,我的“标签”都没有多个父母。