如何呈现包含其格式的字段值?


9

我正在从数据库中读取字段值及其格式。我将如何使用格式呈现该值?

Answers:


36

尽管您可能会花费大量时间来剖析Field API的工作原理,但实际上您应该直接使用Field API呈现字段内容,而不是自己查询数据库。字段中添加了许多封装和抽象,如果绕过它们,它们将唤醒旧神。

使用Field API,如果您想要整个格式化的字段(包括标签和所有值),则可以使用field_view_field()

$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');

// $output is a render array, so it needs to be rendered first
print render($output);

如果您只想在字段中显示一项的格式化值,则需要使用field_view_value(),这涉及到更多:

// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');

// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);

print render($output);

如果要使用为字段实例指定的默认格式以外的格式器,请使用或中的$display参数传递它:field_view_field()field_view_value()

$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);

$index (在field_view_value()的第三个参数)是$三角洲。在单个值字段上,该值为0。因此,您可以使用$output = field_view_value('node', $node, 'field_foo', $fields[0]);$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro

0

通过检查api,我认为您正在寻找这个。(我还没有测试过代码)

$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);

// render the field
drupal_render($the_field);

更新:重复的答案,可能只是删除我。我写此答案时发布的其他答案。



0

看起来您也可以编辑模板文件以调整其语义输出方式:

1)设置一个自定义的日期格式,并指定一个机器名称,例如“ short_date_only”或其他名称。2)配置内容类型的显示选项以使用该格式3)将字段模板覆盖为field--field_date_custom-content_type.tpl之类的内容

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.