在我的模块中,我有一个自定义实体LocationEntity
,它使用自定义字段类型CoordinateItem
,其中包含2个子字段X
,Y
。
那么Drupal 8的正确方法是什么:
1)在树枝模板中渲染此LocationEntity
?
'#loc1'
并使用getter方法{{ loc1.getName() }}
手动呈现其每个字段值。它有效,但我确定这不是正确的做法。2)如果问题1有另一种正确的方法,那么如何使用多个模板来渲染实体?
3)在实体中,我定义了使用自定义字段CoordinateItem
。但是现在该如何处理它的getter和setter,因为它不是一个单独的子字段?
$this->get('coord')
- >一个FieldItemList
对象。$this->get('coord')->value
- > null
。 3)我为CoordinateItem
编写了一个格式化程序来显示其子字段。但我又不知道如何使用此格式化程序在主(实体)模板中呈现此自定义字段?
答案 0 :(得分:2)
您应该使用字段格式来呈现字段。这使得可以配置每个字段的呈现方式。对于基本字段和配置字段都是一样的。
如果您有自定义实体,则需要在预处理功能中自行完成。您可以将节点模块作为示例:
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 }}
,然后渲染所有字段。
这是最佳实践,是呈现实体的最灵活,最简单的方法,因为您只需使用已经存在的字段格式化程序。