2

在我的模块中,我有一个自定义实体LocationEntity,它使用一个自定义字段类型CoordinateItem,它有 2 个子字段XY.

那么 Drupal 8 的正确方法是:

LocationEntity1)在树枝模板中渲染它?

  • 我正在做的只是将实体发送到 twig 模板'#loc1'并使用 getter 方法手动呈现其每个字段值{{ loc1.getName() }}。它有效,但我确信这不是正确的方法。

2)如果问题1有另一种正确的方法,那么如何有多个模板来呈现实体?

  • 例如,一种包含较少字段的简单布局和一种包含所有字段的详细布局。

3)在实体中,我定义为使用自定义字段CoordinateItem。但是现在如何处理它的 getter 和 setter,因为它不是一个单独的子字段?

  • Getter if $this->get('coord')-> 一个FieldItemList对象。
  • 吸气剂 if $this->get('coord')->value-> null
  • 二传手?参数是什么类型?

3)我写了一个格式化程序CoordinateItem来显示它的子字段。但是我又不知道如何使用这个格式化程序在主(实体)模板中呈现这个自定义字段?

  • 也许这与问题1和2有关?
4

1 回答 1

2

您应该使用字段格式化程序来呈现字段。这使得配置每个字段的呈现方式成为可能。基本字段和配置字段都是一样的。

当您有一个自定义实体时,您需要自己在预处理函数中执行此操作。可以以node模块为例:

function template_preprocess_node(&$variables) {
  ...
  // Helpful $content variable for templates.
  $variables += array('content' => array());
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
  ...
}

这基本上可以{{ content }}在模板中执行,然后呈现所有字段。

这被认为是最佳实践,并且是呈现实体的最灵活和最简单的方法,因为您只需使用已存在的字段格式器用于字段。

于 2016-04-02T08:21:22.173 回答