Answers:
尽管您可能会花费大量时间来剖析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]);